Orin usb net remove error

我们在使用Orin定制板时,我们的usb接口插入一个带网卡的usb-hub,当我们热插拔时,偶现unregister_netdevice: waiting for enx7 to become free. Usage count = 244,导致usb整个不再工作,usb-hub网卡型号为AX88179 Gigabit Ethernet

Which JetPack SW?

Jetpack 5.1.1

5.1.2 有解掉一個類似的問題. 可以先用新版試試看

[How to remove r8169 linux kernel module]
5.1.2是打的这个patch吗?
diff --git a/drivers/platform/tegra/ptp-notifier.c b/drivers/platform/tegra/ptp-notifier.c
index 9da644b13…edfebe9e1 100644
— a/drivers/platform/tegra/ptp-notifier.c
+++ b/drivers/platform/tegra/ptp-notifier.c
@@ -107,19 +107,31 @@ int tegra_get_hwtime(const char *intf_name, void *ts, int ts_type)
raw_spin_unlock_irqrestore(&ptp_notifier_lock, flags);
return -1;
}
+

  •   /* dev_get_by_name increments the dev reference and requires dev_put */
    
  •   dev = dev_get_by_name(&init_net, intf_name);
    
  •   if (!dev || !(dev->flags & IFF_UP)) {
    
  •           pr_debug("dev is NULL or intf is not up for %s\n", intf_name);
    
  •   if (!dev) {
    
  •           pr_debug("No device found for %s\n", intf_name);
    
  •           raw_spin_unlock_irqrestore(&ptp_notifier_lock, flags);
    
  •           return -EINVAL;
    
  •   }
    
  •   if (!(dev->flags & IFF_UP)) {
    
  •           pr_debug("interface is not up for %s\n", intf_name);
    
  •           dev_put(dev);
              raw_spin_unlock_irqrestore(&ptp_notifier_lock, flags);
              return -EINVAL;
      }
    
  •   for (index = 0; index < MAX_MAC_INSTANCES; index++) {
              if (dev == registered_ndev[index])
                      break;
      }
      if (index == MAX_MAC_INSTANCES) {
              pr_debug("Interface: %s is not registered to get HW time", intf_name);
    
  •           dev_put(dev);
              raw_spin_unlock_irqrestore(&ptp_notifier_lock, flags);
              return -EINVAL;
      }
    

@@ -128,6 +140,8 @@ int tegra_get_hwtime(const char *intf_name, void *ts, int ts_type)
ret = (get_systime[index])(dev, ts, ts_type);
else
ret = -EINVAL;
+

  •   dev_put(dev);
      raw_spin_unlock_irqrestore(&ptp_notifier_lock, flags);
    
      return ret;
    

你可以先把format整理好一下…

就是这个链接How to remove r8169 linux kernel module

是的就是那個patch.

那我试试直接在5.1.1上面修改这个patch试试,看下不支持ptp的usb网卡是否也会调用这个ptp的硬件时间获取函数

1701856763668
我在tegra_get_hwtime函数里增加了打印,测试表明usb网卡插拔时,并没有usb的网口进入这个函数,所以这个patch并未解决这个问题,可能是某一个地方注销驱动时未及时执行dev_put()释放引用计数,但是我不知道是哪里,希望可以排查一下

那這個多半是vendor driver的問題, 我們這邊沒有辦法幫你

可以先找網卡vendor反映一下這個問題.

unregister_netdevice waiting for xxx to become free. Usage count :xxxx

是常見的ref count沒清空就想直接unregister的情況.

这个问题只存在带网卡的usb-hub上,我们试过不同品牌的usb_hub,都有这个问题,但是在单独usb网卡没有发现这个问题,不太可能所有的vendor driver都有问题,我们怀疑是orin 的hub代码有问题

你所謂的"带网卡的usb-hub" 說實話它用哪個driver我們也不知道.
基本上upstream的kernel用哪一份我們就直接繼續用.

如果這是一個upstream linux kernel的問題的話那linux community可能有人有提供patch.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.