22 Jan, 2013

2 commits

  • Address the sparse warnings and resulting fallout

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Atomic readq and writeq do not exist by default on some 32bit
    architectures, thus causing compile errors due to non-existent symbols.
    Since NTB has not been tested 32bit, disable x86_32 support until such
    time as this and any other issues can be properly discovered.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     

21 Jan, 2013

11 commits

  • Update NTB version to 0.25

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • If the NTB client driver enqueues the maximum number of rx buffers, it
    will not be able to re-enqueue another in its callback handler due to a
    lack of free entries. This can be avoided by adding the current entry
    to the free queue prior to calling the client callback handler. With
    this change, ntb_netdev will no longer encounter a rx error on its first
    packet.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • CPU reads across NTB are slow(er) and can hang the local system if an
    ECC error is encountered on the remote. To work around the need for a
    read, have the remote side write its current position in the rx buffer
    to the local system's buffer and use that to see if there is room when
    transmitting.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Correct gcc warning of using too much stack debugfs_read. This is done
    by kmallocing the buffer instead of using the char array on stack.
    Also, shrinking the buffer to something closer to what is currently
    being used.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Whitespace cleanups found via `indent`

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Declare ntb_bus_type static to remove it from name space, and remove
    unused ntb_get_max_spads function. Found via `make namespacecheck`.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Use simple_open for debugfs instead of recreating it in the NTB driver.
    Caught by coccicheck.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Move all cancel_delayed_work_sync to a work thread to prevent sleeping
    in interrupt context (when the NTB link goes down). Caught via
    'Sleep inside atomic section checking'

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Since it is possible for the memory windows on the two NTB connected
    systems to be different sizes, the divergent sizes must be accounted for
    in the segmentation of the MW's on each side. Create separate size
    variables and initialization as necessary.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • mmiowb is not sufficient to flush the data and is causing data
    corruption. Change to wmb and the data corruption is no more.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     
  • Attempts to probe client ntb drivers without ntb hardware present will
    result in null pointer dereference due to the lack of the ntb bus device
    being registers. Check to see if this is the case, and fail all calls
    by the clients registering their drivers.

    Signed-off-by: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason
     

18 Jan, 2013

2 commits

  • These are now gone from the kernel, so remove them from the newly-added
    drivers before they start to cause build errors for people.

    Cc: Jon Mason
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • A PCI-Express non-transparent bridge (NTB) is a point-to-point PCIe bus
    connecting 2 systems, providing electrical isolation between the two subsystems.
    A non-transparent bridge is functionally similar to a transparent bridge except
    that both sides of the bridge have their own independent address domains. The
    host on one side of the bridge will not have the visibility of the complete
    memory or I/O space on the other side of the bridge. To communicate across the
    non-transparent bridge, each NTB endpoint has one (or more) apertures exposed to
    the local system. Writes to these apertures are mirrored to memory on the
    remote system. Communications can also occur through the use of doorbell
    registers that initiate interrupts to the alternate domain, and scratch-pad
    registers accessible from both sides.

    The NTB device driver is needed to configure these memory windows, doorbell, and
    scratch-pad registers as well as use them in such a way as they can be turned
    into a viable communication channel to the remote system. ntb_hw.[ch]
    determines the usage model (NTB to NTB or NTB to Root Port) and abstracts away
    the underlying hardware to provide access and a common interface to the doorbell
    registers, scratch pads, and memory windows. These hardware interfaces are
    exported so that other, non-mainlined kernel drivers can access these.
    ntb_transport.[ch] also uses the exported interfaces in ntb_hw.[ch] to setup a
    communication channel(s) and provide a reliable way of transferring data from
    one side to the other, which it then exports so that "client" drivers can access
    them. These client drivers are used to provide a standard kernel interface
    (i.e., Ethernet device) to NTB, such that Linux can transfer data from one
    system to the other in a standard way.

    Signed-off-by: Jon Mason
    Reviewed-by: Nicholas Bellinger
    Signed-off-by: Greg Kroah-Hartman

    Jon Mason