diff options
author | Prarit Bhargava <prarit@redhat.com> | 2017-11-30 15:05:59 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-12-12 19:11:33 -0500 |
commit | 0f27cff8597d86f881ea8274b49b63b678c14a3c (patch) | |
tree | 88b38b54a99321462d34f80e33e484c23b28f079 | |
parent | 50c4c4e268a2d7a3e58ebb698ac74da0de40ae36 (diff) |
ACPI: sysfs: Make ACPI GPE mask kernel parameter cover all GPEs
The acpi_mask_gpe= kernel parameter documentation states that the range
of mask is 128 GPEs (0x00 to 0x7F). The acpi_masked_gpes mask is a u64 so
only 64 GPEs (0x00 to 0x3F) can really be masked.
Use a bitmap of size 0xFF instead of a u64 for the GPE mask so 256
GPEs can be masked.
Fixes: 9c4aa1eecb48 (ACPI / sysfs: Provide quirk mechanism to prevent GPE flooding)
Signed-off-by: Prarit Bharava <prarit@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | Documentation/admin-guide/kernel-parameters.txt | 1 | ||||
-rw-r--r-- | drivers/acpi/sysfs.c | 26 |
2 files changed, 8 insertions, 19 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6571fbfdb2a1..89ba74761180 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt | |||
@@ -114,7 +114,6 @@ | |||
114 | This facility can be used to prevent such uncontrolled | 114 | This facility can be used to prevent such uncontrolled |
115 | GPE floodings. | 115 | GPE floodings. |
116 | Format: <int> | 116 | Format: <int> |
117 | Support masking of GPEs numbered from 0x00 to 0x7f. | ||
118 | 117 | ||
119 | acpi_no_auto_serialize [HW,ACPI] | 118 | acpi_no_auto_serialize [HW,ACPI] |
120 | Disable auto-serialization of AML methods | 119 | Disable auto-serialization of AML methods |
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index 06a150bb35bf..4fc59c3bc673 100644 --- a/drivers/acpi/sysfs.c +++ b/drivers/acpi/sysfs.c | |||
@@ -816,14 +816,8 @@ end: | |||
816 | * interface: | 816 | * interface: |
817 | * echo unmask > /sys/firmware/acpi/interrupts/gpe00 | 817 | * echo unmask > /sys/firmware/acpi/interrupts/gpe00 |
818 | */ | 818 | */ |
819 | 819 | #define ACPI_MASKABLE_GPE_MAX 0xFF | |
820 | /* | 820 | static DECLARE_BITMAP(acpi_masked_gpes_map, ACPI_MASKABLE_GPE_MAX) __initdata; |
821 | * Currently, the GPE flooding prevention only supports to mask the GPEs | ||
822 | * numbered from 00 to 7f. | ||
823 | */ | ||
824 | #define ACPI_MASKABLE_GPE_MAX 0x80 | ||
825 | |||
826 | static u64 __initdata acpi_masked_gpes; | ||
827 | 821 | ||
828 | static int __init acpi_gpe_set_masked_gpes(char *val) | 822 | static int __init acpi_gpe_set_masked_gpes(char *val) |
829 | { | 823 | { |
@@ -831,7 +825,7 @@ static int __init acpi_gpe_set_masked_gpes(char *val) | |||
831 | 825 | ||
832 | if (kstrtou8(val, 0, &gpe) || gpe > ACPI_MASKABLE_GPE_MAX) | 826 | if (kstrtou8(val, 0, &gpe) || gpe > ACPI_MASKABLE_GPE_MAX) |
833 | return -EINVAL; | 827 | return -EINVAL; |
834 | acpi_masked_gpes |= ((u64)1<<gpe); | 828 | set_bit(gpe, acpi_masked_gpes_map); |
835 | 829 | ||
836 | return 1; | 830 | return 1; |
837 | } | 831 | } |
@@ -843,15 +837,11 @@ void __init acpi_gpe_apply_masked_gpes(void) | |||
843 | acpi_status status; | 837 | acpi_status status; |
844 | u8 gpe; | 838 | u8 gpe; |
845 | 839 | ||
846 | for (gpe = 0; | 840 | for_each_set_bit(gpe, acpi_masked_gpes_map, ACPI_MASKABLE_GPE_MAX) { |
847 | gpe < min_t(u8, ACPI_MASKABLE_GPE_MAX, acpi_current_gpe_count); | 841 | status = acpi_get_gpe_device(gpe, &handle); |
848 | gpe++) { | 842 | if (ACPI_SUCCESS(status)) { |
849 | if (acpi_masked_gpes & ((u64)1<<gpe)) { | 843 | pr_info("Masking GPE 0x%x.\n", gpe); |
850 | status = acpi_get_gpe_device(gpe, &handle); | 844 | (void)acpi_mask_gpe(handle, gpe, TRUE); |
851 | if (ACPI_SUCCESS(status)) { | ||
852 | pr_info("Masking GPE 0x%x.\n", gpe); | ||
853 | (void)acpi_mask_gpe(handle, gpe, TRUE); | ||
854 | } | ||
855 | } | 845 | } |
856 | } | 846 | } |
857 | } | 847 | } |