fujitsu-laptop registers two ACPI drivers. Whenever an ACPI device with a matching identifier is found by the ACPI bus, a new instance of the relevant driver is bound to that ACPI device. However, both ACPI drivers registered by fujitsu-laptop access module-wide global data structures, assuming neither ACPI driver will ever be instantiated more than once. While there are currently no indications of such issues happening in the wild, it is theoretically possible for multiple FUJ02B1/FUJ02E3 ACPI devices to be present in the firmware, which would cause two instances of the relevant driver to simultaneously access module-wide globals without any locking in place. Also, modern Fujitsu laptops ship without the FUJ02B1 ACPI device present in firmware, causing memory to be needlessly allocated inside fujitsu_init(). To future-proof the module and lay the groundwork for separating the two aforementioned ACPI drivers into separate modules, move away from module-wide global data structures by using device-specific data instead. This patch series was tested on a Lifebook S7020 and a Lifebook E744. I found it challenging to adhere to the "one logical change per patch" rule while touching code commonly used by almost all other module code. If the changes introduced are illegible, I will be happy to further explain and/or improve the series. Please also note that while the diff stats for this series may seem daunting at first, using --color-words should hopefully make reviewing much more manageable. drivers/platform/x86/fujitsu-laptop.c | 460 +++++++++++++++++----------------- 1 file changed, 236 insertions(+), 224 deletions(-) -- 2.12.2