Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6b52a9d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI: Fixes device power states array overflow
  ACPI, APEI, HEST, Detect duplicated hardware error source ID
  ACPI: Fix lockdep false positives in acpi_power_off()
parents 247dc220 7fb574a9
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -139,13 +139,23 @@ static int __init hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
{
	struct platform_device *ghes_dev;
	struct ghes_arr *ghes_arr = data;
	int rc;
	int rc, i;

	if (hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR)
		return 0;

	if (!((struct acpi_hest_generic *)hest_hdr)->enabled)
		return 0;
	for (i = 0; i < ghes_arr->count; i++) {
		struct acpi_hest_header *hdr;
		ghes_dev = ghes_arr->ghes_devs[i];
		hdr = *(struct acpi_hest_header **)ghes_dev->dev.platform_data;
		if (hdr->source_id == hest_hdr->source_id) {
			pr_warning(FW_WARN HEST_PFX "Duplicated hardware error source ID: %d.\n",
				   hdr->source_id);
			return -EIO;
		}
	}
	ghes_dev = platform_device_alloc("GHES", hest_hdr->source_id);
	if (!ghes_dev)
		return -ENOMEM;
+0 −17
Original line number Diff line number Diff line
@@ -1332,23 +1332,6 @@ int acpi_resources_are_enforced(void)
}
EXPORT_SYMBOL(acpi_resources_are_enforced);

/*
 * Create and initialize a spinlock.
 */
acpi_status
acpi_os_create_lock(acpi_spinlock *out_handle)
{
	spinlock_t *lock;

	lock = ACPI_ALLOCATE(sizeof(spinlock_t));
	if (!lock)
		return AE_NO_MEMORY;
	spin_lock_init(lock);
	*out_handle = lock;

	return AE_OK;
}

/*
 * Deallocate the memory for a spinlock.
 */
+1 −1
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ struct acpi_device_power_state {
struct acpi_device_power {
	int state;		/* Current state */
	struct acpi_device_power_flags flags;
	struct acpi_device_power_state states[4];	/* Power states (D0-D3) */
	struct acpi_device_power_state states[ACPI_D_STATE_COUNT];	/* Power states (D0-D3Cold) */
};

/* Performance Management */
+3 −0
Original line number Diff line number Diff line
@@ -98,8 +98,11 @@ acpi_os_table_override(struct acpi_table_header *existing_table,
/*
 * Spinlock primitives
 */

#ifndef acpi_os_create_lock
acpi_status
acpi_os_create_lock(acpi_spinlock *out_handle);
#endif

void acpi_os_delete_lock(acpi_spinlock handle);

+18 −0
Original line number Diff line number Diff line
@@ -159,6 +159,24 @@ static inline void *acpi_os_acquire_object(acpi_cache_t * cache)
	} while (0)
#endif

/*
 * When lockdep is enabled, the spin_lock_init() macro stringifies it's
 * argument and uses that as a name for the lock in debugging.
 * By executing spin_lock_init() in a macro the key changes from "lock" for
 * all locks to the name of the argument of acpi_os_create_lock(), which
 * prevents lockdep from reporting false positives for ACPICA locks.
 */
#define acpi_os_create_lock(__handle)				\
({								\
	spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock));	\
								\
	if (lock) {						\
		*(__handle) = lock;				\
		spin_lock_init(*(__handle));			\
	}							\
	lock ? AE_OK : AE_NO_MEMORY;				\
})

#endif /* __KERNEL__ */

#endif /* __ACLINUX_H__ */