24 Jun, 2020

9 commits

  • [ Upstream commit 34d8673a01b053b6231a995a4eec9341163d63be ]

    When running ntb_test, the script tries to run the ntb_perf test
    immediately after probing the modules. Since adding multi-port support,
    this fails seeing the new initialization procedure in ntb_perf
    can not complete instantly.

    To fix this we add a completion which is waited on when a test is
    started. In this way, run can be written any time after the module is
    loaded and it will wait for the initialization to complete instead of
    sending an error.

    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit b54369a248c2e033bfcf5d6917e08cf9d73d54a6 ]

    Legacy drivers do not have port numbers (but is reliably only two ports)
    and was broken by the recent commit that added mult-port support to
    ntb_perf. This is especially important to support the cross link
    topology which is perfectly symmetric and cannot assign unique port
    numbers easily.

    Hardware that returns zero for both the local port and the peer should
    just always use gidx=0 for the only peer.

    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit a9c4211ac918ade1522aced6b5acfbe824722f7d ]

    ntb_perf should not require more than one memory window per peer. This
    was probably an off-by-one error.

    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit 40da7d9a93c8941737ef4a1208d32c13ce017fe1 ]

    Commit 417cf39cfea9 ("NTB: Set dma mask and dma coherent mask to NTB
    devices") started using the NTB device for DMA allocations which was
    turns out was wrong. If the IOMMU is enabled, such alloctanions will
    always fail with messages such as:

    DMAR: Allocating domain for 0000:02:00.1 failed

    This is because the IOMMU has not setup the device for such use.

    Change the tools back to using the PCI device for allocations seeing
    it doesn't make sense to add an IOMMU group for the non-physical NTB
    device. Also remove the code that sets the DMA mask as it no longer
    makes sense to do this.

    Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit 912e12813dd03c602e4922fc34709ec4d4380cf0 ]

    When running ntb_test this warning is issued:

    ./ntb_test.sh: line 200: warning: command substitution: ignored null
    byte in input

    This is caused by the kernel returning one more byte than is necessary
    when reading the link file.

    Reduce the number of bytes read back to 2 as it was before the
    commit that regressed this.

    Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit 433efe720674efd9fdbcef78be75793393cf05db ]

    Currently, ntb->dev is passed to dma_alloc_coherent
    and dma_free_coherent calls. The returned dma_addr_t
    is the CPU physical address. This works fine as long
    as IOMMU is disabled. But when IOMMU is enabled, we
    need to make sure that IOVA is returned for dma_addr_t.
    So the correct way to achieve this is by changing the
    first parameter of dma_alloc_coherent() as ntb->pdev->dev
    instead.

    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Signed-off-by: Sanjay R Mehta
    Signed-off-by: Arindam Nath
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Sanjay R Mehta
     
  • [ Upstream commit 98f4e140264eeb52f22ff05be6b6dd48237255ac ]

    Currently, ntb->dev is passed to dma_alloc_coherent
    and dma_free_coherent calls. The returned dma_addr_t
    is the CPU physical address. This works fine as long
    as IOMMU is disabled. But when IOMMU is enabled, we
    need to make sure that IOVA is returned for dma_addr_t.
    So the correct way to achieve this is by changing the
    first parameter of dma_alloc_coherent() as ntb->pdev->dev
    instead.

    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Signed-off-by: Sanjay R Mehta
    Signed-off-by: Arindam Nath
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Sanjay R Mehta
     
  • [ Upstream commit fc8b086d9dbd57458d136c4fa70ee26f832c3a2e ]

    When the commit adding ntb_default_port_number() and
    ntb_default_peer_port_number() entered the kernel there was no
    users of it so it was impossible to tell what the API needed.

    When a user finally landed a year later (ntb_pingpong) there were
    more NTB topologies were created and no consideration was considered
    to how other drivers had changed.

    Now that there is a user it can be fixed to provide a sensible default
    for the legacy drivers that do not implement ntb_{peer_}port_number().
    Seeing ntb_pingpong doesn't check error codes returning EINVAL was also
    not sensible.

    Patches for ntb_pingpong and ntb_perf follow (which are broken
    otherwise) to support hardware that doesn't have port numbers. This is
    important not only to not break support with existing drivers but for
    the cross link topology which, due to its perfect symmetry, cannot
    assign unique port numbers to each side.

    Fixes: 1e5301196a88 ("NTB: Add indexed ports NTB API")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     
  • [ Upstream commit ca93c45755da98302c93abdd788fc09113baf9e0 ]

    This commit fixes pingpong support for existing drivers that do not
    implement ntb_default_port_number() and ntb_default_peer_port_number().
    This is required for hardware (like the crosslink topology of
    switchtec) which cannot assign reasonable port numbers to each port due
    to its perfect symmetry.

    Instead of picking the doorbell to use based on the the index of the
    peer, we use the peer's port number. This is a bit clearer and easier
    to understand.

    Fixes: c7aeb0afdcc2 ("NTB: ntb_pp: Add full multi-port NTB API support")
    Signed-off-by: Logan Gunthorpe
    Acked-by: Allen Hubbe
    Tested-by: Alexander Fomichev
    Signed-off-by: Jon Mason
    Signed-off-by: Sasha Levin

    Logan Gunthorpe
     

