]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/eeh: Rework pci_dev lookup in debugfs attributes
authorOliver O'Halloran <oohall@gmail.com>
Tue, 3 Nov 2020 05:15:11 +0000 (16:15 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 31 Jan 2021 11:35:47 +0000 (22:35 +1100)
Pull the string -> pci_dev lookup stuff into a helper function. No functional change.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201103051512.919333-1-oohall@gmail.com
arch/powerpc/kernel/eeh.c

index 813713c9120c0f85f0c9599f55647f66dbb668db..f9182ff57804fd1b0839aa7ea4d894d43800d41c 100644 (file)
@@ -1596,6 +1596,35 @@ static int proc_eeh_show(struct seq_file *m, void *v)
 }
 
 #ifdef CONFIG_DEBUG_FS
+
+
+static struct pci_dev *eeh_debug_lookup_pdev(struct file *filp,
+                                            const char __user *user_buf,
+                                            size_t count, loff_t *ppos)
+{
+       uint32_t domain, bus, dev, fn;
+       struct pci_dev *pdev;
+       char buf[20];
+       int ret;
+
+       memset(buf, 0, sizeof(buf));
+       ret = simple_write_to_buffer(buf, sizeof(buf)-1, ppos, user_buf, count);
+       if (!ret)
+               return ERR_PTR(-EFAULT);
+
+       ret = sscanf(buf, "%x:%x:%x.%x", &domain, &bus, &dev, &fn);
+       if (ret != 4) {
+               pr_err("%s: expected 4 args, got %d\n", __func__, ret);
+               return ERR_PTR(-EINVAL);
+       }
+
+       pdev = pci_get_domain_bus_and_slot(domain, bus, (dev << 3) | fn);
+       if (!pdev)
+               return ERR_PTR(-ENODEV);
+
+       return pdev;
+}
+
 static int eeh_enable_dbgfs_set(void *data, u64 val)
 {
        if (val)
@@ -1688,26 +1717,13 @@ static ssize_t eeh_dev_check_write(struct file *filp,
                                const char __user *user_buf,
                                size_t count, loff_t *ppos)
 {
-       uint32_t domain, bus, dev, fn;
        struct pci_dev *pdev;
        struct eeh_dev *edev;
-       char buf[20];
        int ret;
 
-       memset(buf, 0, sizeof(buf));
-       ret = simple_write_to_buffer(buf, sizeof(buf)-1, ppos, user_buf, count);
-       if (!ret)
-               return -EFAULT;
-
-       ret = sscanf(buf, "%x:%x:%x.%x", &domain, &bus, &dev, &fn);
-       if (ret != 4) {
-               pr_err("%s: expected 4 args, got %d\n", __func__, ret);
-               return -EINVAL;
-       }
-
-       pdev = pci_get_domain_bus_and_slot(domain, bus, (dev << 3) | fn);
-       if (!pdev)
-               return -ENODEV;
+       pdev = eeh_debug_lookup_pdev(filp, user_buf, count, ppos);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
        edev = pci_dev_to_eeh_dev(pdev);
        if (!edev) {
@@ -1717,8 +1733,8 @@ static ssize_t eeh_dev_check_write(struct file *filp,
        }
 
        ret = eeh_dev_check_failure(edev);
-       pci_info(pdev, "eeh_dev_check_failure(%04x:%02x:%02x.%01x) = %d\n",
-                       domain, bus, dev, fn, ret);
+       pci_info(pdev, "eeh_dev_check_failure(%s) = %d\n",
+                       pci_name(pdev), ret);
 
        pci_dev_put(pdev);
 
@@ -1829,25 +1845,12 @@ static ssize_t eeh_dev_break_write(struct file *filp,
                                const char __user *user_buf,
                                size_t count, loff_t *ppos)
 {
-       uint32_t domain, bus, dev, fn;
        struct pci_dev *pdev;
-       char buf[20];
        int ret;
 
-       memset(buf, 0, sizeof(buf));
-       ret = simple_write_to_buffer(buf, sizeof(buf)-1, ppos, user_buf, count);
-       if (!ret)
-               return -EFAULT;
-
-       ret = sscanf(buf, "%x:%x:%x.%x", &domain, &bus, &dev, &fn);
-       if (ret != 4) {
-               pr_err("%s: expected 4 args, got %d\n", __func__, ret);
-               return -EINVAL;
-       }
-
-       pdev = pci_get_domain_bus_and_slot(domain, bus, (dev << 3) | fn);
-       if (!pdev)
-               return -ENODEV;
+       pdev = eeh_debug_lookup_pdev(filp, user_buf, count, ppos);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
        ret = eeh_debugfs_break_device(pdev);
        pci_dev_put(pdev);