Hi Nicolas, On 10/6/20 6:14 PM, Chautru, Nicolas wrote: > Thanks Maxime > I am not totally sure that this actually got broken in the very commit you > point to (I think that there was another pci generic commit which changed the > assumption when this pointer was set), but it doesn't harm to change anyway > for stable build. > Note this is already like this in the new PMD acc100.
For fpga_5gnr_fec, we reproduced the issue with v20.05, which was the version the driver was introduced. For fpga_lte_fec, it seems to be the same. The driver was in introduced in v19.08, and dev->device.driver was also assigned after driver's probe callback is called: http://code.dpdk.org/dpdk/v19.08/source/drivers/bus/pci/pci_common.c#L212 Thanks, Maxime > Acked-By: Nicolas Chautru <nicolas.chau...@intel.com> > >> -----Original Message----- >> From: Maxime Coquelin <maxime.coque...@redhat.com> >> Sent: Tuesday, October 6, 2020 3:04 AM >> To: dev@dpdk.org; sta...@dpdk.org; Chautru, Nicolas >> <nicolas.chau...@intel.com>; t...@redhat.com >> Cc: Maxime Coquelin <maxime.coque...@redhat.com> >> Subject: [PATCH 1/2] baseband/fpga_5gnr_fec: fix segfaults with debug >> >> When RTE_LIBRTE_BBDEV_DEBUG is enabled, rte_device's driver pointer is >> dereferenced twice in fpga_5gnr_fec's probe callback. >> It causes a segmentation fault because this pointer is only assigned after >> probe >> callback call. >> >> This patch makes use of rte_pci_driver pointer instead. >> >> Fixes: 0b5927cbcba7 ("baseband/fpga_5gnr_fec: add PMD for FPGA 5GNR >> FEC") >> >> Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> >> --- >> drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c >> b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c >> index 61f9c04ba2..11ee4d3e10 100644 >> --- a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c >> +++ b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c >> @@ -1839,7 +1839,7 @@ fpga_5gnr_fec_init(struct rte_bbdev *dev, struct >> rte_pci_driver *drv) >> >> rte_bbdev_log_debug( >> "Init device %s [%s] @ virtaddr %p phyaddr %#"PRIx64, >> - dev->device->driver->name, dev->data->name, >> + drv->driver.name, dev->data->name, >> (void *)pci_dev->mem_resource[0].addr, >> pci_dev->mem_resource[0].phys_addr); >> } >> @@ -1895,7 +1895,7 @@ fpga_5gnr_fec_probe(struct rte_pci_driver *pci_drv, >> ((uint16_t)(version_id >> 16)), ((uint16_t)version_id)); >> >> #ifdef RTE_LIBRTE_BBDEV_DEBUG >> - if (!strcmp(bbdev->device->driver->name, >> + if (!strcmp(pci_drv->driver.name, > > Why do you have to change this one? > > Acked-by: Nicolas Chautru <nicolas.chau...@intel.com> > >> RTE_STR(FPGA_5GNR_FEC_PF_DRIVER_NAME))) >> print_static_reg_debug_info(d->mmio_base); >> #endif >> -- >> 2.26.2 >