Hi Catherine, I love your patch! Perhaps something to improve:
[auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/Catherine-Sullivan/Add-gve-driver/20190629-070444 reproduce: # apt-get install sparse # sparse version: v0.6.1-rc1-7-g2b96cd8-dirty make ARCH=x86_64 allmodconfig make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' If you fix the issue, kindly add following tag Reported-by: kbuild test robot <l...@intel.com> sparse warnings: (new ones prefixed by >>) drivers/net/ethernet/google/gve/gve_main.c:25:12: sparse: sparse: symbol 'gve_version_str' was not declared. Should it be static? drivers/net/ethernet/google/gve/gve_main.c:26:12: sparse: sparse: symbol 'gve_version_prefix' was not declared. Should it be static? >> drivers/net/ethernet/google/gve/gve_main.c:79:16: sparse: sparse: incorrect >> type in argument 1 (different base types) @@ expected unsigned int val @@ >> got restricted __be3unsigned int val @@ >> drivers/net/ethernet/google/gve/gve_main.c:79:16: sparse: expected >> unsigned int val >> drivers/net/ethernet/google/gve/gve_main.c:79:16: sparse: got restricted >> __be32 [usertype] drivers/net/ethernet/google/gve/gve_main.c:104:16: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restricted __be3unsigned int val @@ drivers/net/ethernet/google/gve/gve_main.c:104:16: sparse: expected unsigned int val drivers/net/ethernet/google/gve/gve_main.c:104:16: sparse: got restricted __be32 [usertype] drivers/net/ethernet/google/gve/gve_main.c:115:24: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restricted __be3unsigned int val @@ drivers/net/ethernet/google/gve/gve_main.c:115:24: sparse: expected unsigned int val drivers/net/ethernet/google/gve/gve_main.c:115:24: sparse: got restricted __be32 [usertype] >> drivers/net/ethernet/google/gve/gve_main.c:84:5: sparse: sparse: symbol >> 'gve_napi_poll' was not declared. Should it be static? >> drivers/net/ethernet/google/gve/gve_main.c:297:6: sparse: sparse: symbol >> 'gve_add_napi' was not declared. Should it be static? >> drivers/net/ethernet/google/gve/gve_main.c:305:6: sparse: sparse: symbol >> 'gve_remove_napi' was not declared. Should it be static? drivers/net/ethernet/google/gve/gve_main.c:726:24: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restricted __be3unsigned int val @@ drivers/net/ethernet/google/gve/gve_main.c:726:24: sparse: expected unsigned int val drivers/net/ethernet/google/gve/gve_main.c:726:24: sparse: got restricted __be32 [usertype] drivers/net/ethernet/google/gve/gve_main.c:733:24: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restricted __be3unsigned int val @@ drivers/net/ethernet/google/gve/gve_main.c:733:24: sparse: expected unsigned int val drivers/net/ethernet/google/gve/gve_main.c:733:24: sparse: got restricted __be32 [usertype] drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:907:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 drivers/net/ethernet/google/gve/gve_main.c:908:25: sparse: sparse: cast to restricted __be32 -- >> drivers/net/ethernet/google/gve/gve_tx.c:145:6: sparse: sparse: symbol >> 'gve_tx_free_ring' was not declared. Should it be static? >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: sparse: incorrect >> type in argument 1 (different base types) @@ expected unsigned int val @@ >> got restricted __be3unsigned int val @@ >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: expected unsigned >> int val >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: got restricted >> __be32 [usertype] val >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: sparse: incorrect >> type in argument 1 (different base types) @@ expected unsigned int val @@ >> got restricted __be3unsigned int val @@ >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: expected unsigned >> int val >> drivers/net/ethernet/google/gve/gve_tx.c:18:16: sparse: got restricted >> __be32 [usertype] val -- >> drivers/net/ethernet/google/gve/gve_rx.c:11:6: sparse: sparse: symbol >> 'gve_rx_remove_from_block' was not declared. Should it be static? >> drivers/net/ethernet/google/gve/gve_rx.c:217:16: sparse: sparse: incorrect >> type in argument 1 (different base types) @@ expected unsigned int val @@ >> got restricted __be3unsigned int val @@ >> drivers/net/ethernet/google/gve/gve_rx.c:217:16: sparse: expected >> unsigned int val >> drivers/net/ethernet/google/gve/gve_rx.c:217:16: sparse: got restricted >> __be32 [usertype] >> drivers/net/ethernet/google/gve/gve_rx.c:349:27: sparse: sparse: incorrect >> type in assignment (different base types) @@ expected restricted __wsum >> [usertype] csum @@ got restricted __wsum [usertype] csum @@ >> drivers/net/ethernet/google/gve/gve_rx.c:349:27: sparse: expected >> restricted __wsum [usertype] csum >> drivers/net/ethernet/google/gve/gve_rx.c:349:27: sparse: got restricted >> __be16 [usertype] csum >> drivers/net/ethernet/google/gve/gve_rx.c:374:19: sparse: sparse: incorrect >> type in assignment (different base types) @@ expected unsigned short >> [usertype] flags_seq @@ got resunsigned short [usertype] flags_seq @@ >> drivers/net/ethernet/google/gve/gve_rx.c:374:19: sparse: expected >> unsigned short [usertype] flags_seq >> drivers/net/ethernet/google/gve/gve_rx.c:374:19: sparse: got restricted >> __be16 [usertype] flags_seq Please review and possibly fold the followup patch. vim +79 drivers/net/ethernet/google/gve/gve_main.c 24 > 25 const char gve_version_str[] = GVE_VERSION; 26 const char gve_version_prefix[] = GVE_VERSION_PREFIX; 27 28 static void gve_get_stats(struct net_device *dev, struct rtnl_link_stats64 *s) 29 { 30 struct gve_priv *priv = netdev_priv(dev); 31 int ring; 32 33 if (priv->rx) { 34 for (ring = 0; ring < priv->rx_cfg.num_queues; ring++) { 35 s->rx_packets += priv->rx[ring].rpackets; 36 s->rx_bytes += priv->rx[ring].rbytes; 37 } 38 } 39 if (priv->tx) { 40 for (ring = 0; ring < priv->tx_cfg.num_queues; ring++) { 41 s->tx_packets += priv->tx[ring].pkt_done; 42 s->tx_bytes += priv->tx[ring].bytes_done; 43 } 44 } 45 } 46 47 static int gve_alloc_counter_array(struct gve_priv *priv) 48 { 49 priv->counter_array = 50 dma_alloc_coherent(&priv->pdev->dev, 51 priv->num_event_counters * 52 sizeof(*priv->counter_array), 53 &priv->counter_array_bus, GFP_KERNEL); 54 if (!priv->counter_array) 55 return -ENOMEM; 56 57 return 0; 58 } 59 60 static void gve_free_counter_array(struct gve_priv *priv) 61 { 62 dma_free_coherent(&priv->pdev->dev, 63 priv->num_event_counters * 64 sizeof(*priv->counter_array), 65 priv->counter_array, priv->counter_array_bus); 66 priv->counter_array = NULL; 67 } 68 69 static irqreturn_t gve_mgmnt_intr(int irq, void *arg) 70 { 71 return IRQ_HANDLED; 72 } 73 74 static irqreturn_t gve_intr(int irq, void *arg) 75 { 76 struct gve_notify_block *block = arg; 77 struct gve_priv *priv = block->priv; 78 > 79 writel(cpu_to_be32(GVE_IRQ_MASK), gve_irq_doorbell(priv, block)); 80 napi_schedule_irqoff(&block->napi); 81 return IRQ_HANDLED; 82 } 83 > 84 int gve_napi_poll(struct napi_struct *napi, int budget) 85 { 86 struct gve_notify_block *block; 87 __be32 __iomem *irq_doorbell; 88 bool reschedule = false; 89 struct gve_priv *priv; 90 91 block = container_of(napi, struct gve_notify_block, napi); 92 priv = block->priv; 93 94 if (block->tx) 95 reschedule |= gve_tx_poll(block, budget); 96 if (block->rx) 97 reschedule |= gve_rx_poll(block, budget); 98 99 if (reschedule) 100 return budget; 101 102 napi_complete(napi); 103 irq_doorbell = gve_irq_doorbell(priv, block); 104 writel(cpu_to_be32(GVE_IRQ_ACK | GVE_IRQ_EVENT), irq_doorbell); 105 106 /* Double check we have no extra work. 107 * Ensure unmask synchronizes with checking for work. 108 */ 109 dma_rmb(); 110 if (block->tx) 111 reschedule |= gve_tx_poll(block, -1); 112 if (block->rx) 113 reschedule |= gve_rx_poll(block, -1); 114 if (reschedule && napi_reschedule(napi)) 115 writel(cpu_to_be32(GVE_IRQ_MASK), irq_doorbell); 116 117 return 0; 118 } 119 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation