PCI/VPD: Use unaligned access helpers
authorHeiner Kallweit <hkallweit1@gmail.com>
Thu, 26 Aug 2021 18:58:07 +0000 (20:58 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 31 Aug 2021 21:10:18 +0000 (16:10 -0500)
Use unaligned access helpers to simplify the code.

Link: https://lore.kernel.org/r/0f1c7e21-5330-72ab-139d-f5ce3c65f04a@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/vpd.c

index ff600df..25557b2 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/delay.h>
 #include <linux/export.h>
 #include <linux/sched/signal.h>
+#include <asm/unaligned.h>
 #include "pci.h"
 
 #define PCI_VPD_LRDT_TAG_SIZE          3
@@ -19,7 +20,7 @@
 
 static u16 pci_vpd_lrdt_size(const u8 *lrdt)
 {
-       return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
+       return get_unaligned_le16(lrdt + 1);
 }
 
 static u8 pci_vpd_srdt_tag(const u8 *srdt)
@@ -218,14 +219,8 @@ static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count,
                return -EINTR;
 
        while (pos < end) {
-               u32 val;
-
-               val = *buf++;
-               val |= *buf++ << 8;
-               val |= *buf++ << 16;
-               val |= *buf++ << 24;
-
-               ret = pci_user_write_config_dword(dev, vpd->cap + PCI_VPD_DATA, val);
+               ret = pci_user_write_config_dword(dev, vpd->cap + PCI_VPD_DATA,
+                                                 get_unaligned_le32(buf));
                if (ret < 0)
                        break;
                ret = pci_user_write_config_word(dev, vpd->cap + PCI_VPD_ADDR,
@@ -237,6 +232,7 @@ static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count,
                if (ret < 0)
                        break;
 
+               buf += sizeof(u32);
                pos += sizeof(u32);
        }