From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Rakib Mullick <rakib.mullick@gmail.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
linux-acpi <linux-acpi@vger.kernel.org>,
akpm@linux-foundation.org, ming Lin <ming.m.lin@intel.com>,
len.brown@intel.com, srivatsa.bhat@linux.vnet.ibm.com,
Len Brown <lenb@kernel.org>,
Linux PM list <linux-pm@vger.kernel.org>
Subject: Re: [PATCH -v2] acpi: Fix possible recursive locking in hwregs.c
Date: Sun, 6 Nov 2011 22:13:02 +0100 [thread overview]
Message-ID: <201111062213.02844.rjw@sisk.pl> (raw)
In-Reply-To: <1320592697.7439.3.camel@localhost.localdomain>
On Sunday, November 06, 2011, Rakib Mullick wrote:
> Calling pm-suspend might trigger a recursive lock in it's code path. In function acpi_hw_clear_acpi_status, acpi_os_acquire_lock holds the lock acpi_gbl_hardware_lock before calling acpi_hw_register_write(), then without releasing acpi_gbl_hardware_lock, this function calls acpi_ev_walk_gpe_list, which tries to hold acpi_gbl_gpe_lock. Both acpi_gbl_hardware_lock and acpi_gbl_gpe_lock are at same lock-class and which might cause lock recursion deadlock.
>
> Following patch fixes this scenario by just releasing acpi_gbl_hardware_lock before calling acpi_ev_walk_gpe_list.
>
> Changes since v0(https://lkml.org/lkml/2011/9/21/355):
> - Fix changelog, thanks to Lin Ming.
>
> Changes since v1 (https://lkml.org/lkml/2011/11/3/89):
> - Update changelog and rename goto label, courtesy Srivatsa S. Bhat.
>
> Signed-off-by: Rakib Mullick <rakib.mullick@gmail.com>
> Cc: Lin Ming <ming.m.lin@intel.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Len Brown <len.brown@intel.com>
> Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
>
> diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c
> index 55accb7..cc70f3f 100644
> --- a/drivers/acpi/acpica/hwregs.c
> +++ b/drivers/acpi/acpica/hwregs.c
> @@ -269,16 +269,17 @@ acpi_status acpi_hw_clear_acpi_status(void)
>
> status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS,
> ACPI_BITMASK_ALL_FIXED_STATUS);
> - if (ACPI_FAILURE(status)) {
> - goto unlock_and_exit;
> - }
> +
> + acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
> +
> + if (ACPI_FAILURE(status))
> + goto exit;
>
> /* Clear the GPE Bits in all GPE registers in all GPE blocks */
>
> status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block, NULL);
>
> - unlock_and_exit:
> - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
> +exit:
> return_ACPI_STATUS(status);
> }
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
>
next prev parent reply other threads:[~2011-11-06 21:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-06 15:18 [PATCH -v2] acpi: Fix possible recursive locking in hwregs.c Rakib Mullick
2011-11-06 19:46 ` Srivatsa S. Bhat
2011-11-07 12:13 ` Rakib Mullick
2011-11-06 21:13 ` Rafael J. Wysocki [this message]
2011-11-07 1:10 ` Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201111062213.02844.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=akpm@linux-foundation.org \
--cc=len.brown@intel.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=ming.m.lin@intel.com \
--cc=rakib.mullick@gmail.com \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.