Hi Andy, > -----Original Message----- > From: Pei, Andy > Sent: Monday, January 14, 2019 9:41 > To: dev@dpdk.org > Cc: Xu, Rosen <rosen...@intel.com>; Zhang, Tianfei > <tianfei.zh...@intel.com>; Pei, Andy <andy....@intel.com> > Subject: [DPDK] /driver/bus/ifpga: fix driver probe failure handler > The subject should be started with bus/ifpga. I think the tital should be fix ifpga afu driver probe failure handler
> In the original code, when a device probe a driver, if the driver in the > driver In the original code, when a AFU device is scanned, if its driver in the driver > list does not support this device, a error is returned. an error will return > After this patch, a device wil try to match driver in the driver list one by > one With this patch, a device will...... > until an appropriate driver is found. If the current driver does not support > the device or some error happens, just try the next driver in the list. > If all the drivers in the list are tried and no driver matches. 0 is returned. > > fixes: 05fa3d4a6539 Pls use git fixline 05fa3d4a6539 to generate the full fixline > cc: rosen...@intel.com > cc: tianfei.zh...@intel.com > cc: andy....@intel.com Don't need these cc, pls only Cc: sta...@dpdk.org > Signed-off-by: AndyPei <andy....@intel.com> > --- > drivers/bus/ifpga/ifpga_bus.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c > index e4b7b6f..55d3abf 100644 > --- a/drivers/bus/ifpga/ifpga_bus.c > +++ b/drivers/bus/ifpga/ifpga_bus.c > @@ -306,12 +306,19 @@ void rte_ifpga_driver_unregister(struct > rte_afu_driver *driver) > } > > TAILQ_FOREACH(drv, &ifpga_afu_drv_list, next) { > - if (ifpga_probe_one_driver(drv, afu_dev)) { > - ret = -1; > - break; > - } > + ret = ifpga_probe_one_driver(drv, afu_dev); > + if (ret < 0) > + /* negative value is an error */ > + return ret; > + if (ret > 0) > + /* positive value means driver doesn't support it */ > + continue; > + return 0; > } > - return ret; > + if ((ret > 0) && (afu_dev->driver == NULL)) > + return 0; > + else > + return ret; > } > > /* > -- > 1.8.3.1