24 Sep, 2019

6 commits

  • Fix typos in drivers/ntb/hw/idt/Kconfig.
    Use consistent spelling and capitalization.

    Fixes: bf2a952d31d2 ("NTB: Add IDT 89HPESxNTx PCIe-switches support")
    Signed-off-by: Randy Dunlap
    Cc: Dave Jiang
    Cc: Allen Hubbe
    Cc: Serge Semin
    Signed-off-by: Jon Mason

    Randy Dunlap
     
  • The AMD new hardware uses BAR23 and BAR45 as memory windows
    as compared to previos where BAR1, BAR23 and BAR45 is used
    for memory windows.

    This patch add support for both AMD hardwares.

    Signed-off-by: Sanjay R Mehta
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • Signed-off-by: Sanjay R Mehta
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • Variable rc is initialized to a value that is never read and it
    is re-assigned later. The initialization is redundant and can be
    removed.

    Addresses-Coverity: ("Unused value")
    Signed-off-by: Colin Ian King
    Signed-off-by: Jon Mason

    Colin Ian King
     
  • On switchtec_ntb_mw_set_trans() call, when (only) address == 0, it acts as
    ntb_mw_clear_trans(). Fix this, since address == 0 and size != 0 is valid
    combination for setting translation.

    Signed-off-by: Alexander Fomichev
    Reviewed-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Alexander Fomichev
     
  • second parameter of ntb_peer_mw_get_addr is pointing to wrong memory
    window index by passing "peer gidx" instead of "local gidx".

    For ex, "local gidx" value is '0' and "peer gidx" value is '1', then

    on peer side ntb_mw_set_trans() api is used as below with gidx pointing to
    local side gidx which is '0', so memroy window '0' is chosen and XLAT '0'
    will be programmed by peer side.

    ntb_mw_set_trans(perf->ntb, peer->pidx, peer->gidx, peer->inbuf_xlat,
    peer->inbuf_size);

    Now, on local side ntb_peer_mw_get_addr() is been used as below with gidx
    pointing to "peer gidx" which is '1', so pointing to memory window '1'
    instead of memory window '0'.

    ntb_peer_mw_get_addr(perf->ntb, peer->gidx, &phys_addr,
    &peer->outbuf_size);

    So this patch pass "local gidx" as parameter to ntb_peer_mw_get_addr().

    Signed-off-by: Sanjay R Mehta
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     

06 Aug, 2019

