* [dpdk-stable] [PATCH v9 02/19] bus/pci: fix PCI address compare [not found] ` <20180706141826.204044-1-qi.z.zhang@intel.com> @ 2018-07-06 14:18 ` Qi Zhang 0 siblings, 0 replies; 9+ messages in thread From: Qi Zhang @ 2018-07-06 14:18 UTC (permalink / raw) To: thomas, anatoly.burakov Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, Qi Zhang, stable When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr is valid. So compare the 8th byte will cause the unexpected result, which happens when repeatedly attach/detach a device. Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index aeeaa9ed8..dd25c3542 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { }; EAL_REGISTER_TAILQ(rte_vfio_tailq) +/* Compair two pci address */ +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) +{ + if (addr1->domain == addr2->domain && + addr1->bus == addr2->bus && + addr1->devid == addr2->devid && + addr1->function == addr2->function) + return 0; + return 1; +} + int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); /* Get vfio_res */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) continue; break; } -- 2.13.6 ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20180709033706.27858-1-qi.z.zhang@intel.com>]
* [dpdk-stable] [PATCH v10 02/19] bus/pci: fix PCI address compare [not found] ` <20180709033706.27858-1-qi.z.zhang@intel.com> @ 2018-07-09 3:36 ` Qi Zhang 0 siblings, 0 replies; 9+ messages in thread From: Qi Zhang @ 2018-07-09 3:36 UTC (permalink / raw) To: thomas, anatoly.burakov Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, Qi Zhang, stable When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr is valid. So compare the 8th byte will cause the unexpected result, which happens when repeatedly attach/detach a device. Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index aeeaa9ed8..dd25c3542 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { }; EAL_REGISTER_TAILQ(rte_vfio_tailq) +/* Compair two pci address */ +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) +{ + if (addr1->domain == addr2->domain && + addr1->bus == addr2->bus && + addr1->devid == addr2->devid && + addr1->function == addr2->function) + return 0; + return 1; +} + int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); /* Get vfio_res */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) continue; break; } -- 2.13.6 ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20180711030917.181098-1-qi.z.zhang@intel.com>]
* [dpdk-stable] [PATCH v11 02/19] bus/pci: fix PCI address compare [not found] ` <20180711030917.181098-1-qi.z.zhang@intel.com> @ 2018-07-11 3:09 ` Qi Zhang 0 siblings, 0 replies; 9+ messages in thread From: Qi Zhang @ 2018-07-11 3:09 UTC (permalink / raw) To: thomas, anatoly.burakov Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, Qi Zhang, stable When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr is valid. So compare the 8th byte will cause the unexpected result, which happens when repeatedly attach/detach a device. Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index aeeaa9ed8..dd25c3542 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { }; EAL_REGISTER_TAILQ(rte_vfio_tailq) +/* Compair two pci address */ +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) +{ + if (addr1->domain == addr2->domain && + addr1->bus == addr2->bus && + addr1->devid == addr2->devid && + addr1->function == addr2->function) + return 0; + return 1; +} + int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); /* Get vfio_res */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) continue; break; } -- 2.13.6 ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20180711134808.254054-1-qi.z.zhang@intel.com>]
* [dpdk-stable] [PATCH v12 02/19] bus/pci: fix PCI address compare [not found] ` <20180711134808.254054-1-qi.z.zhang@intel.com> @ 2018-07-11 13:47 ` Qi Zhang 0 siblings, 0 replies; 9+ messages in thread From: Qi Zhang @ 2018-07-11 13:47 UTC (permalink / raw) To: thomas, anatoly.burakov Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, Qi Zhang, stable When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr is valid. So compare the 8th byte will cause the unexpected result, which happens when repeatedly attach/detach a device. Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index aeeaa9ed8..dd25c3542 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { }; EAL_REGISTER_TAILQ(rte_vfio_tailq) +/* Compair two pci address */ +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) +{ + if (addr1->domain == addr2->domain && + addr1->bus == addr2->bus && + addr1->devid == addr2->devid && + addr1->function == addr2->function) + return 0; + return 1; +} + int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); /* Get vfio_res */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) continue; break; } -- 2.13.6 ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20180712011514.45006-1-qi.z.zhang@intel.com>]
* [dpdk-stable] [PATCH v13 02/19] bus/pci: fix PCI address compare [not found] ` <20180712011514.45006-1-qi.z.zhang@intel.com> @ 2018-07-12 1:14 ` Qi Zhang 2018-07-12 9:24 ` Burakov, Anatoly 0 siblings, 1 reply; 9+ messages in thread From: Qi Zhang @ 2018-07-12 1:14 UTC (permalink / raw) To: thomas, anatoly.burakov Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, Qi Zhang, stable When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr is valid. So compare the 8th byte will cause the unexpected result, which happens when repeatedly attach/detach a device. Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index aeeaa9ed8..dd25c3542 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { }; EAL_REGISTER_TAILQ(rte_vfio_tailq) +/* Compair two pci address */ +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) +{ + if (addr1->domain == addr2->domain && + addr1->bus == addr2->bus && + addr1->devid == addr2->devid && + addr1->function == addr2->function) + return 0; + return 1; +} + int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); /* Get vfio_res */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) continue; break; } -- 2.13.6 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-stable] [PATCH v13 02/19] bus/pci: fix PCI address compare 2018-07-12 1:14 ` [dpdk-stable] [PATCH v13 " Qi Zhang @ 2018-07-12 9:24 ` Burakov, Anatoly 2018-07-12 9:32 ` [dpdk-stable] [dpdk-dev] " Gaëtan Rivet 2018-07-12 11:53 ` [dpdk-stable] " Zhang, Qi Z 0 siblings, 2 replies; 9+ messages in thread From: Burakov, Anatoly @ 2018-07-12 9:24 UTC (permalink / raw) To: Qi Zhang, thomas Cc: konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, stable On 12-Jul-18 2:14 AM, Qi Zhang wrote: > When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) > is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr > is valid. So compare the 8th byte will cause the unexpected result, which > happens when repeatedly attach/detach a device. > > Fixes: c752998b5e2e ("pci: introduce library and driver") > Cc: stable@dpdk.org > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > --- > drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c > index aeeaa9ed8..dd25c3542 100644 > --- a/drivers/bus/pci/linux/pci_vfio.c > +++ b/drivers/bus/pci/linux/pci_vfio.c > @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { > }; > EAL_REGISTER_TAILQ(rte_vfio_tailq) > > +/* Compair two pci address */ > +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) > +{ > + if (addr1->domain == addr2->domain && > + addr1->bus == addr2->bus && > + addr1->devid == addr2->devid && > + addr1->function == addr2->function) > + return 0; > + return 1; > +} Generally, change looks OK to me, but I think we already have this function in PCI library - rte_pci_addr_cmp(). Is there a specific reason to reimplement it here? > + > int > pci_vfio_read_config(const struct rte_intr_handle *intr_handle, > void *buf, size_t len, off_t offs) > @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) > vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); > /* Get vfio_res */ > TAILQ_FOREACH(vfio_res, vfio_res_list, next) { > - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) > + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) > continue; > break; > } > -- Thanks, Anatoly ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH v13 02/19] bus/pci: fix PCI address compare 2018-07-12 9:24 ` Burakov, Anatoly @ 2018-07-12 9:32 ` Gaëtan Rivet 2018-07-12 11:57 ` Zhang, Qi Z 2018-07-12 11:53 ` [dpdk-stable] " Zhang, Qi Z 1 sibling, 1 reply; 9+ messages in thread From: Gaëtan Rivet @ 2018-07-12 9:32 UTC (permalink / raw) To: Burakov, Anatoly Cc: Qi Zhang, thomas, konstantin.ananyev, dev, bruce.richardson, ferruh.yigit, benjamin.h.shelton, narender.vangati, stable Hi, On Thu, Jul 12, 2018 at 10:24:44AM +0100, Burakov, Anatoly wrote: > On 12-Jul-18 2:14 AM, Qi Zhang wrote: > > When use memcmp to compare two PCI address, sizeof(struct rte_pci_addr) > > is 4 bytes aligned, and it is 8. While only 7 byte of struct rte_pci_addr > > is valid. So compare the 8th byte will cause the unexpected result, which > > happens when repeatedly attach/detach a device. > > > > Fixes: c752998b5e2e ("pci: introduce library and driver") Shouldn't be the original commit be Fixes: 94c0776b1bad ("vfio: support hotplug") instead? > > Cc: stable@dpdk.org > > > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > > --- > > drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c > > index aeeaa9ed8..dd25c3542 100644 > > --- a/drivers/bus/pci/linux/pci_vfio.c > > +++ b/drivers/bus/pci/linux/pci_vfio.c > > @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { > > }; > > EAL_REGISTER_TAILQ(rte_vfio_tailq) > > +/* Compair two pci address */ > > +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct rte_pci_addr *addr2) > > +{ > > + if (addr1->domain == addr2->domain && > > + addr1->bus == addr2->bus && > > + addr1->devid == addr2->devid && > > + addr1->function == addr2->function) > > + return 0; > > + return 1; > > +} > > Generally, change looks OK to me, but I think we already have this function > in PCI library - rte_pci_addr_cmp(). Is there a specific reason to > reimplement it here? > +1 > > + > > int > > pci_vfio_read_config(const struct rte_intr_handle *intr_handle, > > void *buf, size_t len, off_t offs) > > @@ -642,7 +653,7 @@ pci_vfio_unmap_resource(struct rte_pci_device *dev) > > vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); > > /* Get vfio_res */ > > TAILQ_FOREACH(vfio_res, vfio_res_list, next) { > > - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) > > + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) > > continue; > > break; > > } > > > > > -- > Thanks, > Anatoly -- Gaëtan Rivet 6WIND ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH v13 02/19] bus/pci: fix PCI address compare 2018-07-12 9:32 ` [dpdk-stable] [dpdk-dev] " Gaëtan Rivet @ 2018-07-12 11:57 ` Zhang, Qi Z 0 siblings, 0 replies; 9+ messages in thread From: Zhang, Qi Z @ 2018-07-12 11:57 UTC (permalink / raw) To: Gaëtan Rivet, Burakov, Anatoly Cc: thomas, Ananyev, Konstantin, dev, Richardson, Bruce, Yigit, Ferruh, Shelton, Benjamin H, Vangati, Narender, stable > -----Original Message----- > From: Gaëtan Rivet [mailto:gaetan.rivet@6wind.com] > Sent: Thursday, July 12, 2018 5:32 PM > To: Burakov, Anatoly <anatoly.burakov@intel.com> > Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; thomas@monjalon.net; Ananyev, > Konstantin <konstantin.ananyev@intel.com>; dev@dpdk.org; Richardson, > Bruce <bruce.richardson@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; > Shelton, Benjamin H <benjamin.h.shelton@intel.com>; Vangati, Narender > <narender.vangati@intel.com>; stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v13 02/19] bus/pci: fix PCI address compare > > Hi, > > On Thu, Jul 12, 2018 at 10:24:44AM +0100, Burakov, Anatoly wrote: > > On 12-Jul-18 2:14 AM, Qi Zhang wrote: > > > When use memcmp to compare two PCI address, sizeof(struct > > > rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of > > > struct rte_pci_addr is valid. So compare the 8th byte will cause the > > > unexpected result, which happens when repeatedly attach/detach a > device. > > > > > > Fixes: c752998b5e2e ("pci: introduce library and driver") > > Shouldn't be the original commit be > > Fixes: 94c0776b1bad ("vfio: support hotplug") > > instead? You are right, this should be one that introduce the issue, thanks! > > > > Cc: stable@dpdk.org > > > > > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > > > --- > > > drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- > > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/bus/pci/linux/pci_vfio.c > > > b/drivers/bus/pci/linux/pci_vfio.c > > > index aeeaa9ed8..dd25c3542 100644 > > > --- a/drivers/bus/pci/linux/pci_vfio.c > > > +++ b/drivers/bus/pci/linux/pci_vfio.c > > > @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { > > > }; > > > EAL_REGISTER_TAILQ(rte_vfio_tailq) > > > +/* Compair two pci address */ > > > +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct > > > +rte_pci_addr *addr2) { > > > + if (addr1->domain == addr2->domain && > > > + addr1->bus == addr2->bus && > > > + addr1->devid == addr2->devid && > > > + addr1->function == addr2->function) > > > + return 0; > > > + return 1; > > > +} > > > > Generally, change looks OK to me, but I think we already have this > > function in PCI library - rte_pci_addr_cmp(). Is there a specific > > reason to reimplement it here? > > > > +1 > > > > + > > > int > > > pci_vfio_read_config(const struct rte_intr_handle *intr_handle, > > > void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ > > > pci_vfio_unmap_resource(struct rte_pci_device *dev) > > > vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, > mapped_pci_res_list); > > > /* Get vfio_res */ > > > TAILQ_FOREACH(vfio_res, vfio_res_list, next) { > > > - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) > > > + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) > > > continue; > > > break; > > > } > > > > > > > > > -- > > Thanks, > > Anatoly > > -- > Gaëtan Rivet > 6WIND ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-stable] [PATCH v13 02/19] bus/pci: fix PCI address compare 2018-07-12 9:24 ` Burakov, Anatoly 2018-07-12 9:32 ` [dpdk-stable] [dpdk-dev] " Gaëtan Rivet @ 2018-07-12 11:53 ` Zhang, Qi Z 1 sibling, 0 replies; 9+ messages in thread From: Zhang, Qi Z @ 2018-07-12 11:53 UTC (permalink / raw) To: Burakov, Anatoly, thomas Cc: Ananyev, Konstantin, dev, Richardson, Bruce, Yigit, Ferruh, Shelton, Benjamin H, Vangati, Narender, stable > -----Original Message----- > From: Burakov, Anatoly > Sent: Thursday, July 12, 2018 5:25 PM > To: Zhang, Qi Z <qi.z.zhang@intel.com>; thomas@monjalon.net > Cc: Ananyev, Konstantin <konstantin.ananyev@intel.com>; dev@dpdk.org; > Richardson, Bruce <bruce.richardson@intel.com>; Yigit, Ferruh > <ferruh.yigit@intel.com>; Shelton, Benjamin H > <benjamin.h.shelton@intel.com>; Vangati, Narender > <narender.vangati@intel.com>; stable@dpdk.org > Subject: Re: [PATCH v13 02/19] bus/pci: fix PCI address compare > > On 12-Jul-18 2:14 AM, Qi Zhang wrote: > > When use memcmp to compare two PCI address, sizeof(struct > > rte_pci_addr) is 4 bytes aligned, and it is 8. While only 7 byte of > > struct rte_pci_addr is valid. So compare the 8th byte will cause the > > unexpected result, which happens when repeatedly attach/detach a device. > > > > Fixes: c752998b5e2e ("pci: introduce library and driver") > > Cc: stable@dpdk.org > > > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > > --- > > drivers/bus/pci/linux/pci_vfio.c | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/bus/pci/linux/pci_vfio.c > > b/drivers/bus/pci/linux/pci_vfio.c > > index aeeaa9ed8..dd25c3542 100644 > > --- a/drivers/bus/pci/linux/pci_vfio.c > > +++ b/drivers/bus/pci/linux/pci_vfio.c > > @@ -43,6 +43,17 @@ static struct rte_tailq_elem rte_vfio_tailq = { > > }; > > EAL_REGISTER_TAILQ(rte_vfio_tailq) > > > > +/* Compair two pci address */ > > +static int pci_addr_cmp(struct rte_pci_addr *addr1, struct > > +rte_pci_addr *addr2) { > > + if (addr1->domain == addr2->domain && > > + addr1->bus == addr2->bus && > > + addr1->devid == addr2->devid && > > + addr1->function == addr2->function) > > + return 0; > > + return 1; > > +} > > Generally, change looks OK to me, but I think we already have this function in > PCI library - rte_pci_addr_cmp(). Is there a specific reason to reimplement it > here? NO, and rte_pci_addr_cmp is what I want :), thanks! > > > + > > int > > pci_vfio_read_config(const struct rte_intr_handle *intr_handle, > > void *buf, size_t len, off_t offs) @@ -642,7 +653,7 @@ > > pci_vfio_unmap_resource(struct rte_pci_device *dev) > > vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, > mapped_pci_res_list); > > /* Get vfio_res */ > > TAILQ_FOREACH(vfio_res, vfio_res_list, next) { > > - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) > > + if (pci_addr_cmp(&vfio_res->pci_addr, &dev->addr)) > > continue; > > break; > > } > > > > > -- > Thanks, > Anatoly ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-07-12 11:58 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20180607123849.14439-1-qi.z.zhang@intel.com> [not found] ` <20180706141826.204044-1-qi.z.zhang@intel.com> 2018-07-06 14:18 ` [dpdk-stable] [PATCH v9 02/19] bus/pci: fix PCI address compare Qi Zhang [not found] ` <20180709033706.27858-1-qi.z.zhang@intel.com> 2018-07-09 3:36 ` [dpdk-stable] [PATCH v10 " Qi Zhang [not found] ` <20180711030917.181098-1-qi.z.zhang@intel.com> 2018-07-11 3:09 ` [dpdk-stable] [PATCH v11 " Qi Zhang [not found] ` <20180711134808.254054-1-qi.z.zhang@intel.com> 2018-07-11 13:47 ` [dpdk-stable] [PATCH v12 " Qi Zhang [not found] ` <20180712011514.45006-1-qi.z.zhang@intel.com> 2018-07-12 1:14 ` [dpdk-stable] [PATCH v13 " Qi Zhang 2018-07-12 9:24 ` Burakov, Anatoly 2018-07-12 9:32 ` [dpdk-stable] [dpdk-dev] " Gaëtan Rivet 2018-07-12 11:57 ` Zhang, Qi Z 2018-07-12 11:53 ` [dpdk-stable] " Zhang, Qi Z
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).