Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branches 'd3cold', 'bugzilla-37412' and 'bugzilla-38152' into release

Len Brown 7fb574a9 b4a03b9a

+32 -18
+11 -1
drivers/acpi/apei/hest.c
··· 139 139 { 140 140 struct platform_device *ghes_dev; 141 141 struct ghes_arr *ghes_arr = data; 142 - int rc; 142 + int rc, i; 143 143 144 144 if (hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR) 145 145 return 0; 146 146 147 147 if (!((struct acpi_hest_generic *)hest_hdr)->enabled) 148 148 return 0; 149 + for (i = 0; i < ghes_arr->count; i++) { 150 + struct acpi_hest_header *hdr; 151 + ghes_dev = ghes_arr->ghes_devs[i]; 152 + hdr = *(struct acpi_hest_header **)ghes_dev->dev.platform_data; 153 + if (hdr->source_id == hest_hdr->source_id) { 154 + pr_warning(FW_WARN HEST_PFX "Duplicated hardware error source ID: %d.\n", 155 + hdr->source_id); 156 + return -EIO; 157 + } 158 + } 149 159 ghes_dev = platform_device_alloc("GHES", hest_hdr->source_id); 150 160 if (!ghes_dev) 151 161 return -ENOMEM;
-17
drivers/acpi/osl.c
··· 1333 1333 EXPORT_SYMBOL(acpi_resources_are_enforced); 1334 1334 1335 1335 /* 1336 - * Create and initialize a spinlock. 1337 - */ 1338 - acpi_status 1339 - acpi_os_create_lock(acpi_spinlock *out_handle) 1340 - { 1341 - spinlock_t *lock; 1342 - 1343 - lock = ACPI_ALLOCATE(sizeof(spinlock_t)); 1344 - if (!lock) 1345 - return AE_NO_MEMORY; 1346 - spin_lock_init(lock); 1347 - *out_handle = lock; 1348 - 1349 - return AE_OK; 1350 - } 1351 - 1352 - /* 1353 1336 * Deallocate the memory for a spinlock. 1354 1337 */ 1355 1338 void acpi_os_delete_lock(acpi_spinlock handle)
+3
include/acpi/acpiosxf.h
··· 98 98 /* 99 99 * Spinlock primitives 100 100 */ 101 + 102 + #ifndef acpi_os_create_lock 101 103 acpi_status 102 104 acpi_os_create_lock(acpi_spinlock *out_handle); 105 + #endif 103 106 104 107 void acpi_os_delete_lock(acpi_spinlock handle); 105 108
+18
include/acpi/platform/aclinux.h
··· 159 159 } while (0) 160 160 #endif 161 161 162 + /* 163 + * When lockdep is enabled, the spin_lock_init() macro stringifies it's 164 + * argument and uses that as a name for the lock in debugging. 165 + * By executing spin_lock_init() in a macro the key changes from "lock" for 166 + * all locks to the name of the argument of acpi_os_create_lock(), which 167 + * prevents lockdep from reporting false positives for ACPICA locks. 168 + */ 169 + #define acpi_os_create_lock(__handle) \ 170 + ({ \ 171 + spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ 172 + \ 173 + if (lock) { \ 174 + *(__handle) = lock; \ 175 + spin_lock_init(*(__handle)); \ 176 + } \ 177 + lock ? AE_OK : AE_NO_MEMORY; \ 178 + }) 179 + 162 180 #endif /* __KERNEL__ */ 163 181 164 182 #endif /* __ACLINUX_H__ */