1 commit

  • msi.c is not a module on its own right and should not have the
    MODULE_[LICENSE|VERSION|AUTHOR|DESCRIPTION] definitions.

    This caused a regression noticed by lkp with the following back
    trace:

    WARNING: CPU: 0 PID: 1 at kernel/params.c:861 param_sysfs_init+0xb1/0x20a
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.2.0-rc1-00018-g26b3a37b928457 #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014
    RIP: 0010:param_sysfs_init+0xb1/0x20a
    Code: 24 38 e8 ec 17 2e fd 49 8b 7c 24 38 e8 76 fe ff ff 48 85 c0 48 89 c5 74 25 31 d2 4c 89 e6 48 89 c7 e8 6d 6f 3c fd 85 c0 74 02 0b 48 89 ef 31 f6 e8 5d 70 a7 fe 48 89 ef e8 95 52 a7 fe 48 83
    RSP: 0000:ffff88806b0ffe30 EFLAGS: 00010282
    RAX: 00000000ffffffef RBX: ffffffff83774220 RCX: ffff88806a85e880
    RDX: 00000000ffffffef RSI: ffff88806b000400 RDI: ffff88806a8608c0
    RBP: ffff88806b392000 R08: ffffed100d61ff59 R09: ffffed100d61ff59
    R10: 0000000000000001 R11: ffffed100d61ff58 R12: ffffffff83974bc0
    R13: 0000000000000004 R14: 0000000000000028 R15: 00000000000003b9
    FS: 0000000000000000(0000) GS:ffff88806b800000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 000000000380e000 CR4: 00000000000406b0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
    ? file_caps_disable+0x10/0x10
    ? locate_module_kobject+0xf2/0xf2
    do_one_initcall+0x47/0x1f0
    kernel_init_freeable+0x1b1/0x243
    ? rest_init+0xd0/0xd0
    kernel_init+0xa/0x130
    ? calculate_sigpending+0x63/0x80
    ? rest_init+0xd0/0xd0
    ret_from_fork+0x1f/0x30
    ---[ end trace 78201497ae74cc91 ]---

    Reported-by: kernel test robot
    Fixes: 26b3a37b9284 ("NTB: Introduce MSI library")
    Signed-off-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     

22 Jul, 2019

1 commit

  • Pull NTB updates from Jon Mason:
    "New feature to add support for NTB virtual MSI interrupts, the ability
    to test and use this feature in the NTB transport layer.

    Also, bug fixes for the AMD and Switchtec drivers, as well as some
    general patches"

    * tag 'ntb-5.3' of git://github.com/jonmason/ntb: (22 commits)
    NTB: Describe the ntb_msi_test client in the documentation.
    NTB: Add MSI interrupt support to ntb_transport
    NTB: Add ntb_msi_test support to ntb_test
    NTB: Introduce NTB MSI Test Client
    NTB: Introduce MSI library
    NTB: Rename ntb.c to support multiple source files in the module
    NTB: Introduce functions to calculate multi-port resource index
    NTB: Introduce helper functions to calculate logical port number
    PCI/switchtec: Add module parameter to request more interrupts
    PCI/MSI: Support allocating virtual MSI interrupts
    ntb_hw_switchtec: Fix setup MW with failure bug
    ntb_hw_switchtec: Skip unnecessary re-setup of shared memory window for crosslink case
    ntb_hw_switchtec: Remove redundant steps of switchtec_ntb_reinit_peer() function
    NTB: correct ntb_dev_ops and ntb_dev comment typos
    NTB: amd: Silence shift wrapping warning in amd_ntb_db_vector_mask()
    ntb_hw_switchtec: potential shift wrapping bug in switchtec_ntb_init_sndev()
    NTB: ntb_transport: Ensure qp->tx_mw_dma_addr is initaliazed
    NTB: ntb_hw_amd: set peer limit register
    NTB: ntb_perf: Clear stale values in doorbell and command SPAD register
    NTB: ntb_perf: Disable NTB link after clearing peer XLAT registers
    ...

    Linus Torvalds
     

13 Jun, 2019

