Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: pass info struct via netdevice notifier

So far, only net_device * could be passed along with netdevice notifier
event. This patch provides a possibility to pass custom structure
able to provide info that event listener needs to know.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>

v2->v3: fix typo on simeth
shortened dev_getter
shortened notifier_info struct name
v1->v2: fix notifier_call parameter in call_netdevice_notifier()
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jiri Pirko and committed by
David S. Miller
351638e7 b1098bbe

+172 -127
+1 -1
arch/ia64/hp/sim/simeth.c
··· 268 268 static int 269 269 simeth_device_event(struct notifier_block *this,unsigned long event, void *ptr) 270 270 { 271 - struct net_device *dev = ptr; 271 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 272 272 struct simeth_local *local; 273 273 struct in_device *in_dev; 274 274 struct in_ifaddr **ifap = NULL;
+2 -1
arch/mips/txx9/generic/setup_tx4939.c
··· 331 331 unsigned long event, 332 332 void *ptr) 333 333 { 334 - struct net_device *dev = ptr; 334 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 335 + 335 336 if (event == NETDEV_CHANGE && netif_carrier_ok(dev)) { 336 337 __u64 bit = 0; 337 338 if (dev->irq == TXX9_IRQ_BASE + TX4939_IR_ETH(0))
+2 -2
drivers/infiniband/core/cma.c
··· 3269 3269 } 3270 3270 3271 3271 static int cma_netdev_callback(struct notifier_block *self, unsigned long event, 3272 - void *ctx) 3272 + void *ptr) 3273 3273 { 3274 - struct net_device *ndev = (struct net_device *)ctx; 3274 + struct net_device *ndev = netdev_notifier_info_to_dev(ptr); 3275 3275 struct cma_device *cma_dev; 3276 3276 struct rdma_id_private *id_priv; 3277 3277 int ret = NOTIFY_DONE;
+1 -1
drivers/infiniband/hw/mlx4/main.c
··· 1161 1161 static int mlx4_ib_netdev_event(struct notifier_block *this, unsigned long event, 1162 1162 void *ptr) 1163 1163 { 1164 - struct net_device *dev = ptr; 1164 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1165 1165 struct mlx4_ib_dev *ibdev; 1166 1166 struct net_device *oldnd; 1167 1167 struct mlx4_ib_iboe *iboe;
+1 -1
drivers/net/bonding/bond_main.c
··· 3277 3277 static int bond_netdev_event(struct notifier_block *this, 3278 3278 unsigned long event, void *ptr) 3279 3279 { 3280 - struct net_device *event_dev = (struct net_device *)ptr; 3280 + struct net_device *event_dev = netdev_notifier_info_to_dev(ptr); 3281 3281 3282 3282 pr_debug("event_dev: %s, event: %lx\n", 3283 3283 event_dev ? event_dev->name : "None",
+2 -2
drivers/net/can/led.c
··· 88 88 89 89 /* NETDEV rename notifier to rename the associated led triggers too */ 90 90 static int can_led_notifier(struct notifier_block *nb, unsigned long msg, 91 - void *data) 91 + void *ptr) 92 92 { 93 - struct net_device *netdev = data; 93 + struct net_device *netdev = netdev_notifier_info_to_dev(ptr); 94 94 struct can_priv *priv = safe_candev_priv(netdev); 95 95 char name[CAN_LED_NAME_SZ]; 96 96
+1 -1
drivers/net/ethernet/broadcom/cnic.c
··· 5622 5622 static int cnic_netdev_event(struct notifier_block *this, unsigned long event, 5623 5623 void *ptr) 5624 5624 { 5625 - struct net_device *netdev = ptr; 5625 + struct net_device *netdev = netdev_notifier_info_to_dev(ptr); 5626 5626 struct cnic_dev *dev; 5627 5627 int new_dev = 0; 5628 5628
+1 -1
drivers/net/ethernet/marvell/skge.c
··· 3706 3706 static int skge_device_event(struct notifier_block *unused, 3707 3707 unsigned long event, void *ptr) 3708 3708 { 3709 - struct net_device *dev = ptr; 3709 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3710 3710 struct skge_port *skge; 3711 3711 struct dentry *d; 3712 3712
+1 -1
drivers/net/ethernet/marvell/sky2.c
··· 4642 4642 static int sky2_device_event(struct notifier_block *unused, 4643 4643 unsigned long event, void *ptr) 4644 4644 { 4645 - struct net_device *dev = ptr; 4645 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 4646 4646 struct sky2_port *sky2 = netdev_priv(dev); 4647 4647 4648 4648 if (dev->netdev_ops->ndo_open != sky2_open || !sky2_debug)
+1 -1
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
··· 3311 3311 unsigned long event, void *ptr) 3312 3312 { 3313 3313 struct netxen_adapter *adapter; 3314 - struct net_device *dev = (struct net_device *)ptr; 3314 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3315 3315 struct net_device *orig_dev = dev; 3316 3316 struct net_device *slave; 3317 3317
+1 -1
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
··· 3530 3530 unsigned long event, void *ptr) 3531 3531 { 3532 3532 struct qlcnic_adapter *adapter; 3533 - struct net_device *dev = (struct net_device *)ptr; 3533 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3534 3534 3535 3535 recheck: 3536 3536 if (dev == NULL)
+1 -1
drivers/net/ethernet/sfc/efx.c
··· 2120 2120 static int efx_netdev_event(struct notifier_block *this, 2121 2121 unsigned long event, void *ptr) 2122 2122 { 2123 - struct net_device *net_dev = ptr; 2123 + struct net_device *net_dev = netdev_notifier_info_to_dev(ptr); 2124 2124 2125 2125 if (net_dev->netdev_ops == &efx_netdev_ops && 2126 2126 event == NETDEV_CHANGENAME)
+4 -3
drivers/net/hamradio/bpqether.c
··· 103 103 }; 104 104 105 105 static struct notifier_block bpq_dev_notifier = { 106 - .notifier_call =bpq_device_event, 106 + .notifier_call = bpq_device_event, 107 107 }; 108 108 109 109 ··· 544 544 /* 545 545 * Handle device status changes. 546 546 */ 547 - static int bpq_device_event(struct notifier_block *this,unsigned long event, void *ptr) 547 + static int bpq_device_event(struct notifier_block *this, 548 + unsigned long event, void *ptr) 548 549 { 549 - struct net_device *dev = (struct net_device *)ptr; 550 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 550 551 551 552 if (!net_eq(dev_net(dev), &init_net)) 552 553 return NOTIFY_DONE;
+1 -1
drivers/net/macvlan.c
··· 921 921 static int macvlan_device_event(struct notifier_block *unused, 922 922 unsigned long event, void *ptr) 923 923 { 924 - struct net_device *dev = ptr; 924 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 925 925 struct macvlan_dev *vlan, *next; 926 926 struct macvlan_port *port; 927 927 LIST_HEAD(list_kill);
+1 -1
drivers/net/macvtap.c
··· 1053 1053 static int macvtap_device_event(struct notifier_block *unused, 1054 1054 unsigned long event, void *ptr) 1055 1055 { 1056 - struct net_device *dev = ptr; 1056 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1057 1057 struct macvlan_dev *vlan; 1058 1058 struct device *classdev; 1059 1059 dev_t devt;
+2 -3
drivers/net/netconsole.c
··· 653 653 654 654 /* Handle network interface device notifications */ 655 655 static int netconsole_netdev_event(struct notifier_block *this, 656 - unsigned long event, 657 - void *ptr) 656 + unsigned long event, void *ptr) 658 657 { 659 658 unsigned long flags; 660 659 struct netconsole_target *nt; 661 - struct net_device *dev = ptr; 660 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 662 661 bool stopped = false; 663 662 664 663 if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER ||
+1 -1
drivers/net/ppp/pppoe.c
··· 338 338 static int pppoe_device_event(struct notifier_block *this, 339 339 unsigned long event, void *ptr) 340 340 { 341 - struct net_device *dev = (struct net_device *)ptr; 341 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 342 342 343 343 /* Only look at sockets that are using this specific device. */ 344 344 switch (event) {
+1 -1
drivers/net/team/team.c
··· 2647 2647 static int team_device_event(struct notifier_block *unused, 2648 2648 unsigned long event, void *ptr) 2649 2649 { 2650 - struct net_device *dev = (struct net_device *) ptr; 2650 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2651 2651 struct team_port *port; 2652 2652 2653 2653 port = team_port_get_rtnl(dev);
+1 -1
drivers/net/wan/dlci.c
··· 477 477 static int dlci_dev_event(struct notifier_block *unused, 478 478 unsigned long event, void *ptr) 479 479 { 480 - struct net_device *dev = (struct net_device *) ptr; 480 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 481 481 482 482 if (dev_net(dev) != &init_net) 483 483 return NOTIFY_DONE;
+1 -1
drivers/net/wan/hdlc.c
··· 99 99 static int hdlc_device_event(struct notifier_block *this, unsigned long event, 100 100 void *ptr) 101 101 { 102 - struct net_device *dev = ptr; 102 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 103 103 hdlc_device *hdlc; 104 104 unsigned long flags; 105 105 int on;
+1 -1
drivers/net/wan/lapbether.c
··· 370 370 unsigned long event, void *ptr) 371 371 { 372 372 struct lapbethdev *lapbeth; 373 - struct net_device *dev = ptr; 373 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 374 374 375 375 if (dev_net(dev) != &init_net) 376 376 return NOTIFY_DONE;
+1 -1
drivers/scsi/fcoe/fcoe.c
··· 1975 1975 { 1976 1976 struct fcoe_ctlr_device *cdev; 1977 1977 struct fc_lport *lport = NULL; 1978 - struct net_device *netdev = ptr; 1978 + struct net_device *netdev = netdev_notifier_info_to_dev(ptr); 1979 1979 struct fcoe_ctlr *ctlr; 1980 1980 struct fcoe_interface *fcoe; 1981 1981 struct fcoe_port *port;
+1 -1
drivers/scsi/fcoe/fcoe_transport.c
··· 704 704 static int libfcoe_device_notification(struct notifier_block *notifier, 705 705 ulong event, void *ptr) 706 706 { 707 - struct net_device *netdev = ptr; 707 + struct net_device *netdev = netdev_notifier_info_to_dev(ptr); 708 708 709 709 switch (event) { 710 710 case NETDEV_UNREGISTER:
+1 -1
drivers/staging/csr/netdev.c
··· 2891 2891 */ 2892 2892 static int 2893 2893 uf_netdev_event(struct notifier_block *notif, unsigned long event, void* ptr) { 2894 - struct net_device *netdev = ptr; 2894 + struct net_device *netdev = netdev_notifier_info_to_dev(ptr); 2895 2895 netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(netdev); 2896 2896 unifi_priv_t *priv = NULL; 2897 2897 static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
+1 -1
drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c
··· 164 164 static int ft1000NotifyProc(struct notifier_block *this, unsigned long event, 165 165 void *ptr) 166 166 { 167 - struct net_device *dev = ptr; 167 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 168 168 struct ft1000_info *info; 169 169 170 170 info = netdev_priv(dev);
+1 -1
drivers/staging/ft1000/ft1000-usb/ft1000_proc.c
··· 166 166 static int 167 167 ft1000NotifyProc(struct notifier_block *this, unsigned long event, void *ptr) 168 168 { 169 - struct net_device *dev = ptr; 169 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 170 170 struct ft1000_info *info; 171 171 struct proc_dir_entry *ft1000_proc_file; 172 172
+1 -1
drivers/staging/silicom/bpctl_mod.c
··· 133 133 static int bp_device_event(struct notifier_block *unused, 134 134 unsigned long event, void *ptr) 135 135 { 136 - struct net_device *dev = ptr; 136 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 137 137 static bpctl_dev_t *pbpctl_dev = NULL, *pbpctl_dev_m = NULL; 138 138 int dev_num = 0, ret = 0, ret_d = 0, time_left = 0; 139 139 /* printk("BP_PROC_SUPPORT event =%d %s %d\n", event,dev->name, dev->ifindex ); */
+13
include/linux/netdevice.h
··· 1599 1599 1600 1600 extern int register_netdevice_notifier(struct notifier_block *nb); 1601 1601 extern int unregister_netdevice_notifier(struct notifier_block *nb); 1602 + 1603 + struct netdev_notifier_info { 1604 + struct net_device *dev; 1605 + }; 1606 + 1607 + static inline struct net_device * 1608 + netdev_notifier_info_to_dev(const struct netdev_notifier_info *info) 1609 + { 1610 + return info->dev; 1611 + } 1612 + 1613 + extern int call_netdevice_notifiers_info(unsigned long val, struct net_device *dev, 1614 + struct netdev_notifier_info *info); 1602 1615 extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); 1603 1616 1604 1617
+1 -1
net/8021q/vlan.c
··· 341 341 static int vlan_device_event(struct notifier_block *unused, unsigned long event, 342 342 void *ptr) 343 343 { 344 - struct net_device *dev = ptr; 344 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 345 345 struct vlan_group *grp; 346 346 struct vlan_info *vlan_info; 347 347 int i, flgs;
+1 -1
net/appletalk/aarp.c
··· 332 332 static int aarp_device_event(struct notifier_block *this, unsigned long event, 333 333 void *ptr) 334 334 { 335 - struct net_device *dev = ptr; 335 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 336 336 int ct; 337 337 338 338 if (!net_eq(dev_net(dev), &init_net))
+1 -1
net/appletalk/ddp.c
··· 644 644 static int ddp_device_event(struct notifier_block *this, unsigned long event, 645 645 void *ptr) 646 646 { 647 - struct net_device *dev = ptr; 647 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 648 648 649 649 if (!net_eq(dev_net(dev), &init_net)) 650 650 return NOTIFY_DONE;
+2 -2
net/atm/clip.c
··· 539 539 } 540 540 541 541 static int clip_device_event(struct notifier_block *this, unsigned long event, 542 - void *arg) 542 + void *ptr) 543 543 { 544 - struct net_device *dev = arg; 544 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 545 545 546 546 if (!net_eq(dev_net(dev), &init_net)) 547 547 return NOTIFY_DONE;
+2 -4
net/atm/mpc.c
··· 998 998 } 999 999 1000 1000 static int mpoa_event_listener(struct notifier_block *mpoa_notifier, 1001 - unsigned long event, void *dev_ptr) 1001 + unsigned long event, void *ptr) 1002 1002 { 1003 - struct net_device *dev; 1003 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1004 1004 struct mpoa_client *mpc; 1005 1005 struct lec_priv *priv; 1006 - 1007 - dev = dev_ptr; 1008 1006 1009 1007 if (!net_eq(dev_net(dev), &init_net)) 1010 1008 return NOTIFY_DONE;
+3 -3
net/ax25/af_ax25.c
··· 111 111 * Handle device status changes. 112 112 */ 113 113 static int ax25_device_event(struct notifier_block *this, unsigned long event, 114 - void *ptr) 114 + void *ptr) 115 115 { 116 - struct net_device *dev = (struct net_device *)ptr; 116 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 117 117 118 118 if (!net_eq(dev_net(dev), &init_net)) 119 119 return NOTIFY_DONE; ··· 1974 1974 }; 1975 1975 1976 1976 static struct notifier_block ax25_dev_notifier = { 1977 - .notifier_call =ax25_device_event, 1977 + .notifier_call = ax25_device_event, 1978 1978 }; 1979 1979 1980 1980 static int __init ax25_init(void)
+1 -1
net/batman-adv/hard-interface.c
··· 595 595 static int batadv_hard_if_event(struct notifier_block *this, 596 596 unsigned long event, void *ptr) 597 597 { 598 - struct net_device *net_dev = ptr; 598 + struct net_device *net_dev = netdev_notifier_info_to_dev(ptr); 599 599 struct batadv_hard_iface *hard_iface; 600 600 struct batadv_hard_iface *primary_if = NULL; 601 601 struct batadv_priv *bat_priv;
+1 -1
net/bridge/br_notify.c
··· 31 31 */ 32 32 static int br_device_event(struct notifier_block *unused, unsigned long event, void *ptr) 33 33 { 34 - struct net_device *dev = ptr; 34 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 35 35 struct net_bridge_port *p; 36 36 struct net_bridge *br; 37 37 bool changed_addr;
+2 -2
net/caif/caif_dev.c
··· 352 352 353 353 /* notify Caif of device events */ 354 354 static int caif_device_notify(struct notifier_block *me, unsigned long what, 355 - void *arg) 355 + void *ptr) 356 356 { 357 - struct net_device *dev = arg; 357 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 358 358 struct caif_device_entry *caifd = NULL; 359 359 struct caif_dev_common *caifdev; 360 360 struct cfcnfg *cfg;
+2 -2
net/caif/caif_usb.c
··· 121 121 }; 122 122 123 123 static int cfusbl_device_notify(struct notifier_block *me, unsigned long what, 124 - void *arg) 124 + void *ptr) 125 125 { 126 - struct net_device *dev = arg; 126 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 127 127 struct caif_dev_common common; 128 128 struct cflayer *layer, *link_support; 129 129 struct usbnet *usbnet;
+2 -2
net/can/af_can.c
··· 794 794 * af_can notifier to create/remove CAN netdevice specific structs 795 795 */ 796 796 static int can_notifier(struct notifier_block *nb, unsigned long msg, 797 - void *data) 797 + void *ptr) 798 798 { 799 - struct net_device *dev = (struct net_device *)data; 799 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 800 800 struct dev_rcv_lists *d; 801 801 802 802 if (!net_eq(dev_net(dev), &init_net))
+2 -2
net/can/bcm.c
··· 1350 1350 * notification handler for netdevice status changes 1351 1351 */ 1352 1352 static int bcm_notifier(struct notifier_block *nb, unsigned long msg, 1353 - void *data) 1353 + void *ptr) 1354 1354 { 1355 - struct net_device *dev = (struct net_device *)data; 1355 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1356 1356 struct bcm_sock *bo = container_of(nb, struct bcm_sock, notifier); 1357 1357 struct sock *sk = &bo->sk; 1358 1358 struct bcm_op *op;
+2 -2
net/can/gw.c
··· 445 445 } 446 446 447 447 static int cgw_notifier(struct notifier_block *nb, 448 - unsigned long msg, void *data) 448 + unsigned long msg, void *ptr) 449 449 { 450 - struct net_device *dev = (struct net_device *)data; 450 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 451 451 452 452 if (!net_eq(dev_net(dev), &init_net)) 453 453 return NOTIFY_DONE;
+2 -2
net/can/raw.c
··· 239 239 } 240 240 241 241 static int raw_notifier(struct notifier_block *nb, 242 - unsigned long msg, void *data) 242 + unsigned long msg, void *ptr) 243 243 { 244 - struct net_device *dev = (struct net_device *)data; 244 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 245 245 struct raw_sock *ro = container_of(nb, struct raw_sock, notifier); 246 246 struct sock *sk = &ro->sk; 247 247
+46 -10
net/core/dev.c
··· 1391 1391 } 1392 1392 EXPORT_SYMBOL(dev_disable_lro); 1393 1393 1394 + static void netdev_notifier_info_init(struct netdev_notifier_info *info, 1395 + struct net_device *dev) 1396 + { 1397 + info->dev = dev; 1398 + } 1399 + 1400 + static int call_netdevice_notifier(struct notifier_block *nb, unsigned long val, 1401 + struct net_device *dev) 1402 + { 1403 + struct netdev_notifier_info info; 1404 + 1405 + netdev_notifier_info_init(&info, dev); 1406 + return nb->notifier_call(nb, val, &info); 1407 + } 1394 1408 1395 1409 static int dev_boot_phase = 1; 1396 1410 ··· 1437 1423 goto unlock; 1438 1424 for_each_net(net) { 1439 1425 for_each_netdev(net, dev) { 1440 - err = nb->notifier_call(nb, NETDEV_REGISTER, dev); 1426 + err = call_netdevice_notifier(nb, NETDEV_REGISTER, dev); 1441 1427 err = notifier_to_errno(err); 1442 1428 if (err) 1443 1429 goto rollback; ··· 1445 1431 if (!(dev->flags & IFF_UP)) 1446 1432 continue; 1447 1433 1448 - nb->notifier_call(nb, NETDEV_UP, dev); 1434 + call_netdevice_notifier(nb, NETDEV_UP, dev); 1449 1435 } 1450 1436 } 1451 1437 ··· 1461 1447 goto outroll; 1462 1448 1463 1449 if (dev->flags & IFF_UP) { 1464 - nb->notifier_call(nb, NETDEV_GOING_DOWN, dev); 1465 - nb->notifier_call(nb, NETDEV_DOWN, dev); 1450 + call_netdevice_notifier(nb, NETDEV_GOING_DOWN, 1451 + dev); 1452 + call_netdevice_notifier(nb, NETDEV_DOWN, dev); 1466 1453 } 1467 - nb->notifier_call(nb, NETDEV_UNREGISTER, dev); 1454 + call_netdevice_notifier(nb, NETDEV_UNREGISTER, dev); 1468 1455 } 1469 1456 } 1470 1457 ··· 1503 1488 for_each_net(net) { 1504 1489 for_each_netdev(net, dev) { 1505 1490 if (dev->flags & IFF_UP) { 1506 - nb->notifier_call(nb, NETDEV_GOING_DOWN, dev); 1507 - nb->notifier_call(nb, NETDEV_DOWN, dev); 1491 + call_netdevice_notifier(nb, NETDEV_GOING_DOWN, 1492 + dev); 1493 + call_netdevice_notifier(nb, NETDEV_DOWN, dev); 1508 1494 } 1509 - nb->notifier_call(nb, NETDEV_UNREGISTER, dev); 1495 + call_netdevice_notifier(nb, NETDEV_UNREGISTER, dev); 1510 1496 } 1511 1497 } 1512 1498 unlock: ··· 1515 1499 return err; 1516 1500 } 1517 1501 EXPORT_SYMBOL(unregister_netdevice_notifier); 1502 + 1503 + /** 1504 + * call_netdevice_notifiers_info - call all network notifier blocks 1505 + * @val: value passed unmodified to notifier function 1506 + * @dev: net_device pointer passed unmodified to notifier function 1507 + * @info: notifier information data 1508 + * 1509 + * Call all network notifier blocks. Parameters and return value 1510 + * are as for raw_notifier_call_chain(). 1511 + */ 1512 + 1513 + int call_netdevice_notifiers_info(unsigned long val, struct net_device *dev, 1514 + struct netdev_notifier_info *info) 1515 + { 1516 + ASSERT_RTNL(); 1517 + netdev_notifier_info_init(info, dev); 1518 + return raw_notifier_call_chain(&netdev_chain, val, info); 1519 + } 1520 + EXPORT_SYMBOL(call_netdevice_notifiers_info); 1518 1521 1519 1522 /** 1520 1523 * call_netdevice_notifiers - call all network notifier blocks ··· 1546 1511 1547 1512 int call_netdevice_notifiers(unsigned long val, struct net_device *dev) 1548 1513 { 1549 - ASSERT_RTNL(); 1550 - return raw_notifier_call_chain(&netdev_chain, val, dev); 1514 + struct netdev_notifier_info info; 1515 + 1516 + return call_netdevice_notifiers_info(val, dev, &info); 1551 1517 } 1552 1518 EXPORT_SYMBOL(call_netdevice_notifiers); 1553 1519
+2 -2
net/core/drop_monitor.c
··· 295 295 } 296 296 297 297 static int dropmon_net_event(struct notifier_block *ev_block, 298 - unsigned long event, void *ptr) 298 + unsigned long event, void *ptr) 299 299 { 300 - struct net_device *dev = ptr; 300 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 301 301 struct dm_hw_stat_delta *new_stat = NULL; 302 302 struct dm_hw_stat_delta *tmp; 303 303
+1 -1
net/core/dst.c
··· 372 372 static int dst_dev_event(struct notifier_block *this, unsigned long event, 373 373 void *ptr) 374 374 { 375 - struct net_device *dev = ptr; 375 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 376 376 struct dst_entry *dst, *last = NULL; 377 377 378 378 switch (event) {
+2 -2
net/core/fib_rules.c
··· 705 705 706 706 707 707 static int fib_rules_event(struct notifier_block *this, unsigned long event, 708 - void *ptr) 708 + void *ptr) 709 709 { 710 - struct net_device *dev = ptr; 710 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 711 711 struct net *net = dev_net(dev); 712 712 struct fib_rules_ops *ops; 713 713
+1 -1
net/core/netprio_cgroup.c
··· 261 261 static int netprio_device_event(struct notifier_block *unused, 262 262 unsigned long event, void *ptr) 263 263 { 264 - struct net_device *dev = ptr; 264 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 265 265 struct netprio_map *old; 266 266 267 267 /*
+1 -1
net/core/pktgen.c
··· 1921 1921 static int pktgen_device_event(struct notifier_block *unused, 1922 1922 unsigned long event, void *ptr) 1923 1923 { 1924 - struct net_device *dev = ptr; 1924 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1925 1925 struct pktgen_net *pn = net_generic(dev_net(dev), pg_net_id); 1926 1926 1927 1927 if (pn->pktgen_exiting)
+1 -1
net/core/rtnetlink.c
··· 2667 2667 2668 2668 static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr) 2669 2669 { 2670 - struct net_device *dev = ptr; 2670 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2671 2671 2672 2672 switch (event) { 2673 2673 case NETDEV_UP:
+2 -2
net/decnet/af_decnet.c
··· 2078 2078 } 2079 2079 2080 2080 static int dn_device_event(struct notifier_block *this, unsigned long event, 2081 - void *ptr) 2081 + void *ptr) 2082 2082 { 2083 - struct net_device *dev = (struct net_device *)ptr; 2083 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2084 2084 2085 2085 if (!net_eq(dev_net(dev), &init_net)) 2086 2086 return NOTIFY_DONE;
+2 -3
net/ieee802154/6lowpan.c
··· 1352 1352 } 1353 1353 1354 1354 static int lowpan_device_event(struct notifier_block *unused, 1355 - unsigned long event, 1356 - void *ptr) 1355 + unsigned long event, void *ptr) 1357 1356 { 1358 - struct net_device *dev = ptr; 1357 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1359 1358 LIST_HEAD(del_list); 1360 1359 struct lowpan_dev_record *entry, *tmp; 1361 1360
+1 -1
net/ipv4/arp.c
··· 1234 1234 static int arp_netdev_event(struct notifier_block *this, unsigned long event, 1235 1235 void *ptr) 1236 1236 { 1237 - struct net_device *dev = ptr; 1237 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1238 1238 1239 1239 switch (event) { 1240 1240 case NETDEV_CHANGEADDR:
+1 -1
net/ipv4/devinet.c
··· 1333 1333 static int inetdev_event(struct notifier_block *this, unsigned long event, 1334 1334 void *ptr) 1335 1335 { 1336 - struct net_device *dev = ptr; 1336 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1337 1337 struct in_device *in_dev = __in_dev_get_rtnl(dev); 1338 1338 1339 1339 ASSERT_RTNL();
+1 -1
net/ipv4/fib_frontend.c
··· 1038 1038 1039 1039 static int fib_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) 1040 1040 { 1041 - struct net_device *dev = ptr; 1041 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1042 1042 struct in_device *in_dev; 1043 1043 struct net *net = dev_net(dev); 1044 1044
+1 -1
net/ipv4/ipmr.c
··· 1609 1609 1610 1610 static int ipmr_device_event(struct notifier_block *this, unsigned long event, void *ptr) 1611 1611 { 1612 - struct net_device *dev = ptr; 1612 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1613 1613 struct net *net = dev_net(dev); 1614 1614 struct mr_table *mrt; 1615 1615 struct vif_device *v;
+1 -1
net/ipv4/netfilter/ipt_MASQUERADE.c
··· 108 108 unsigned long event, 109 109 void *ptr) 110 110 { 111 - const struct net_device *dev = ptr; 111 + const struct net_device *dev = netdev_notifier_info_to_dev(ptr); 112 112 struct net *net = dev_net(dev); 113 113 114 114 if (event == NETDEV_DOWN) {
+2 -2
net/ipv6/addrconf.c
··· 2826 2826 } 2827 2827 2828 2828 static int addrconf_notify(struct notifier_block *this, unsigned long event, 2829 - void *data) 2829 + void *ptr) 2830 2830 { 2831 - struct net_device *dev = (struct net_device *) data; 2831 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2832 2832 struct inet6_dev *idev = __in6_dev_get(dev); 2833 2833 int run_pending = 0; 2834 2834 int err;
+1 -1
net/ipv6/ip6mr.c
··· 1319 1319 static int ip6mr_device_event(struct notifier_block *this, 1320 1320 unsigned long event, void *ptr) 1321 1321 { 1322 - struct net_device *dev = ptr; 1322 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1323 1323 struct net *net = dev_net(dev); 1324 1324 struct mr6_table *mrt; 1325 1325 struct mif_device *v;
+1 -1
net/ipv6/ndisc.c
··· 1568 1568 1569 1569 static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) 1570 1570 { 1571 - struct net_device *dev = ptr; 1571 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1572 1572 struct net *net = dev_net(dev); 1573 1573 struct inet6_dev *idev; 1574 1574
+1 -1
net/ipv6/netfilter/ip6t_MASQUERADE.c
··· 71 71 static int masq_device_event(struct notifier_block *this, 72 72 unsigned long event, void *ptr) 73 73 { 74 - const struct net_device *dev = ptr; 74 + const struct net_device *dev = netdev_notifier_info_to_dev(ptr); 75 75 struct net *net = dev_net(dev); 76 76 77 77 if (event == NETDEV_DOWN)
+2 -2
net/ipv6/route.c
··· 2681 2681 } 2682 2682 2683 2683 static int ip6_route_dev_notify(struct notifier_block *this, 2684 - unsigned long event, void *data) 2684 + unsigned long event, void *ptr) 2685 2685 { 2686 - struct net_device *dev = (struct net_device *)data; 2686 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2687 2687 struct net *net = dev_net(dev); 2688 2688 2689 2689 if (event == NETDEV_REGISTER && (dev->flags & IFF_LOOPBACK)) {
+1 -1
net/ipx/af_ipx.c
··· 330 330 static int ipxitf_device_event(struct notifier_block *notifier, 331 331 unsigned long event, void *ptr) 332 332 { 333 - struct net_device *dev = ptr; 333 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 334 334 struct ipx_interface *i, *tmp; 335 335 336 336 if (!net_eq(dev_net(dev), &init_net))
+1 -1
net/iucv/af_iucv.c
··· 2293 2293 static int afiucv_netdev_event(struct notifier_block *this, 2294 2294 unsigned long event, void *ptr) 2295 2295 { 2296 - struct net_device *event_dev = (struct net_device *)ptr; 2296 + struct net_device *event_dev = netdev_notifier_info_to_dev(ptr); 2297 2297 struct sock *sk; 2298 2298 struct iucv_sock *iucv; 2299 2299
+2 -3
net/mac80211/iface.c
··· 1717 1717 } 1718 1718 1719 1719 static int netdev_notify(struct notifier_block *nb, 1720 - unsigned long state, 1721 - void *ndev) 1720 + unsigned long state, void *ptr) 1722 1721 { 1723 - struct net_device *dev = ndev; 1722 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1724 1723 struct ieee80211_sub_if_data *sdata; 1725 1724 1726 1725 if (state != NETDEV_CHANGENAME)
+2 -2
net/netfilter/ipvs/ip_vs_ctl.c
··· 1487 1487 * Currently only NETDEV_DOWN is handled to release refs to cached dsts 1488 1488 */ 1489 1489 static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, 1490 - void *ptr) 1490 + void *ptr) 1491 1491 { 1492 - struct net_device *dev = ptr; 1492 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1493 1493 struct net *net = dev_net(dev); 1494 1494 struct netns_ipvs *ipvs = net_ipvs(net); 1495 1495 struct ip_vs_service *svc;
+1 -1
net/netfilter/xt_TEE.c
··· 200 200 static int tee_netdev_event(struct notifier_block *this, unsigned long event, 201 201 void *ptr) 202 202 { 203 - struct net_device *dev = ptr; 203 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 204 204 struct xt_tee_priv *priv; 205 205 206 206 priv = container_of(this, struct xt_tee_priv, notifier);
+3 -4
net/netlabel/netlabel_unlabeled.c
··· 708 708 * netlbl_unlhsh_netdev_handler - Network device notification handler 709 709 * @this: notifier block 710 710 * @event: the event 711 - * @ptr: the network device (cast to void) 711 + * @ptr: the netdevice notifier info (cast to void) 712 712 * 713 713 * Description: 714 714 * Handle network device events, although at present all we care about is a ··· 717 717 * 718 718 */ 719 719 static int netlbl_unlhsh_netdev_handler(struct notifier_block *this, 720 - unsigned long event, 721 - void *ptr) 720 + unsigned long event, void *ptr) 722 721 { 723 - struct net_device *dev = ptr; 722 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 724 723 struct netlbl_unlhsh_iface *iface = NULL; 725 724 726 725 if (!net_eq(dev_net(dev), &init_net))
+1 -1
net/netrom/af_netrom.c
··· 117 117 */ 118 118 static int nr_device_event(struct notifier_block *this, unsigned long event, void *ptr) 119 119 { 120 - struct net_device *dev = (struct net_device *)ptr; 120 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 121 121 122 122 if (!net_eq(dev_net(dev), &init_net)) 123 123 return NOTIFY_DONE;
+1 -1
net/openvswitch/dp_notify.c
··· 78 78 void *ptr) 79 79 { 80 80 struct ovs_net *ovs_net; 81 - struct net_device *dev = ptr; 81 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 82 82 struct vport *vport = NULL; 83 83 84 84 if (!ovs_is_internal_dev(dev))
+3 -2
net/packet/af_packet.c
··· 3331 3331 } 3332 3332 3333 3333 3334 - static int packet_notifier(struct notifier_block *this, unsigned long msg, void *data) 3334 + static int packet_notifier(struct notifier_block *this, 3335 + unsigned long msg, void *ptr) 3335 3336 { 3336 3337 struct sock *sk; 3337 - struct net_device *dev = data; 3338 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3338 3339 struct net *net = dev_net(dev); 3339 3340 3340 3341 rcu_read_lock();
+2 -2
net/phonet/pn_dev.c
··· 292 292 293 293 /* notify Phonet of device events */ 294 294 static int phonet_device_notify(struct notifier_block *me, unsigned long what, 295 - void *arg) 295 + void *ptr) 296 296 { 297 - struct net_device *dev = arg; 297 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 298 298 299 299 switch (what) { 300 300 case NETDEV_REGISTER:
+3 -3
net/rose/af_rose.c
··· 202 202 /* 203 203 * Handle device status changes. 204 204 */ 205 - static int rose_device_event(struct notifier_block *this, unsigned long event, 206 - void *ptr) 205 + static int rose_device_event(struct notifier_block *this, 206 + unsigned long event, void *ptr) 207 207 { 208 - struct net_device *dev = (struct net_device *)ptr; 208 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 209 209 210 210 if (!net_eq(dev_net(dev), &init_net)) 211 211 return NOTIFY_DONE;
+1 -1
net/sched/act_mirred.c
··· 243 243 static int mirred_device_event(struct notifier_block *unused, 244 244 unsigned long event, void *ptr) 245 245 { 246 - struct net_device *dev = ptr; 246 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 247 247 struct tcf_mirred *m; 248 248 249 249 if (event == NETDEV_UNREGISTER)
+2 -2
net/tipc/eth_media.c
··· 251 251 * specified device. 252 252 */ 253 253 static int recv_notification(struct notifier_block *nb, unsigned long evt, 254 - void *dv) 254 + void *ptr) 255 255 { 256 - struct net_device *dev = (struct net_device *)dv; 256 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 257 257 struct eth_bearer *eb_ptr = &eth_bearers[0]; 258 258 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS]; 259 259
+2 -2
net/tipc/ib_media.c
··· 244 244 * specified device. 245 245 */ 246 246 static int recv_notification(struct notifier_block *nb, unsigned long evt, 247 - void *dv) 247 + void *ptr) 248 248 { 249 - struct net_device *dev = (struct net_device *)dv; 249 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 250 250 struct ib_bearer *ib_ptr = &ib_bearers[0]; 251 251 struct ib_bearer *stop = &ib_bearers[MAX_IB_BEARERS]; 252 252
+2 -3
net/wireless/core.c
··· 886 886 } 887 887 888 888 static int cfg80211_netdev_notifier_call(struct notifier_block *nb, 889 - unsigned long state, 890 - void *ndev) 889 + unsigned long state, void *ptr) 891 890 { 892 - struct net_device *dev = ndev; 891 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 893 892 struct wireless_dev *wdev = dev->ieee80211_ptr; 894 893 struct cfg80211_registered_device *rdev; 895 894 int ret;
+1 -1
net/x25/af_x25.c
··· 224 224 static int x25_device_event(struct notifier_block *this, unsigned long event, 225 225 void *ptr) 226 226 { 227 - struct net_device *dev = ptr; 227 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 228 228 struct x25_neigh *nb; 229 229 230 230 if (!net_eq(dev_net(dev), &init_net))
+1 -1
net/xfrm/xfrm_policy.c
··· 2784 2784 2785 2785 static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr) 2786 2786 { 2787 - struct net_device *dev = ptr; 2787 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2788 2788 2789 2789 switch (event) { 2790 2790 case NETDEV_DOWN:
+1 -1
security/selinux/netif.c
··· 264 264 static int sel_netif_netdev_notifier_handler(struct notifier_block *this, 265 265 unsigned long event, void *ptr) 266 266 { 267 - struct net_device *dev = ptr; 267 + struct net_device *dev = netdev_notifier_info_to_dev(ptr); 268 268 269 269 if (dev_net(dev) != &init_net) 270 270 return NOTIFY_DONE;