ibmvnic: Fix ibmvnic_change_mac_addr struct format
authorMurilo Fossa Vicentini <muvic@linux.vnet.ibm.com>
Wed, 19 Apr 2017 17:44:35 +0000 (13:44 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Apr 2017 17:33:52 +0000 (13:33 -0400)
The ibmvnic_change_mac_addr struct alignment was not matching the defined
format in PAPR+, it had the reserved and return code fields swapped. As a
consequence, the CHANGE_MAC_ADDR_RSP commands were being improperly handled
and executed even when the operation wasn't successfully completed by the
system firmware.

Also changing the endianness of the debug message to make it easier to
parse the CRQ content.

Signed-off-by: Murilo Fossa Vicentini <muvic@linux.vnet.ibm.com>
Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/ibm/ibmvnic.h

index 7bf35071a9a39a5410cc2b3aa728761c0649d7c2..625896de25f73c9c314f50bdcad50cd82b97fd78 100644 (file)
@@ -2890,11 +2890,12 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
        struct ibmvnic_generic_crq *gen_crq = &crq->generic;
        struct net_device *netdev = adapter->netdev;
        struct device *dev = &adapter->vdev->dev;
+       u64 *u64_crq = (u64 *)crq;
        long rc;
 
        netdev_dbg(netdev, "Handling CRQ: %016lx %016lx\n",
-                  ((unsigned long int *)crq)[0],
-                  ((unsigned long int *)crq)[1]);
+                  (unsigned long int)cpu_to_be64(u64_crq[0]),
+                  (unsigned long int)cpu_to_be64(u64_crq[1]));
        switch (gen_crq->first) {
        case IBMVNIC_CRQ_INIT_RSP:
                switch (gen_crq->cmd) {
index b0d0b890d033a4d7d03632b1daa97798a3db5237..1b404cae3bc1597f50a2ddfce711bf5763fc6116 100644 (file)
@@ -518,8 +518,8 @@ struct ibmvnic_change_mac_addr {
        u8 first;
        u8 cmd;
        u8 mac_addr[6];
-       struct ibmvnic_rc rc;
        u8 reserved[4];
+       struct ibmvnic_rc rc;
 } __packed __aligned(8);
 
 struct ibmvnic_multicast_ctrl {