Lines Matching refs:hwstats
10 nsim_dev_hwstats_get_list_head(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_get_list_head() argument
15 return &hwstats->l3_list; in nsim_dev_hwstats_get_list_head()
22 static void nsim_dev_hwstats_traffic_bump(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_traffic_bump() argument
28 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, type); in nsim_dev_hwstats_traffic_bump()
44 struct nsim_dev_hwstats *hwstats; in nsim_dev_hwstats_traffic_work() local
46 hwstats = container_of(work, struct nsim_dev_hwstats, traffic_dw.work); in nsim_dev_hwstats_traffic_work()
47 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_traffic_work()
48 nsim_dev_hwstats_traffic_bump(hwstats, NETDEV_OFFLOAD_XSTATS_TYPE_L3); in nsim_dev_hwstats_traffic_work()
49 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_traffic_work()
51 schedule_delayed_work(&hwstats->traffic_dw, in nsim_dev_hwstats_traffic_work()
105 static int nsim_dev_hwstats_event_off_xstats(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_event_off_xstats() argument
115 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, info->type); in nsim_dev_hwstats_event_off_xstats()
119 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_event_off_xstats()
141 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_event_off_xstats()
152 __nsim_dev_hwstats_event_unregister(struct nsim_dev_hwstats *hwstats, in __nsim_dev_hwstats_event_unregister() argument
159 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, type); in __nsim_dev_hwstats_event_unregister()
171 static void nsim_dev_hwstats_event_unregister(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_event_unregister() argument
174 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_event_unregister()
175 __nsim_dev_hwstats_event_unregister(hwstats, dev, in nsim_dev_hwstats_event_unregister()
177 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_event_unregister()
180 static int nsim_dev_hwstats_event(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_event() argument
189 return nsim_dev_hwstats_event_off_xstats(hwstats, dev, in nsim_dev_hwstats_event()
192 nsim_dev_hwstats_event_unregister(hwstats, dev); in nsim_dev_hwstats_event()
203 struct nsim_dev_hwstats *hwstats; in nsim_dev_netdevice_event() local
206 hwstats = container_of(nb, struct nsim_dev_hwstats, netdevice_nb); in nsim_dev_netdevice_event()
207 err = nsim_dev_hwstats_event(hwstats, dev, event, ptr); in nsim_dev_netdevice_event()
215 nsim_dev_hwstats_enable_ifindex(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_enable_ifindex() argument
227 nsim_dev = container_of(hwstats, struct nsim_dev, hwstats); in nsim_dev_hwstats_enable_ifindex()
231 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_enable_ifindex()
250 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_enable_ifindex()
265 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_enable_ifindex()
271 nsim_dev_hwstats_disable_ifindex(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_disable_ifindex() argument
280 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_disable_ifindex()
284 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_disable_ifindex()
304 nsim_dev_hwstats_fail_ifindex(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwstats_fail_ifindex() argument
312 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_fail_ifindex()
323 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_fail_ifindex()
344 struct nsim_dev_hwstats *hwstats = file->private_data; in nsim_dev_hwstats_do_write() local
357 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, hwsfops->type); in nsim_dev_hwstats_do_write()
363 err = nsim_dev_hwstats_disable_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
368 err = nsim_dev_hwstats_enable_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
373 err = nsim_dev_hwstats_fail_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
412 struct nsim_dev_hwstats *hwstats = &nsim_dev->hwstats; in nsim_dev_hwstats_init() local
416 mutex_init(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_init()
417 INIT_LIST_HEAD(&hwstats->l3_list); in nsim_dev_hwstats_init()
419 hwstats->netdevice_nb.notifier_call = nsim_dev_netdevice_event; in nsim_dev_hwstats_init()
420 err = register_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_init()
424 hwstats->ddir = debugfs_create_dir("hwstats", nsim_dev->ddir); in nsim_dev_hwstats_init()
425 if (IS_ERR(hwstats->ddir)) { in nsim_dev_hwstats_init()
426 err = PTR_ERR(hwstats->ddir); in nsim_dev_hwstats_init()
430 hwstats->l3_ddir = debugfs_create_dir("l3", hwstats->ddir); in nsim_dev_hwstats_init()
431 if (IS_ERR(hwstats->l3_ddir)) { in nsim_dev_hwstats_init()
432 err = PTR_ERR(hwstats->l3_ddir); in nsim_dev_hwstats_init()
436 debugfs_create_file("enable_ifindex", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
438 debugfs_create_file("disable_ifindex", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
440 debugfs_create_file("fail_next_enable", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
443 INIT_DELAYED_WORK(&hwstats->traffic_dw, in nsim_dev_hwstats_init()
445 schedule_delayed_work(&hwstats->traffic_dw, in nsim_dev_hwstats_init()
450 debugfs_remove_recursive(hwstats->ddir); in nsim_dev_hwstats_init()
452 unregister_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_init()
454 mutex_destroy(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_init()
458 static void nsim_dev_hwsdev_list_wipe(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwsdev_list_wipe() argument
464 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, type); in nsim_dev_hwsdev_list_wipe()
468 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwsdev_list_wipe()
473 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwsdev_list_wipe()
478 struct nsim_dev_hwstats *hwstats = &nsim_dev->hwstats; in nsim_dev_hwstats_exit() local
481 cancel_delayed_work_sync(&hwstats->traffic_dw); in nsim_dev_hwstats_exit()
482 debugfs_remove_recursive(hwstats->ddir); in nsim_dev_hwstats_exit()
483 unregister_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_exit()
484 nsim_dev_hwsdev_list_wipe(hwstats, NETDEV_OFFLOAD_XSTATS_TYPE_L3); in nsim_dev_hwstats_exit()
485 mutex_destroy(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_exit()