net: cleanups in RX queue allocation
authorTom Herbert <therbert@google.com>
Mon, 18 Oct 2010 18:00:16 +0000 (18:00 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Oct 2010 09:27:59 +0000 (02:27 -0700)
Clean up in RX queue allocation.  In netif_set_real_num_rx_queues
return error on attempt to set zero queues, or requested number is
greater than number of allocated queues.  In netif_alloc_rx_queues,
do BUG_ON if queue_count is zero.

Signed-off-by: Tom Herbert <therbert@google.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c

index f44d29ae5d6735f00e3346b987e330b18f65f86a..d33adecec44bc5c882f27c166ddbf8d57c51024c 100644 (file)
@@ -1583,12 +1583,12 @@ int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq)
 {
        int rc;
 
+       if (rxq < 1 || rxq > dev->num_rx_queues)
+               return -EINVAL;
+
        if (dev->reg_state == NETREG_REGISTERED) {
                ASSERT_RTNL();
 
-               if (rxq > dev->num_rx_queues)
-                       return -EINVAL;
-
                rc = net_rx_queue_update_kobjects(dev, dev->real_num_rx_queues,
                                                  rxq);
                if (rc)
@@ -5013,25 +5013,23 @@ static int netif_alloc_rx_queues(struct net_device *dev)
 {
 #ifdef CONFIG_RPS
        unsigned int i, count = dev->num_rx_queues;
+       struct netdev_rx_queue *rx;
 
-       if (count) {
-               struct netdev_rx_queue *rx;
-
-               rx = kcalloc(count, sizeof(struct netdev_rx_queue), GFP_KERNEL);
-               if (!rx) {
-                       pr_err("netdev: Unable to allocate %u rx queues.\n",
-                              count);
-                       return -ENOMEM;
-               }
-               dev->_rx = rx;
+       BUG_ON(count < 1);
 
-               /*
-                * Set a pointer to first element in the array which holds the
-                * reference count.
-                */
-               for (i = 0; i < count; i++)
-                       rx[i].first = rx;
+       rx = kcalloc(count, sizeof(struct netdev_rx_queue), GFP_KERNEL);
+       if (!rx) {
+               pr_err("netdev: Unable to allocate %u rx queues.\n", count);
+               return -ENOMEM;
        }
+       dev->_rx = rx;
+
+       /*
+        * Set a pointer to first element in the array which holds the
+        * reference count.
+        */
+       for (i = 0; i < count; i++)
+               rx[i].first = rx;
 #endif
        return 0;
 }