15 commits

  • Introduce the module parameter 'use_msi' which, when set, uses
    MSI interrupts instead of doorbells for each queue pair (QP). The
    parameter is only available if NTB MSI support is configured into
    the kernel. We also require there to be more than one memory window
    (MW) so that an extra one is available to forward the APIC region.

    To use MSIs, we request one interrupt per QP and forward the MSI address
    and data to the peer using scratch pad registers (SPADS) above the MW
    SPADS. (If there are not enough SPADS the MSI interrupt will not be used.)

    Once registered, we simply use ntb_msi_peer_trigger and the receiving
    ISR simply queues up the rxc_db_work for the queue.

    This addition can significantly improve performance of ntb_transport.
    In a simple, untuned, apples-to-apples comparision using ntb_netdev
    and iperf with switchtec hardware, I see 3.88Gb/s without MSI
    interrupts and 14.1Gb/s wit MSI, which is a more than 3x improvement.

    Signed-off-by: Logan Gunthorpe
    Cc: Dave Jiang
    Cc: Allen Hubbe
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • Introduce a tool to test NTB MSI interrupts similar to the other
    NTB test tools. This tool creates a debugfs directory for each
    NTB device with the following files:

    port
    irqX_occurrences
    peerX/port
    peerX/count
    peerX/trigger

    The 'port' file tells the user the local port number and the
    'occurrences' files tell the number of local interrupts that
    have been received for each interrupt.

    For each peer, the 'port' file and the 'count' file tell you the
    peer's port number and number of interrupts respectively. Writing
    the interrupt number to the 'trigger' file triggers the interrupt
    handler for the peer which should increment their corresponding
    'occurrences' file. The 'ready' file indicates if a peer is ready,
    writing to this file blocks until it is ready.

    The module parameter num_irqs can be used to set the number of
    local interrupts. By default this is 4. This is only limited by
    the number of unused MSI interrupts registered by the hardware
    (this will require support of the hardware driver) and there must
    be at least 2*num_irqs + 1 spads registers available.

    Signed-off-by: Logan Gunthorpe
    Cc: Dave Jiang
    Cc: Allen Hubbe
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • The NTB MSI library allows passing MSI interrupts across a memory
    window. This offers similar functionality to doorbells or messages
    except will often have much better latency and the client can
    potentially use significantly more remote interrupts than typical hardware
    provides for doorbells. (Which can be important in high-multiport
    setups.)

    The library utilizes one memory window per peer and uses the highest
    index memory windows. Before any ntb_msi function may be used, the user
    must call ntb_msi_init(). It may then setup and tear down the memory
    windows when the link state changes using ntb_msi_setup_mws() and
    ntb_msi_clear_mws().

    The peer which receives the interrupt must call ntb_msim_request_irq()
    to assign the interrupt handler (this function is functionally
    similar to devm_request_irq()) and the returned descriptor must be
    transferred to the peer which can use it to trigger the interrupt.
    The triggering peer, once having received the descriptor, can
    trigger the interrupt by calling ntb_msi_peer_trigger().

    Signed-off-by: Logan Gunthorpe
    Cc: Dave Jiang
    Cc: Allen Hubbe
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • The kbuild system does not support having multiple source files in
    a module if one of those source files has the same name as the module.

    Therefore, we must rename ntb.c to core.c, while the module remains
    ntb.ko.

    This is similar to the way the nvme modules are structured.

    Signed-off-by: Logan Gunthorpe
    Cc: Dave Jiang
    Cc: Allen Hubbe
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • Switchtec does not support setting multiple MWs simultaneously. The
    driver takes a hardware lock to ensure that two peers are not doing this
    simultaneously and it fails if someone else takes the lock. In most
    cases, this is fine as clients only setup the MWs once on one side of
    the link.

    However, there's a race condition when a re-initialization is caused by
    a link event. The driver will re-setup the shared memory window
    asynchronously and this races with the client setting up it's memory
    windows on the link up event.

    To fix this we ensure do the entire initialization in a work queue and
    signal the client once it's done.

    Signed-off-by: Joey Zhang
    Signed-off-by: Wesley Sheng
    Signed-off-by: Jon Mason

    Joey Zhang
     
  • In case of NTB crosslink topology, the setting of shared memory window in
    the virtual partition doesn't reset on peer's reboot. So skip the
    unnecessary re-setup of shared memory window for that case.

    Signed-off-by: Wesley Sheng
    Signed-off-by: Jon Mason

    Wesley Sheng
     
  • When a re-initialization is caused by a link event, the driver will
    re-setup the shared memory window. But at that time, the shared memory
    is still valid, and it's unnecessary to free, reallocate and then
    initialize it again. We only need to reconfigure the hardware
    registers. Remove the redundant steps from
    switchtec_ntb_reinit_peer() function.

    Signed-off-by: Joey Zhang
    Signed-off-by: Wesley Sheng
    Reviewed-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Joey Zhang
     
  • This code triggers a Smatch warning:

    drivers/ntb/hw/amd/ntb_hw_amd.c:336 amd_ntb_db_vector_mask()
    warn: should '(1 << db_vector)' be a 64 bit type?

    I don't think "db_vector" can be higher than 16 so this doesn't affect
    runtime, but it's nice to silence the static checker warning and we
    might increase "ndev->db_count" in the future.

    Signed-off-by: Dan Carpenter
    Acked-by: Shyam Sundar S K
    Signed-off-by: Jon Mason

    Dan Carpenter
     
  • This code triggers a Smatch warning:

    drivers/ntb/hw/mscc/ntb_hw_switchtec.c:884 switchtec_ntb_init_sndev()
    warn: should '(1 << sndev->peer_partition)' be a 64 bit type?

    The "part_map" and "tpart_vec" variables are u64 type so this seems like
    a valid warning.

    Fixes: 3df54c870f52 ("ntb_hw_switchtec: Allow using Switchtec NTB in multi-partition setups")
    Signed-off-by: Dan Carpenter
    Reviewed-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Dan Carpenter
     
  • Dan Carpenter's static checker reported:

    drivers/ntb/ntb_transport.c:1926 ntb_transport_create_queue()
    error: we previously assumed 'qp->tx_dma_chan' could be null (see line 1872)

    This is because the tx_mw_dma_addr is uninitialized in this function and
    may be incorrectly released using a NULL DMA channel.

    In practice this bug will not likely be seen. I'd guess you could hit
    this if you loaded ntb_netdev with use_dma=True, then unloaded it and
    loaded it again after setting the module parameter to use_dma=False.

    To fix this, we simply ensure that tx_mw_dma_addr is always
    initialized to zero. This is the safest in case any other part of the
    code operates on it if it is non-zero.

    Fixes: c59666bb32b9 ("NTB: ntb_transport: Ensure the destination buffer is mapped for TX DMA")
    Signed-off-by: Logan Gunthorpe
    Cc: Dan Carpenter
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • As per amd ntb spec it says that peer limit register
    must be programmed

    Signed-off-by: Sanjay R Mehta
    Acked-by: Allen Hubbe
    Acked-by: Logan Gunthorpe
    Acked-by: Serge Semin
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • when ntb_perf is unloaded, the command scratchpad register still
    retains the last initialized value of PERF_CMD_INVAL. When ntb_perf
    is re-loaded and reads peer command scratchpad register and it mis
    interprets the peer state as initialized.

    To avoid this, clearing the local side command scratchpad register
    in perf_disable_service

    Signed-off-by: Sanjay R Mehta
    Acked-by: Allen Hubbe
    Acked-by: Logan Gunthorpe
    Acked-by: Serge Semin
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • If ntb link disabled before clearing peer's XLAT register, the clearing
    won't have any effect since the link is already down. So modified the
    sequence so that the link is down only towards the end of the function
    after clearing the XLAT register

    Signed-off-by: Sanjay R Mehta
    Acked-by: Allen Hubbe
    Acked-by: Logan Gunthorpe
    Acked-by: Serge Semin
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • while waiting for the peer ntb_perf to initialize scratchpad
    registers, local side ntb_perf might have already exhausted the
    maximum number of retries which is currently set to 500. To avoid
    this and to give little more time to the peer ntb_perf for scratchpad
    initialization, increased the number of retries to 1000

    Signed-off-by: Sanjay R Mehta
    Acked-by: Allen Hubbe
    Acked-by: Logan Gunthorpe
    Acked-by: Serge Semin
    Signed-off-by: Jon Mason

    Sanjay R Mehta
     
  • Fix sparse warning:

    drivers/ntb/hw/intel/ntb_hw_gen3.c:535:5: warning:
    symbol 'intel_ntb3_peer_db_addr' was not declared. Should it be static?

    Signed-off-by: YueHaibing
    Acked-by: Dave Jiang
    Signed-off-by: Jon Mason

    YueHaibing
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms and conditions of the gnu general public license
    version 2 as published by the free software foundation this program
    is distributed in the hope it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    for more details

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 263 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Alexios Zavras
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190529141901.208660670@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

