sfc: avoid max() in array size
authorEdward Cree <ecree@solarflare.com>
Fri, 3 Mar 2017 15:22:09 +0000 (15:22 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Mar 2017 18:06:38 +0000 (10:06 -0800)
It confuses sparse, which thinks the size isn't constant.  Let's achieve
 the same thing with a BUILD_BUG_ON, since we know which one should be
 bigger and don't expect them ever to change.

Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ef10.c

index 92e1c6d..4d88e85 100644 (file)
@@ -828,9 +828,7 @@ static int efx_ef10_alloc_piobufs(struct efx_nic *efx, unsigned int n)
 static int efx_ef10_link_piobufs(struct efx_nic *efx)
 {
        struct efx_ef10_nic_data *nic_data = efx->nic_data;
-       _MCDI_DECLARE_BUF(inbuf,
-                         max(MC_CMD_LINK_PIOBUF_IN_LEN,
-                             MC_CMD_UNLINK_PIOBUF_IN_LEN));
+       MCDI_DECLARE_BUF(inbuf, MC_CMD_LINK_PIOBUF_IN_LEN);
        struct efx_channel *channel;
        struct efx_tx_queue *tx_queue;
        unsigned int offset, index;
@@ -839,8 +837,6 @@ static int efx_ef10_link_piobufs(struct efx_nic *efx)
        BUILD_BUG_ON(MC_CMD_LINK_PIOBUF_OUT_LEN != 0);
        BUILD_BUG_ON(MC_CMD_UNLINK_PIOBUF_OUT_LEN != 0);
 
-       memset(inbuf, 0, sizeof(inbuf));
-
        /* Link a buffer to each VI in the write-combining mapping */
        for (index = 0; index < nic_data->n_piobufs; ++index) {
                MCDI_SET_DWORD(inbuf, LINK_PIOBUF_IN_PIOBUF_HANDLE,
@@ -920,6 +916,10 @@ static int efx_ef10_link_piobufs(struct efx_nic *efx)
        return 0;
 
 fail:
+       /* inbuf was defined for MC_CMD_LINK_PIOBUF.  We can use the same
+        * buffer for MC_CMD_UNLINK_PIOBUF because it's shorter.
+        */
+       BUILD_BUG_ON(MC_CMD_LINK_PIOBUF_IN_LEN < MC_CMD_UNLINK_PIOBUF_IN_LEN);
        while (index--) {
                MCDI_SET_DWORD(inbuf, UNLINK_PIOBUF_IN_TXQ_INSTANCE,
                               nic_data->pio_write_vi_base + index);