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>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304121142.02419.jhb>