21 May, 2019

1 commit


08 Apr, 2019

1 commit

  • mmiowb() is now implied by spin_unlock() on architectures that require
    it, so there is no reason to call it from driver code. This patch was
    generated using coccinelle:

    @mmiowb@
    @@
    - mmiowb();

    and invoked as:

    $ for d in drivers include/linux/qed sound; do \
    spatch --include-headers --sp-file mmiowb.cocci --dir $d --in-place; done

    NOTE: mmiowb() has only ever guaranteed ordering in conjunction with
    spin_unlock(). However, pairing each mmiowb() removal in this patch with
    the corresponding call to spin_unlock() is not at all trivial, so there
    is a small chance that this change may regress any drivers incorrectly
    relying on mmiowb() to order MMIO writes between CPUs using lock-free
    synchronisation. If you've ended up bisecting to this commit, you can
    reintroduce the mmiowb() calls using wmb() instead, which should restore
    the old behaviour on all architectures other than some esoteric ia64
    systems.

    Acked-by: Linus Torvalds
    Signed-off-by: Will Deacon

    Will Deacon
     

16 Mar, 2019

1 commit

  • Pull NTB updates from Jon Mason:

    - fixes for switchtec debugability and mapping table entries

    - NTB transport improvements

    - a reworking of the peer_db_addr for better abstraction

    * tag 'ntb-5.1' of git://github.com/jonmason/ntb:
    NTB: add new parameter to peer_db_addr() db_bit and db_data
    NTB: ntb_transport: Ensure the destination buffer is mapped for TX DMA
    NTB: ntb_transport: Free MWs in ntb_transport_link_cleanup()
    ntb_hw_switchtec: Added support of >=4G memory windows
    ntb_hw_switchtec: NT req id mapping table register entry number should be 512
    ntb_hw_switchtec: debug print 64bit aligned crosslink BAR Numbers

    Linus Torvalds
     

