Skip site navigation (1)Skip section navigation (2)
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>