Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| alloc_netdev_etherdev [2018/08/28 07:40] – [The variations of allocating net devices] rpjday | alloc_netdev_etherdev [2018/08/28 08:00] (current) – [netdev private data] rpjday | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== netdev private data ===== | ===== netdev private data ===== | ||
| - | From '' | + | From '' |
| < | < | ||
| Line 21: | Line 21: | ||
| - | ==== alloc_netdev_mqs ==== | + | ===== alloc_netdev_mqs |
| The base allocation routine from '' | The base allocation routine from '' | ||
| Line 78: | Line 78: | ||
| Not a lot of drivers call this routine directly given that you can call more convenient wrappers (see below). | Not a lot of drivers call this routine directly given that you can call more convenient wrappers (see below). | ||
| + | ===== Wrappers/ | ||
| - | ==== More ==== | + | ==== alloc_netdev()/ |
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | |||
| + | #define alloc_netdev(sizeof_priv, | ||
| + | alloc_netdev_mqs(sizeof_priv, | ||
| + | |||
| + | #define alloc_netdev_mq(sizeof_priv, | ||
| + | alloc_netdev_mqs(sizeof_priv, | ||
| + | count) | ||
| + | </ | ||
| + | |||
| + | ==== alloc_etherdev(), | ||
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | struct net_device *alloc_etherdev_mqs(int sizeof_priv, | ||
| + | unsigned int rxqs); | ||
| + | #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, | ||
| + | #define alloc_etherdev_mq(sizeof_priv, | ||
| + | </ | ||
| + | |||
| + | From '' | ||
| < | < | ||
| Line 87: | Line 113: | ||
| return alloc_netdev_mqs(sizeof_priv, | return alloc_netdev_mqs(sizeof_priv, | ||
| ether_setup, | ether_setup, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== devm_alloc_etherdev*() ==== | ||
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, | ||
| + | | ||
| + | | ||
| + | #define devm_alloc_etherdev(dev, | ||
| + | </ | ||
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, | ||
| + | | ||
| + | { | ||
| + | struct net_device **dr; | ||
| + | struct net_device *netdev; | ||
| + | |||
| + | dr = devres_alloc(devm_free_netdev, | ||
| + | if (!dr) | ||
| + | return NULL; | ||
| + | |||
| + | netdev = alloc_etherdev_mqs(sizeof_priv, | ||
| + | if (!netdev) { | ||
| + | devres_free(dr); | ||
| + | return NULL; | ||
| + | } | ||
| + | |||
| + | *dr = netdev; | ||
| + | devres_add(dev, | ||
| + | |||
| + | return netdev; | ||
| } | } | ||
| </ | </ | ||