PATCH: hwmon-abituguru-timeout-fixes.patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

Sorry for the late answer.

> This patch contains 2 sets of fixes for the abituguru:
>  1) Much improved timeout handling, drasticly reducing the amount of
>     timeout errors on some motherboards
>  2) Fix the exit paths in the bank1 sensor type detect code to always
>     restore the original settings even on an error. Without this our
>     special test settings could remain seriously confusing the system
>     BIOS's setup menu.

In theory this should be two separate patches...

> Both are very much related and are must haves, to avoid messing up the
> uguru CMOS settings.
> 
> Since this patch fixes the CMOS settings corruption* reported to the
> list earlier by Sunil Kumar, it should be send upstream ASAP (to GKH who
> is replacing Linus while Linus is away for a couple of weeks).

The problem is that your patch doesn't apply to my tree. What is it
supposed to apply to?

khali at arrakis:~/src/linux-2.6.18-rc4> quilt push
Applying patch hwmon-abituguru-timeout-fixes.patch
patching file drivers/hwmon/abituguru.c
Hunk #10 FAILED at 418.
Hunk #16 FAILED at 1257.
Hunk #17 succeeded at 1330 (offset 2 lines).
2 out of 17 hunks FAILED -- rejects in file drivers/hwmon/abituguru.c
Patch hwmon-abituguru-timeout-fixes.patch does not apply (enforce with -f)
khali at arrakis:~/src/linux-2.6.18-rc4>

Minor comments on the patch itself:

> @@ -226,6 +227,10 @@
>  		timeout--;
>  		if (timeout == 0)
>  			return -EBUSY;
> +		/* sleep a bit before our last few tries, see the comment on
> +		   this where ABIT_UGURU_WAIT_TIMEOUT_SLEEP is defined. */
> +		if (timeout <= ABIT_UGURU_WAIT_TIMEOUT_SLEEP)
> +			msleep(0);
>  	}
>  	return 0;
>  }

I couldn't find any other use of msleep(0) in the whole kernel tree.
While I see your point and agree it should work, someone may complain
that it depends too much on the value of HZ.

> @@ -331,7 +338,8 @@
>  	/* And read the data */
>  	for (i = 0; i < count; i++) {
>  		if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
> -			ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for "
> +			ABIT_UGURU_DEBUG(retries? 1:3,

Broken coding style.

> +				"timeout exceeded waiting for "
>  				"read state (bank: %d, sensor: %d)\n",
>  				(int)bank_addr, (int)sensor_addr);
>  			break;

> @@ -403,7 +418,7 @@
>  				   u8 sensor_addr)
>  {
>  	u8 val, buf[3];
> -	int ret = ABIT_UGURU_NC;
> +	int i, ret = -ENODEV; /* error is the most commen used retval :| */

Typo: common. Nothing to be worried about, BTW, it's common, although
suboptimal, to initialize the returned variable to an error value in
probe functions.

>  		if (buf[0] & ABIT_UGURU_TEMP_HIGH_ALARM_FLAG) {
> -			ret = ABIT_UGURU_TEMP_SENSOR;
>  			ABIT_UGURU_DEBUG(2, "  found temp sensor\n");
> +			ret = ABIT_UGURU_TEMP_SENSOR;

I see no benefit in swapping these lines.

> @@ -1303,7 +1328,7 @@
>  		data->update_timeouts = 0;
>  LEAVE_UPDATE:
>  		/* handle timeout condition */
> -		if (err == -EBUSY) {
> +		if (!success && (err == -EBUSY || err >= 0)) {
>  			/* No overflow please */
>  			if (data->update_timeouts < 255u)
>  				data->update_timeouts++;
> 

Can you explain the "err >= 0" part? I don't get it.

Also, unrelated to this patch, I wonder why you need a separate
"success" flag, can't you use !err or err < 0 instead?

Please provide a new patch, that will apply properly to 2.6.18-rc4,
rc4-git1 or rc4-mm2.

Thanks,
-- 
Jean Delvare




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux