All of lore.kernel.org
 help / color / mirror / Atom feed
* [SPDK] Re: Potential defect in pci_unplug()
@ 2020-09-28 15:43 Harris, James R
  2020-09-29  1:15 ` [dpdk-dev] FW: " Niu, Yawei
  0 siblings, 1 reply; 8+ messages in thread
From: Harris, James R @ 2020-09-28 15:43 UTC (permalink / raw)
  To: spdk

[-- Attachment #1: Type: text/plain, Size: 2030 bytes --]

Hi Niu,

I agree, this doesn't look right.  Could you file an SPDK issue for this to make sure we track it?  And then try sending an e-mail to the DPDK mailing list?  I'm open to submitting a patch to our DPDK submodule short-term, but only if we get agreement with DPDK community that this fix is correct.

Thanks,

Jim


On 9/28/20, 12:17 AM, "Niu, Yawei" <yawei.niu(a)intel.com> wrote:

    Hi,

    In the pci_unplug() (dpdk/drivers/bus/pci/pci_common.c), why do we call rte_devargs_remove() to remove the saved device args? That looks a defect to me, since that’ll result in the hot removed device failed to be detected when it’s plugged back (when white list option was provided), the situation is described following:

      1.  App starts with white list option provided, let’s suppose the device in white list is: 0000:81:00.0;
      2.  rte_devargs_add() is called to add this device arg on rte_eal_init();
      3.  Issue “echo 1 > /sys/bus/pci/devices/0000\:81\:00.0/remove” to hot remove the device;
      4.  pci_unplug() is called to remove the device, and rte_devargs_remove() is called, so this device arg for white list is remove too;
      5.  Issue “echo 1 > /sys/bus/pci/rescan” then “PCI_WHITELIST=”0000:81:00.0” spdk/script/setup.sh” to do hot plug;
      6.  In pci_scan_one(), new dev is generated, however, the dev->device.devargs is set NULL since the device args has been removed on device unplug;
      7.  rte_pci_probe() does white list scan, however, it unexpectedly skips the device because the devargs of the device is NULL now;

    I don’t fully understand the DPDK code, but this rte_devargs_remove() in pci_unplug() doesn’t make sense to me (when I commented it out, seems everything will work as expected). Is this a glitch or I missed anything?

    Thanks
    -Niu


    _______________________________________________
    SPDK mailing list -- spdk(a)lists.01.org
    To unsubscribe send an email to spdk-leave(a)lists.01.org


^ permalink raw reply	[flat|nested] 8+ messages in thread
* [SPDK] Re: Potential defect in pci_unplug()
@ 2020-09-29  1:17 Niu, Yawei
  0 siblings, 0 replies; 8+ messages in thread
From: Niu, Yawei @ 2020-09-29  1:17 UTC (permalink / raw)
  To: spdk

[-- Attachment #1: Type: text/plain, Size: 2540 bytes --]

Thanks a lot, Jim. I've opened SPDK issue #1605 to track this, and the mail is forwarded to dev(a)dpdk.org.

Thanks
-Niu

On 2020/9/28, 11:44 PM, "Harris, James R" <james.r.harris(a)intel.com> wrote:

    Hi Niu,
    
    I agree, this doesn't look right.  Could you file an SPDK issue for this to make sure we track it?  And then try sending an e-mail to the DPDK mailing list?  I'm open to submitting a patch to our DPDK submodule short-term, but only if we get agreement with DPDK community that this fix is correct.
    
    Thanks,
    
    Jim
    
    
    On 9/28/20, 12:17 AM, "Niu, Yawei" <yawei.niu(a)intel.com> wrote:
    
        Hi,
    
        In the pci_unplug() (dpdk/drivers/bus/pci/pci_common.c), why do we call rte_devargs_remove() to remove the saved device args? That looks a defect to me, since that’ll result in the hot removed device failed to be detected when it’s plugged back (when white list option was provided), the situation is described following:
    
          1.  App starts with white list option provided, let’s suppose the device in white list is: 0000:81:00.0;
          2.  rte_devargs_add() is called to add this device arg on rte_eal_init();
          3.  Issue “echo 1 > /sys/bus/pci/devices/0000\:81\:00.0/remove” to hot remove the device;
          4.  pci_unplug() is called to remove the device, and rte_devargs_remove() is called, so this device arg for white list is remove too;
          5.  Issue “echo 1 > /sys/bus/pci/rescan” then “PCI_WHITELIST=”0000:81:00.0” spdk/script/setup.sh” to do hot plug;
          6.  In pci_scan_one(), new dev is generated, however, the dev->device.devargs is set NULL since the device args has been removed on device unplug;
          7.  rte_pci_probe() does white list scan, however, it unexpectedly skips the device because the devargs of the device is NULL now;
    
        I don’t fully understand the DPDK code, but this rte_devargs_remove() in pci_unplug() doesn’t make sense to me (when I commented it out, seems everything will work as expected). Is this a glitch or I missed anything?
    
        Thanks
        -Niu
    
    
        _______________________________________________
        SPDK mailing list -- spdk(a)lists.01.org
        To unsubscribe send an email to spdk-leave(a)lists.01.org
    
    _______________________________________________
    SPDK mailing list -- spdk(a)lists.01.org
    To unsubscribe send an email to spdk-leave(a)lists.01.org
    


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-10-13 23:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-28 15:43 [SPDK] Re: Potential defect in pci_unplug() Harris, James R
2020-09-29  1:15 ` [dpdk-dev] FW: " Niu, Yawei
2020-10-09 16:09   ` Gaëtan Rivet
2020-10-13  4:31     ` Niu, Yawei
2020-10-13  4:31       ` [SPDK] Re: [dpdk-dev] FW: " Niu, Yawei
2020-10-13 23:05       ` [dpdk-dev] FW: [SPDK] " Harris, James R
2020-10-13 23:05         ` [SPDK] Re: [dpdk-dev] FW: " Harris, James R
2020-09-29  1:17 [SPDK] " Niu, Yawei

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.