s390/pci: debug device states
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 16 Apr 2013 12:11:14 +0000 (14:11 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 17 Apr 2013 12:07:35 +0000 (14:07 +0200)
Use the debugfs to keep track of a pci function's status changes.

Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/pci_debug.h
arch/s390/pci/pci.c
arch/s390/pci/pci_clp.c
arch/s390/pci/pci_debug.c
drivers/pci/hotplug/s390_pci_hpc.c

index 6bbec42..1ca5d10 100644 (file)
@@ -7,14 +7,11 @@ extern debug_info_t *pci_debug_msg_id;
 extern debug_info_t *pci_debug_err_id;
 
 #ifdef CONFIG_PCI_DEBUG
-#define zpci_dbg(fmt, args...)                                                 \
-       do {                                                                    \
-               if (pci_debug_msg_id->level >= 2)                               \
-                       debug_sprintf_event(pci_debug_msg_id, 2, fmt , ## args);\
-       } while (0)
+#define zpci_dbg(imp, fmt, args...)                            \
+       debug_sprintf_event(pci_debug_msg_id, imp, fmt, ##args)
 
 #else /* !CONFIG_PCI_DEBUG */
-#define zpci_dbg(fmt, args...) do { } while (0)
+#define zpci_dbg(imp, fmt, args...) do { } while (0)
 #endif
 
 #define zpci_err(text...)                                                      \
index fddf847..20823f0 100644 (file)
@@ -99,9 +99,6 @@ static int __read_mostly aisb_max;
 static struct kmem_cache *zdev_irq_cache;
 static struct kmem_cache *zdev_fmb_cache;
 
-debug_info_t *pci_debug_msg_id;
-debug_info_t *pci_debug_err_id;
-
 static inline int irq_to_msi_nr(unsigned int irq)
 {
        return irq & ZPCI_MSI_MASK;
index f339fe2..bd34359 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/err.h>
 #include <linux/delay.h>
 #include <linux/pci.h>
+#include <asm/pci_debug.h>
 #include <asm/pci_clp.h>
 
 /*
@@ -144,6 +145,7 @@ int clp_add_pci_device(u32 fid, u32 fh, int configured)
        struct zpci_dev *zdev;
        int rc;
 
+       zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, configured);
        zdev = zpci_alloc_device();
        if (IS_ERR(zdev))
                return PTR_ERR(zdev);
@@ -204,8 +206,8 @@ static int clp_set_pci_fn(u32 *fh, u8 nr_dma_as, u8 command)
        if (!rc && rrb->response.hdr.rsp == CLP_RC_OK)
                *fh = rrb->response.fh;
        else {
-               pr_err("Set PCI FN failed with response: %x  cc: %d\n",
-                       rrb->response.hdr.rsp, rc);
+               zpci_dbg(0, "SPF fh:%x, cc:%d, resp:%x\n", *fh, rc,
+                        rrb->response.hdr.rsp);
                rc = -EIO;
        }
        clp_free_block(rrb);
@@ -221,6 +223,8 @@ int clp_enable_fh(struct zpci_dev *zdev, u8 nr_dma_as)
        if (!rc)
                /* Success -> store enabled handle in zdev */
                zdev->fh = fh;
+
+       zpci_dbg(3, "ena fid:%x, fh:%x, rc:%d\n", zdev->fid, zdev->fh, rc);
        return rc;
 }
 
@@ -237,9 +241,8 @@ int clp_disable_fh(struct zpci_dev *zdev)
        if (!rc)
                /* Success -> store disabled handle in zdev */
                zdev->fh = fh;
-       else
-               dev_err(&zdev->pdev->dev,
-                       "Failed to disable fn handle: 0x%x\n", fh);
+
+       zpci_dbg(3, "dis fid:%x, fh:%x, rc:%d\n", zdev->fid, zdev->fh, rc);
        return rc;
 }
 
index a5d07bc..771b823 100644 (file)
 #include <linux/kernel.h>
 #include <linux/seq_file.h>
 #include <linux/debugfs.h>
+#include <linux/export.h>
 #include <linux/pci.h>
 #include <asm/debug.h>
 
 #include <asm/pci_dma.h>
 
 static struct dentry *debugfs_root;
+debug_info_t *pci_debug_msg_id;
+EXPORT_SYMBOL_GPL(pci_debug_msg_id);
+debug_info_t *pci_debug_err_id;
+EXPORT_SYMBOL_GPL(pci_debug_err_id);
 
 static char *pci_perf_names[] = {
        /* hardware counters */
@@ -168,7 +173,6 @@ int __init zpci_debug_init(void)
                return -EINVAL;
        debug_register_view(pci_debug_msg_id, &debug_sprintf_view);
        debug_set_level(pci_debug_msg_id, 3);
-       zpci_dbg("Debug view initialized\n");
 
        /* error log */
        pci_debug_err_id = debug_register("pci_error", 2, 1, 16);
@@ -176,7 +180,6 @@ int __init zpci_debug_init(void)
                return -EINVAL;
        debug_register_view(pci_debug_err_id, &debug_hex_ascii_view);
        debug_set_level(pci_debug_err_id, 6);
-       zpci_err("Debug view initialized\n");
 
        debugfs_root = debugfs_create_dir("pci", NULL);
        return 0;
index 7db249a..6053e72 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/pci.h>
 #include <linux/pci_hotplug.h>
 #include <linux/init.h>
+#include <asm/pci_debug.h>
 #include <asm/sclp.h>
 
 #define SLOT_NAME_SIZE 10
@@ -49,6 +50,7 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)
                return -EIO;
 
        rc = sclp_pci_configure(slot->zdev->fid);
+       zpci_dbg(3, "conf fid:%x, rc:%d\n", slot->zdev->fid, rc);
        if (!rc) {
                slot->zdev->state = ZPCI_FN_STATE_CONFIGURED;
                /* automatically scan the device after is was configured */
@@ -70,6 +72,7 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
         *       or do we need to trigger that here?
         */
        rc = sclp_pci_deconfigure(slot->zdev->fid);
+       zpci_dbg(3, "deconf fid:%x, rc:%d\n", slot->zdev->fid, rc);
        if (!rc) {
                /* Fixme: better call List-PCI to find the disabled FH
                   for the FID since the FH should be opaque... */