All of lore.kernel.org
 help / color / mirror / Atom feed
From: Henrik Rydberg <rydberg@euromail.se>
To: guenter.roeck@ericsson.com
Cc: Jean Delvare <khali@linux-fr.org>,
	"lm-sensors@lm-sensors.org" <lm-sensors@lm-sensors.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a
Date: Wed, 10 Nov 2010 10:57:24 +0000	[thread overview]
Message-ID: <4CDA7A94.7070302@euromail.se> (raw)
In-Reply-To: <1289336024.22931.243.camel@groeck-laptop>


>>
>> mutex_destroy() is defined as a nop, so I guess the question is whether anything
>> could be holding the lock when entering a second init. There are no sysfs files
>> created at that point, so I would say no. The mutex could be put back with a
>> static initializer, if this is not satisfactory. The real reason to move it to
>> the smcreg struct was to force a rename of the mutex itself.
>>
> 
> Alternatively, you could move the mutex initialization to the beginning
> of applesmc_init_smcreg() and make it
> 	mutex_init(&smcreg.mutex);


Looking at this again, it seems there are two other problems as well. Firstly,
the cache memory is not freed after probe failure, my apologies. Secondly,
execution continues after a probe failure, and the initialization is retried. I
would like to push the latter problem to some other occasion, since the whole
platform logic should be rewritten for the new interface, anyways.

>>
>> With the empirical failure rate, it is extremely unlikely to get more than a
>> couple of failures in a row - information which in itself could be very useful.
> 
> You would have alternative options, though, with less noise. For
> example, something along the line of
> 
> 	for (...) {
> 		...
> 		if (!ret) {
> 			if (ms)
> 				pr_info("smcreg initialization took %d ms\n", ms);
> 			return 0;
> 		}
> 	...
> 	}
> 	pr_err("smcreg initialization failed\n");


Looks nice, have applied, but without the last line; the probe failure report
should be enough to deduce this.

>>
>> Changing the place of the mutex will ripple through all patches, so I will
>> resend from this one onwards. I suppose you have more comments on the following
>> patches?
> 
> Maybe it won't be that bad if you initialize it as I suggested above.


I tried several types of changes, and they all had some effect on later patches.
The patch below comprise the resulting changes to patch 4. Hope you like. In
addition, patch 5 and 7 needed one line of wiggling. I am resending all three.

@@ -217,7 +217,9 @@ static struct applesmc_registers {
 	unsigned int key_count;		/* number of SMC registers */
 	bool init_complete;		/* true when fully initialized */
 	struct applesmc_entry *cache;	/* cached key entries */
-} smcreg;
+} smcreg = {
+	.mutex = __MUTEX_INITIALIZER(smcreg.mutex),
+};

 static const int debug;
 static struct platform_device *pdev;
@@ -581,8 +583,6 @@ static int applesmc_init_smcreg_try(void)
 	if (s->init_complete)
 		return 0;

-	mutex_init(&s->mutex);
-
 	ret = read_register_count(&s->key_count);
 	if (ret)
 		return ret;
@@ -611,19 +611,25 @@ static int applesmc_init_smcreg(void)

 	for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) {
 		ret = applesmc_init_smcreg_try();
-		if (!ret)
+		if (!ret) {
+ 			if (ms)
+				pr_info("smcreg initialization took %d ms\n", ms);
 			return 0;
-		pr_warn("slow init, retrying\n");
+		}
 		msleep(INIT_WAIT_MSECS);
 	}

+ 	kfree(smcreg.cache);
+	smcreg.cache = NULL;
+
 	return ret;
 }

 static void applesmc_destroy_smcreg(void)
 {
 	kfree(smcreg.cache);
-	memset(&smcreg, 0, sizeof(smcreg));
+	smcreg.cache = NULL;
+	smcreg.init_complete = false;
 }

 /* Device model stuff */

Thanks,
Henrik

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