14 Feb, 2019

1 commit

  • NTB door bell usage depends on NTB hardware.

    ex: intel NTB gen1 has one peer door bell register which can be controlled
    by the bitmap writen to it, while Intel NTB gen3 has a registers
    per door bell and the data trigering the each door bell is always 1.

    therefore exposing only peer door bell address forcing the user
    to be aware of such low level details

    Signed-off-by: Leonid Ravich
    Acked-by: Logan Gunthorpe
    Acked-by: Dave Jiang
    Acked-by: Allen Hubbe
    Signed-off-by: Jon Mason

    Leonid Ravich
     

11 Feb, 2019

3 commits

  • Presently, when ntb_transport is used with DMA and the IOMMU turned on,
    it fails with errors from the IOMMU such as:

    DMAR: DRHD: handling fault status reg 202
    DMAR: [DMA Write] Request device [00:04.0] fault addr
    381fc0340000 [fault reason 05] PTE Write access is not set

    This is because ntb_transport does not map the BAR space with the IOMMU.

    To fix this, we map the entire MW region for each QP after we assign
    the DMA channel. This prevents needing an extra DMA map in the fast
    path.

    Link: https://lore.kernel.org/linux-pci/499934e7-3734-1aee-37dd-b42a5d2a2608@intel.com/
    Signed-off-by: Logan Gunthorpe
    Reviewed-by: Dave Jiang
    Signed-off-by: Jon Mason

    Logan Gunthorpe
     
  • If NTB peer host crashes or reboots, the NTB transport link will be
    down and the MWs of NTB transport will be invalid. But the
    ntb_transport_link_cleanup() does not free these invalid MWs. When
    the NTB peer host is recovered later, NTB transport link will be
    up and the ntb_set_mw() will not reset up MWs. Because the MWs of
    NTB transport are invalid, the NTB transport will not work.

    We can fix it by freeing MWs when NTB transport link is down, then
    the ntb_set_mw() will reset up MWs when NTB transport link is up.

    Signed-off-by: Joey Zhang
    Reviewed-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Joey Zhang
     
  • Current Switchtec's BAR setup registers are limited to 32bits,
    corresponding to the maximum MW (memory window) size is
    Signed-off-by: Paul Selles
    Signed-off-by: Wesley Sheng
    Reviewed-by: Logan Gunthorpe
    Signed-off-by: Jon Mason

    Paul Selles