Date: Fri, 12 Apr 2013 11:42:02 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-acpi@freebsd.org, hiren panchasara <hiren.panchasara@gmail.com> Subject: Re: kern/163268: [acpi_hp] [patch] fix driver detach in absence of CMI Message-ID: <201304121142.02419.jhb@freebsd.org> In-Reply-To: <201304081930.r38JU1Ih054443@freefall.freebsd.org> References: <201304081930.r38JU1Ih054443@freefall.freebsd.org>
index | next in thread | previous in thread | raw e-mail
On Monday, April 08, 2013 3:30:01 pm hiren panchasara wrote:
> The following reply was made to PR kern/163268; it has been noted by GNATS.
>
> From: hiren panchasara <hiren.panchasara@gmail.com>
> To: bug-followup@FreeBSD.org, yuri.pankov@gmail.com
> Cc:
> Subject: Re: kern/163268: [acpi_hp] [patch] fix driver detach in absence of
CMI
> Date: Mon, 8 Apr 2013 12:29:11 -0700
>
> I do not see any apparent problem in the proposed patch. Unfortunately
> I do not have an hp to play with.
>
> Can someone look at the patch and try or approve so that we can make
> progress on this?
The current patch would incorrectly remove the notification handler if it
failed with EBUSY. I'm compiling the following to see if it builds. I also
think it is a bit less invasive. I have no way to test it however:
Index: dev/acpi_support/acpi_hp.c
===================================================================
--- dev/acpi_support/acpi_hp.c (revision 248326)
+++ dev/acpi_support/acpi_hp.c (working copy)
@@ -574,28 +574,26 @@
static int
acpi_hp_detach(device_t dev)
{
- int ret;
+ struct acpi_hp_softc *sc;
ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
- struct acpi_hp_softc *sc = device_get_softc(dev);
- if (sc->has_cmi && sc->hpcmi_open_pid != 0) {
- ret = EBUSY;
- }
- else {
- if (sc->has_notify) {
- ACPI_WMI_REMOVE_EVENT_HANDLER(dev,
- ACPI_HP_WMI_EVENT_GUID);
- }
+ sc = device_get_softc(dev);
+ if (sc->has_cmi && sc->hpcmi_open_pid != 0)
+ return (EBUSY);
+
+ if (sc->has_notify)
+ ACPI_WMI_REMOVE_EVENT_HANDLER(dev, ACPI_HP_WMI_EVENT_GUID);
+
+ if (sc->has_cmi) {
if (sc->hpcmi_bufptr != -1) {
sbuf_delete(&sc->hpcmi_sbuf);
sc->hpcmi_bufptr = -1;
}
sc->hpcmi_open_pid = 0;
destroy_dev(sc->hpcmi_dev_t);
- ret = 0;
}
- return (ret);
+ return (0);
}
static int
--
John Baldwin
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304121142.02419.jhb>