WARNING: multiple messages have this Message-ID (diff)
From: Henrik Rydberg <rydberg@euromail.se>
To: guenter.roeck@ericsson.com
Cc: Jean Delvare <khali@linux-fr.org>,
	"lm-sensors@lm-sensors.org" <lm-sensors@lm-sensors.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2)
Date: Wed, 10 Nov 2010 11:57:24 +0100	[thread overview]
Message-ID: <4CDA7A94.7070302@euromail.se> (raw)
In-Reply-To: <1289336024.22931.243.camel@groeck-laptop>


>>
>> mutex_destroy() is defined as a nop, so I guess the question is whether anything
>> could be holding the lock when entering a second init. There are no sysfs files
>> created at that point, so I would say no. The mutex could be put back with a
>> static initializer, if this is not satisfactory. The real reason to move it to
>> the smcreg struct was to force a rename of the mutex itself.
>>
> 
> Alternatively, you could move the mutex initialization to the beginning
> of applesmc_init_smcreg() and make it
> 	mutex_init(&smcreg.mutex);


Looking at this again, it seems there are two other problems as well. Firstly,
the cache memory is not freed after probe failure, my apologies. Secondly,
execution continues after a probe failure, and the initialization is retried. I
would like to push the latter problem to some other occasion, since the whole
platform logic should be rewritten for the new interface, anyways.

>>
>> With the empirical failure rate, it is extremely unlikely to get more than a
>> couple of failures in a row - information which in itself could be very useful.
> 
> You would have alternative options, though, with less noise. For
> example, something along the line of
> 
> 	for (...) {
> 		...
> 		if (!ret) {
> 			if (ms)
> 				pr_info("smcreg initialization took %d ms\n", ms);
> 			return 0;
> 		}
> 	...
> 	}
> 	pr_err("smcreg initialization failed\n");


Looks nice, have applied, but without the last line; the probe failure report
should be enough to deduce this.

>>
>> Changing the place of the mutex will ripple through all patches, so I will
>> resend from this one onwards. I suppose you have more comments on the following
>> patches?
> 
> Maybe it won't be that bad if you initialize it as I suggested above.


I tried several types of changes, and they all had some effect on later patches.
The patch below comprise the resulting changes to patch 4. Hope you like. In
addition, patch 5 and 7 needed one line of wiggling. I am resending all three.

@@ -217,7 +217,9 @@ static struct applesmc_registers {
 	unsigned int key_count;		/* number of SMC registers */
 	bool init_complete;		/* true when fully initialized */
 	struct applesmc_entry *cache;	/* cached key entries */
-} smcreg;
+} smcreg = {
+	.mutex = __MUTEX_INITIALIZER(smcreg.mutex),
+};

 static const int debug;
 static struct platform_device *pdev;
@@ -581,8 +583,6 @@ static int applesmc_init_smcreg_try(void)
 	if (s->init_complete)
 		return 0;

-	mutex_init(&s->mutex);
-
 	ret = read_register_count(&s->key_count);
 	if (ret)
 		return ret;
@@ -611,19 +611,25 @@ static int applesmc_init_smcreg(void)

 	for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) {
 		ret = applesmc_init_smcreg_try();
-		if (!ret)
+		if (!ret) {
+ 			if (ms)
+				pr_info("smcreg initialization took %d ms\n", ms);
 			return 0;
-		pr_warn("slow init, retrying\n");
+		}
 		msleep(INIT_WAIT_MSECS);
 	}

+ 	kfree(smcreg.cache);
+	smcreg.cache = NULL;
+
 	return ret;
 }

 static void applesmc_destroy_smcreg(void)
 {
 	kfree(smcreg.cache);
-	memset(&smcreg, 0, sizeof(smcreg));
+	smcreg.cache = NULL;
+	smcreg.init_complete = false;
 }

 /* Device model stuff */

