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
> 

Reply via email to