> +void rmnet_vnd_setup(struct net_device *rmnet_dev) > +{ > + struct rmnet_priv *priv; > + > + /* Clear out private data */ > + priv = netdev_priv(rmnet_dev); > + memset(priv, 0, sizeof(struct rmnet_priv));
Netdev private area is always zero on creation. See alloc_netdev(). > +struct rmnet_endpoint *rmnet_vnd_get_endpoint(struct net_device *rmnet_dev) > +{ > + struct rmnet_priv *priv; > + > + if (!rmnet_dev) > + return 0; Do not confuse 0 with NULL. Did you run sparse? > + > + priv = netdev_priv(rmnet_dev); > + if (!priv) > + return 0; netdev_priv() always returns a non-NULL value. The private area is just a constant offset below the original network_device structure.