Thanks,
Henrik

  reply	other threads:[~2010-11-10 10:57 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-09 15:15 [lm-sensors] [PATCH 00/11] hwmon: applesmc: Dynamic configuration Henrik Rydberg
2010-11-09 15:15 ` [PATCH 00/11] hwmon: applesmc: Dynamic configuration rewrite (rev2) Henrik Rydberg
2010-11-09 15:15 ` [lm-sensors] [PATCH 01/11] hwmon: applesmc: Add MacBookAir3, 1(3, Henrik Rydberg
2010-11-09 15:15   ` [PATCH 01/11] hwmon: applesmc: Add MacBookAir3,1(3,2) support Henrik Rydberg
2010-11-09 18:56   ` [lm-sensors] [PATCH 01/11] hwmon: applesmc: Add MacBookAir3, 1(3, Guenter Roeck
2010-11-09 18:56     ` [PATCH 01/11] hwmon: applesmc: Add MacBookAir3,1(3,2) support Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 02/11] hwmon: applesmc: Relax the severity of Henrik Rydberg
2010-11-09 15:15   ` [PATCH 02/11] hwmon: applesmc: Relax the severity of device init failure (rev2) Henrik Rydberg
2010-11-09 18:57   ` [lm-sensors] [PATCH 02/11] hwmon: applesmc: Relax the severity Guenter Roeck
2010-11-09 18:57     ` [PATCH 02/11] hwmon: applesmc: Relax the severity of device init failure (rev2) Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 03/11] drivers/hwmon/applesmc.c: Use pr_fmt and Henrik Rydberg
2010-11-09 15:15   ` [PATCH 03/11] drivers/hwmon/applesmc.c: Use pr_fmt and pr_<level> Henrik Rydberg
2010-11-09 18:57   ` [lm-sensors] [PATCH 03/11] drivers/hwmon/applesmc.c: Use pr_fmt Guenter Roeck
2010-11-09 18:57     ` [PATCH 03/11] drivers/hwmon/applesmc.c: Use pr_fmt and pr_<level> Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a register Henrik Rydberg
2010-11-09 15:15   ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Henrik Rydberg
2010-11-09 19:04   ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-09 19:04     ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Guenter Roeck
2010-11-09 19:32     ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Henrik Rydberg
2010-11-09 19:32       ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Henrik Rydberg
2010-11-09 20:53       ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-09 20:53         ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Guenter Roeck
2010-11-10 10:57         ` Henrik Rydberg [this message]
2010-11-10 10:57           ` Henrik Rydberg
2010-11-10 15:42           ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-10 15:42             ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Guenter Roeck
2010-11-10 17:14             ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Henrik Rydberg
2010-11-10 17:14               ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Henrik Rydberg
2010-11-10 17:57               ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-10 17:57                 ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Guenter Roeck
2010-11-09 22:15       ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-09 22:15         ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev2) Guenter Roeck
2010-11-10 10:58   ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a register Henrik Rydberg
2010-11-10 10:58     ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev3) Henrik Rydberg
2010-11-10 10:58     ` [lm-sensors] [PATCH 05/11] hwmon: applesmc: Dynamic creation of Henrik Rydberg
2010-11-10 10:58       ` [PATCH 05/11] hwmon: applesmc: Dynamic creation of temperature files (rev3) Henrik Rydberg
2010-11-10 18:07       ` [lm-sensors] [PATCH 05/11] hwmon: applesmc: Dynamic creation of Guenter Roeck
2010-11-10 18:07         ` [PATCH 05/11] hwmon: applesmc: Dynamic creation of temperature files (rev3) Guenter Roeck
2010-11-10 10:58     ` [lm-sensors] [PATCH 07/11] hwmon: applesmc: Extract all features Henrik Rydberg
2010-11-10 10:58       ` [PATCH 07/11] hwmon: applesmc: Extract all features generically (rev3) Henrik Rydberg
2010-11-10 18:08       ` [lm-sensors] [PATCH 07/11] hwmon: applesmc: Extract all Guenter Roeck
2010-11-10 18:08         ` [PATCH 07/11] hwmon: applesmc: Extract all features generically (rev3) Guenter Roeck
2010-11-10 18:05     ` [lm-sensors] [PATCH 04/11] hwmon: applesmc: Introduce a Guenter Roeck
2010-11-10 18:05       ` [PATCH 04/11] hwmon: applesmc: Introduce a register lookup table (rev3) Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 05/11] hwmon: applesmc: Dynamic creation of Henrik Rydberg
2010-11-09 15:15   ` [PATCH 05/11] hwmon: applesmc: Dynamic creation of temperature files (rev2) Henrik Rydberg
2010-11-09 15:15 ` [lm-sensors] [PATCH 06/11] hwmon: applesmc: Handle new temperature Henrik Rydberg
2010-11-09 15:15   ` [PATCH 06/11] hwmon: applesmc: Handle new temperature format (rev2) Henrik Rydberg
2010-11-10 18:07   ` [lm-sensors] [PATCH 06/11] hwmon: applesmc: Handle new Guenter Roeck
2010-11-10 18:07     ` [PATCH 06/11] hwmon: applesmc: Handle new temperature format (rev2) Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 07/11] hwmon: applesmc: Extract all features Henrik Rydberg
2010-11-09 15:15   ` [PATCH 07/11] hwmon: applesmc: Extract all features generically (rev2) Henrik Rydberg
2010-11-09 15:15 ` [lm-sensors] [PATCH 08/11] hwmon: applesmc: Dynamic creation of fan Henrik Rydberg
2010-11-09 15:15   ` [PATCH 08/11] hwmon: applesmc: Dynamic creation of fan files (rev2) Henrik Rydberg
2010-11-10 18:09   ` [lm-sensors] [PATCH 08/11] hwmon: applesmc: Dynamic creation of Guenter Roeck
2010-11-10 18:09     ` [PATCH 08/11] hwmon: applesmc: Dynamic creation of fan files (rev2) Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 09/11] hwmon: applesmc: Simplify feature sysfs Henrik Rydberg
2010-11-09 15:15   ` [PATCH 09/11] hwmon: applesmc: Simplify feature sysfs handling (rev2) Henrik Rydberg
2010-11-10 18:10   ` [lm-sensors] [PATCH 09/11] hwmon: applesmc: Simplify feature Guenter Roeck
2010-11-10 18:10     ` [PATCH 09/11] hwmon: applesmc: Simplify feature sysfs handling (rev2) Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 10/11] hwmon: applesmc: Silence driver Henrik Rydberg
2010-11-09 15:15   ` Henrik Rydberg
2010-11-10 18:10   ` [lm-sensors] " Guenter Roeck
2010-11-10 18:10     ` Guenter Roeck
2010-11-09 15:15 ` [lm-sensors] [PATCH 11/11] hwmon: applesmc: Update copyright Henrik Rydberg
2010-11-09 15:15   ` [PATCH 11/11] hwmon: applesmc: Update copyright information Henrik Rydberg
2010-11-10 18:10   ` [lm-sensors] [PATCH 11/11] hwmon: applesmc: Update copyright Guenter Roeck
2010-11-10 18:10     ` [PATCH 11/11] hwmon: applesmc: Update copyright information Guenter Roeck
2010-11-10 18:22     ` [lm-sensors] [PATCH 11/11] hwmon: applesmc: Update copyright Henrik Rydberg
2010-11-10 18:22       ` [PATCH 11/11] hwmon: applesmc: Update copyright information Henrik Rydberg

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=4CDA7A94.7070302@euromail.se \
    --to=rydberg@euromail.se \
    --cc=guenter.roeck@ericsson.com \
    --cc=khali@linux-fr.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lm-sensors@lm-sensors.org \
    /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.