> +static void hinic3_del_one_adev(struct hinic3_hwdev *hwdev, > + enum hinic3_service_type svc_type) > +{ > + struct hinic3_pcidev *pci_adapter = hwdev->adapter; > + struct hinic3_adev *hadev; > + bool timeout = true; > + unsigned long end; > + > + end = jiffies + msecs_to_jiffies(HINIC3_EVENT_PROCESS_TIMEOUT); > + do { > + if (!test_and_set_bit(svc_type, &pci_adapter->state)) { > + timeout = false; > + break; > + } > + usleep_range(900, 1000); > + } while (time_before(jiffies, end)); > + > + if (timeout && !test_and_set_bit(svc_type, &pci_adapter->state)) > + timeout = false; Please look at using iopoll.h > +static int hinic3_sw_init(struct net_device *netdev) > +{ > + struct hinic3_nic_dev *nic_dev = netdev_priv(netdev); > + struct hinic3_hwdev *hwdev = nic_dev->hwdev; > + int err; > + > + nic_dev->q_params.sq_depth = HINIC3_SQ_DEPTH; > + nic_dev->q_params.rq_depth = HINIC3_RQ_DEPTH; > + > + hinic3_try_to_enable_rss(netdev); > + > + eth_hw_addr_random(netdev); Is using a random MAC just a temporary thing until more code is added to access an OTP? > + err = register_netdev(netdev); > + if (err) { > + err = -ENOMEM; > + goto err_netdev; > + } > + > + netif_carrier_off(netdev); > + > + dev_set_drvdata(&adev->dev, nic_dev); Is this used anywhere in the driver? Calling register_netdev() makes the interface live, even before it returns. If you have NFS root for example, it could be sending packets, etc, before drvdata is set. > +int hinic3_set_port_mtu(struct net_device *netdev, u16 new_mtu) > +{ > + struct hinic3_nic_dev *nic_dev = netdev_priv(netdev); > + struct hinic3_func_tbl_cfg func_tbl_cfg = {}; > + struct hinic3_hwdev *hwdev = nic_dev->hwdev; > + > + if (new_mtu < HINIC3_MIN_MTU_SIZE) { > + dev_err(hwdev->dev, > + "Invalid mtu size: %ubytes, mtu size < %ubytes\n", > + new_mtu, HINIC3_MIN_MTU_SIZE); > + return -EINVAL; > + } > + > + if (new_mtu > HINIC3_MAX_JUMBO_FRAME_SIZE) { > + dev_err(hwdev->dev, "Invalid mtu size: %ubytes, mtu size > %ubytes\n", > + new_mtu, HINIC3_MAX_JUMBO_FRAME_SIZE); > + return -EINVAL; > + } The core can do this validation for you, if you set ndev->max_mtu, ndev->min_mtu. Andrew --- pw-bot: cr