kern/163268: [acpi_hp] [patch] fix driver detach in absence of CMI

John Baldwin jhb at freebsd.org
Fri Apr 12 16:18:27 UTC 2013


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 at gmail.com>
> To: bug-followup at FreeBSD.org, yuri.pankov at 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


More information about the freebsd-acpi mailing list