19 May, 2009

1 commit


22 Apr, 2009

1 commit

  • In non-SMP mode, the variable section attribute specified by DECLARE_PER_CPU()
    does not agree with that specified by DEFINE_PER_CPU(). This means that
    architectures that have a small data section references relative to a base
    register may throw up linkage errors due to too great a displacement between
    where the base register points and the per-CPU variable.

    On FRV, the .h declaration says that the variable is in the .sdata section, but
    the .c definition says it's actually in the .data section. The linker throws
    up the following errors:

    kernel/built-in.o: In function `release_task':
    kernel/exit.c:78: relocation truncated to fit: R_FRV_GPREL12 against symbol `per_cpu__process_counts' defined in .data section in kernel/built-in.o
    kernel/exit.c:78: relocation truncated to fit: R_FRV_GPREL12 against symbol `per_cpu__process_counts' defined in .data section in kernel/built-in.o

    To fix this, DECLARE_PER_CPU() should simply apply the same section attribute
    as does DEFINE_PER_CPU(). However, this is made slightly more complex by
    virtue of the fact that there are several variants on DEFINE, so these need to
    be matched by variants on DECLARE.

    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    David Howells
     

10 Apr, 2009

11 commits


02 Apr, 2009

3 commits

  • We have a 64bit value that needs to be set atomically.
    This is easy and quick on all 64bit archs, and can also be done
    on x86/32 with set_64bit() (uses cmpxchg8b). However other
    32b archs don't have this.

    I actually changed this to the current state in preparation for
    mainline because the old way (using a spinlock on 32b) resulted in
    unsightly #ifdefs in the code. But obviously, being correct takes
    precedence.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • This fixes a bug where a connection was unexpectedly
    not on *any* list while being destroyed. It also
    cleans up some code duplication and regularizes some
    function names.

    * Grab appropriate lock in conn_free() and explain in comment
    * Ensure via locking that a conn is never not on either
    a dev's list or the nodev list
    * Add rds_xx_remove_conn() to match rds_xx_add_conn()
    * Make rds_xx_add_conn() return void
    * Rename remove_{,nodev_}conns() to
    destroy_{,nodev_}conns() and unify their implementation
    in a helper function
    * Document lock ordering as nodev conn_lock before
    dev_conn_lock

    Reported-by: Yosef Etigin
    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • rs_send_drop_to() is called during socket close. If it takes
    m_rs_lock without disabling interrupts, then
    rds_send_remove_from_sock() can run from the rx completion
    handler and thus deadlock.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     

04 Mar, 2009

1 commit

  • Fix RDS Infiniband dependencies for RDMA so that these
    build errors won't happen:

    ERROR: "rdma_accept" [net/rds/rds.ko] undefined!
    ERROR: "rdma_destroy_id" [net/rds/rds.ko] undefined!
    ERROR: "rdma_connect" [net/rds/rds.ko] undefined!
    ERROR: "rdma_destroy_qp" [net/rds/rds.ko] undefined!
    ERROR: "rdma_listen" [net/rds/rds.ko] undefined!
    ERROR: "rdma_notify" [net/rds/rds.ko] undefined!
    ERROR: "rdma_create_id" [net/rds/rds.ko] undefined!
    ERROR: "rdma_create_qp" [net/rds/rds.ko] undefined!
    ERROR: "rdma_bind_addr" [net/rds/rds.ko] undefined!
    ERROR: "rdma_resolve_route" [net/rds/rds.ko] undefined!
    ERROR: "rdma_disconnect" [net/rds/rds.ko] undefined!
    ERROR: "rdma_reject" [net/rds/rds.ko] undefined!
    ERROR: "rdma_resolve_addr" [net/rds/rds.ko] undefined!

    Signed-off-by: Randy Dunlap
    Acked-by: Andy Grover
    Signed-off-by: David S. Miller

    Randy Dunlap
     

02 Mar, 2009

1 commit

  • As reported by Stephen Rothwell.

    > Today's linux-next build (powerpc allyesconfig) failed like this:
    >
    > net/rds/cong.c: In function 'rds_cong_set_bit':
    > net/rds/cong.c:284: error: implicit declaration of function 'generic___set_le_bit'
    > net/rds/cong.c: In function 'rds_cong_clear_bit':
    > net/rds/cong.c:298: error: implicit declaration of function 'generic___clear_le_bit'
    > net/rds/cong.c: In function 'rds_cong_test_bit':
    > net/rds/cong.c:309: error: implicit declaration of function 'generic_test_le_bit'

    Signed-off-by: David S. Miller

    David S. Miller
     

27 Feb, 2009

21 commits

  • Add RDS Kconfig and Makefile, and modify net/'s to add
    us to the build.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Although most of IB and iWARP are separated from each other,
    there is some common code required to handle their shared
    CM listen port. This code listens for CM events and then
    dispatches the event to the appropriate transport, either
    IB or iWARP.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Support for iWARP NICs is implemented as a separate
    RDS transport from IB. The code, however, is very
    similar to IB (it was forked, basically.) so let's keep
    it in one changeset.

    The reason for this duplicationis that despite its similarity
    to IB, there are a number of places where it has different
    semantics. iwarp zcopy support is still under development,
    and giving it its own sandbox ensures that IB code isn't
    disrupted while iwarp changes. Over time these transports
    will re-converge.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • IB-specific stats and sysctls.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Header parsing, ring refill. It puts the incoming data into an
    rds_incoming struct, which is passed up to rds-core.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Specific to IB is a credits-based flow control mechanism, in
    addition to the expected usage of the IB API to package outgoing
    data into work requests.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Registers as an RDS transport and an IB client, and uses IB CM
    API to allocate ids, queue pairs, and the rest of that fun stuff.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Some transports may support RDMA features. This handles the
    non-transport-specific parts, like pinning user pages and
    tracking mapped regions.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Upon receiving a datagram from the transport, RDS parses the
    headers and potentially queues an ACK.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • This is the code to send an RDS datagram.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Parsing of newly-received RDS message headers (including ext.
    headers) and copy-to/from-user routines.

    page.c implements a per-cpu page remainder cache, to reduce the
    number of allocations needed for small datagrams.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • RDS exposes a few tunable parameters via sysctls.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • A simple rds transport to handle loopback connections.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • While arguably the fact that the underlying transport needs a
    connection to convey RDS's datagrame reliably is not important
    to rds proper, the transports implemented so far (IB and TCP)
    have both been connection-oriented, and so the connection
    state machine-related code is in the common rds code.

    This patch also includes several work items, to handle connecting,
    sending, receiving, and shutdown.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • RDS currently generates a lot of stats that are accessible via
    the rds-info utility. This code implements the support for this.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • RDS supports multiple transports. While this initial submission
    only supports Infiniband transport, this abstraction allows others
    to be added. We're working on an iWARP transport, and also see
    UDP over DCB as another possibility.

    This code handles transport registration.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • RDS handles per-socket congestion by updating peers with a complete
    congestion map (8KB). This code keeps track of these maps for itself
    and ones received from peers.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • RDS's main data structure definitions and exported functions.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover
     
  • Implement the RDS (Reliable Datagram Sockets) interface.

    Signed-off-by: Andy Grover
    Signed-off-by: David S. Miller

    Andy Grover