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()
343 struct nsim_dev_hwstats *hwstats = file->private_data; in nsim_dev_hwstats_do_write() local
355 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, hwsfops->type); in nsim_dev_hwstats_do_write()
361 err = nsim_dev_hwstats_disable_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
366 err = nsim_dev_hwstats_enable_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
371 err = nsim_dev_hwstats_fail_ifindex(hwstats, ifindex, in nsim_dev_hwstats_do_write()
409 struct nsim_dev_hwstats *hwstats = &nsim_dev->hwstats; in nsim_dev_hwstats_init() local
413 mutex_init(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_init()
414 INIT_LIST_HEAD(&hwstats->l3_list); in nsim_dev_hwstats_init()
416 hwstats->netdevice_nb.notifier_call = nsim_dev_netdevice_event; in nsim_dev_hwstats_init()
417 err = register_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_init()
421 hwstats->ddir = debugfs_create_dir("hwstats", nsim_dev->ddir); in nsim_dev_hwstats_init()
422 if (IS_ERR(hwstats->ddir)) { in nsim_dev_hwstats_init()
423 err = PTR_ERR(hwstats->ddir); in nsim_dev_hwstats_init()
427 hwstats->l3_ddir = debugfs_create_dir("l3", hwstats->ddir); in nsim_dev_hwstats_init()
428 if (IS_ERR(hwstats->l3_ddir)) { in nsim_dev_hwstats_init()
429 err = PTR_ERR(hwstats->l3_ddir); in nsim_dev_hwstats_init()
433 debugfs_create_file_aux("enable_ifindex", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
435 debugfs_create_file_aux("disable_ifindex", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
437 debugfs_create_file_aux("fail_next_enable", 0200, hwstats->l3_ddir, hwstats, in nsim_dev_hwstats_init()
440 INIT_DELAYED_WORK(&hwstats->traffic_dw, in nsim_dev_hwstats_init()
442 schedule_delayed_work(&hwstats->traffic_dw, in nsim_dev_hwstats_init()
447 debugfs_remove_recursive(hwstats->ddir); in nsim_dev_hwstats_init()
449 unregister_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_init()
451 mutex_destroy(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_init()
455 static void nsim_dev_hwsdev_list_wipe(struct nsim_dev_hwstats *hwstats, in nsim_dev_hwsdev_list_wipe() argument
461 hwsdev_list = nsim_dev_hwstats_get_list_head(hwstats, type); in nsim_dev_hwsdev_list_wipe()
465 mutex_lock(&hwstats->hwsdev_list_lock); in nsim_dev_hwsdev_list_wipe()
470 mutex_unlock(&hwstats->hwsdev_list_lock); in nsim_dev_hwsdev_list_wipe()
475 struct nsim_dev_hwstats *hwstats = &nsim_dev->hwstats; in nsim_dev_hwstats_exit() local
478 cancel_delayed_work_sync(&hwstats->traffic_dw); in nsim_dev_hwstats_exit()
479 debugfs_remove_recursive(hwstats->ddir); in nsim_dev_hwstats_exit()
480 unregister_netdevice_notifier_net(net, &hwstats->netdevice_nb); in nsim_dev_hwstats_exit()
481 nsim_dev_hwsdev_list_wipe(hwstats, NETDEV_OFFLOAD_XSTATS_TYPE_L3); in nsim_dev_hwstats_exit()
482 mutex_destroy(&hwstats->hwsdev_list_lock); in nsim_dev_hwstats_exit()