diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-29 14:50:17 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-29 14:50:17 -0400 |
commit | 9c5891bd4342349a200676d33f742dd1b864822c (patch) | |
tree | b14c1698f2d8ce5276e1befd562f6398a46b48b9 /arch/powerpc/kernel/eeh_sysfs.c | |
parent | ecda040ff3724f021a96491ecee88d48e968c153 (diff) | |
parent | 5ae90d8e467e625e447000cb4335c4db973b1095 (diff) |
Merge 3.11-rc3 into char-misc-next.
This resolves a merge issue with:
drivers/misc/mei/init.c
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/powerpc/kernel/eeh_sysfs.c')
-rw-r--r-- | arch/powerpc/kernel/eeh_sysfs.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/eeh_sysfs.c b/arch/powerpc/kernel/eeh_sysfs.c index e7ae3484918c..5d753d4f2c75 100644 --- a/arch/powerpc/kernel/eeh_sysfs.c +++ b/arch/powerpc/kernel/eeh_sysfs.c | |||
@@ -56,19 +56,40 @@ EEH_SHOW_ATTR(eeh_pe_config_addr, pe_config_addr, "0x%x"); | |||
56 | 56 | ||
57 | void eeh_sysfs_add_device(struct pci_dev *pdev) | 57 | void eeh_sysfs_add_device(struct pci_dev *pdev) |
58 | { | 58 | { |
59 | struct eeh_dev *edev = pci_dev_to_eeh_dev(pdev); | ||
59 | int rc=0; | 60 | int rc=0; |
60 | 61 | ||
62 | if (edev && (edev->mode & EEH_DEV_SYSFS)) | ||
63 | return; | ||
64 | |||
61 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode); | 65 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode); |
62 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr); | 66 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr); |
63 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); | 67 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); |
64 | 68 | ||
65 | if (rc) | 69 | if (rc) |
66 | printk(KERN_WARNING "EEH: Unable to create sysfs entries\n"); | 70 | printk(KERN_WARNING "EEH: Unable to create sysfs entries\n"); |
71 | else if (edev) | ||
72 | edev->mode |= EEH_DEV_SYSFS; | ||
67 | } | 73 | } |
68 | 74 | ||
69 | void eeh_sysfs_remove_device(struct pci_dev *pdev) | 75 | void eeh_sysfs_remove_device(struct pci_dev *pdev) |
70 | { | 76 | { |
77 | struct eeh_dev *edev = pci_dev_to_eeh_dev(pdev); | ||
78 | |||
79 | /* | ||
80 | * The parent directory might have been removed. We needn't | ||
81 | * continue for that case. | ||
82 | */ | ||
83 | if (!pdev->dev.kobj.sd) { | ||
84 | if (edev) | ||
85 | edev->mode &= ~EEH_DEV_SYSFS; | ||
86 | return; | ||
87 | } | ||
88 | |||
71 | device_remove_file(&pdev->dev, &dev_attr_eeh_mode); | 89 | device_remove_file(&pdev->dev, &dev_attr_eeh_mode); |
72 | device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr); | 90 | device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr); |
73 | device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); | 91 | device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); |
92 | |||
93 | if (edev) | ||
94 | edev->mode &= ~EEH_DEV_SYSFS; | ||
74 | } | 95 | } |