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

Commit 384bc8f0 authored by Len Brown's avatar Len Brown
Browse files

Pull bugzilla-5534 into test branch

parents e0749be9 37605a69
Loading
Loading
Loading
Loading
+1 −13
Original line number Original line Diff line number Diff line
@@ -342,20 +342,8 @@ static u32 acpi_ev_global_lock_handler(void *context)
	if (acquired) {
	if (acquired) {


		/* Got the lock, now wake all threads waiting for it */
		/* Got the lock, now wake all threads waiting for it */

		acpi_gbl_global_lock_acquired = TRUE;
		acpi_gbl_global_lock_acquired = TRUE;

		acpi_ev_global_lock_thread(context);
		/* Run the Global Lock thread which will signal all waiting threads */

		status =
		    acpi_os_execute(OSL_GLOBAL_LOCK_HANDLER,
				    acpi_ev_global_lock_thread, context);
		if (ACPI_FAILURE(status)) {
			ACPI_EXCEPTION((AE_INFO, status,
					"Could not queue Global Lock thread"));

			return (ACPI_INTERRUPT_NOT_HANDLED);
		}
	}
	}


	return (ACPI_INTERRUPT_HANDLED);
	return (ACPI_INTERRUPT_HANDLED);
+13 −21
Original line number Original line Diff line number Diff line
@@ -73,6 +73,7 @@ static unsigned int acpi_irq_irq;
static acpi_osd_handler acpi_irq_handler;
static acpi_osd_handler acpi_irq_handler;
static void *acpi_irq_context;
static void *acpi_irq_context;
static struct workqueue_struct *kacpid_wq;
static struct workqueue_struct *kacpid_wq;
static struct workqueue_struct *kacpi_notify_wq;


acpi_status acpi_os_initialize(void)
acpi_status acpi_os_initialize(void)
{
{
@@ -91,8 +92,9 @@ acpi_status acpi_os_initialize1(void)
		return AE_NULL_ENTRY;
		return AE_NULL_ENTRY;
	}
	}
	kacpid_wq = create_singlethread_workqueue("kacpid");
	kacpid_wq = create_singlethread_workqueue("kacpid");
	kacpi_notify_wq = create_singlethread_workqueue("kacpi_notify");
	BUG_ON(!kacpid_wq);
	BUG_ON(!kacpid_wq);

	BUG_ON(!kacpi_notify_wq);
	return AE_OK;
	return AE_OK;
}
}


@@ -104,6 +106,7 @@ acpi_status acpi_os_terminate(void)
	}
	}


	destroy_workqueue(kacpid_wq);
	destroy_workqueue(kacpid_wq);
	destroy_workqueue(kacpi_notify_wq);


	return AE_OK;
	return AE_OK;
}
}
@@ -566,10 +569,7 @@ void acpi_os_derive_pci_id(acpi_handle rhandle, /* upper bound */


static void acpi_os_execute_deferred(void *context)
static void acpi_os_execute_deferred(void *context)
{
{
	struct acpi_os_dpc *dpc = NULL;
	struct acpi_os_dpc *dpc = (struct acpi_os_dpc *)context;


	dpc = (struct acpi_os_dpc *)context;
	if (!dpc) {
	if (!dpc) {
		printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
		printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
		return;
		return;
@@ -604,14 +604,12 @@ acpi_status acpi_os_execute(acpi_execute_type type,
	struct acpi_os_dpc *dpc;
	struct acpi_os_dpc *dpc;
	struct work_struct *task;
	struct work_struct *task;


	ACPI_FUNCTION_TRACE("os_queue_for_execution");

	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
			  "Scheduling function [%p(%p)] for deferred execution.\n",
			  "Scheduling function [%p(%p)] for deferred execution.\n",
			  function, context));
			  function, context));


	if (!function)
	if (!function)
		return_ACPI_STATUS(AE_BAD_PARAMETER);
		return AE_BAD_PARAMETER;


	/*
	/*
	 * Allocate/initialize DPC structure.  Note that this memory will be
	 * Allocate/initialize DPC structure.  Note that this memory will be
@@ -624,26 +622,20 @@ acpi_status acpi_os_execute(acpi_execute_type type,
	 * from the same memory.
	 * from the same memory.
	 */
	 */


	dpc =
	dpc = kmalloc(sizeof(struct acpi_os_dpc) +
	    kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct),
			sizeof(struct work_struct), GFP_ATOMIC);
		    GFP_ATOMIC);
	if (!dpc)
	if (!dpc)
		return_ACPI_STATUS(AE_NO_MEMORY);
		return AE_NO_MEMORY;

	dpc->function = function;
	dpc->function = function;
	dpc->context = context;
	dpc->context = context;

	task = (void *)(dpc + 1);
	task = (void *)(dpc + 1);
	INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);
	INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);

	if (!queue_work((type == OSL_NOTIFY_HANDLER)?
	if (!queue_work(kacpid_wq, task)) {
			kacpi_notify_wq : kacpid_wq, task)) {
		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
				  "Call to queue_work() failed.\n"));
		kfree(dpc);
		status = AE_ERROR;
		status = AE_ERROR;
		kfree(dpc);
	}
	}

	return status;
	return_ACPI_STATUS(status);
}
}


EXPORT_SYMBOL(acpi_os_execute);
EXPORT_SYMBOL(acpi_os_execute);