2.6.4-rc2-mm1: IPMI_SMB doesnt compile

Davis, Todd C todd.c.davis at intel.com
Wed Mar 10 20:50:26 CET 2004


The problem that is being addressed here is the need to avoid process
switching when sending IPMI messages over the SMBus/I2C bus. When the
kernel has panic'ed or is shutting down bus transactions need to
complete so the i2c bus drivers need to spin rather than calling
schedule. 

The i2c_spin_delay is a flag that supports a revised inline function
i2c_delay() that was in i2c.h at one time.

static inline void i2c_delay(signed long timeout)
 {
	if( i2c_spin_delay ) {
		int i;
		for( i=0 ; i<100 ; i++ )
			udelay(timeout*(1000000/HZ/100));
	} else {
		set_current_state(TASK_INTERRUPTIBLE);
		schedule_timeout(timeout);
	}
 }

Without this change i2c bus drivers will hang panic threads and short
circuit (fail) bus transactions during shutdown due to a pending signal.

I don't care how the exports are handled. It is the functionality that
is important here.

Todd C. Davis
These are my opinions and absolutely not official opinions of Intel
Corp.
 
-----Original Message-----
From: Corey Minyard [mailto:minyard at acm.org] 
Sent: Wednesday, March 10, 2004 2:12 PM
To: Adrian Bunk
Cc: Andrew Morton; linux-kernel at vger.kernel.org; Davis, Todd C;
greg at kroah.com; sensors at stimpy.netroedge.com; Simon G. Vogl
Subject: Re: 2.6.4-rc2-mm1: IPMI_SMB doesnt compile

Adrian Bunk wrote:

>The patch to i2c-core.c is strange:
>
>
>  
>
>>--- linux-v31/drivers/i2c/i2c-core.c	2004-02-19 19:31:07.000000000
-0600
>>+++ linux/drivers/i2c/i2c-core.c	2004-03-10 09:48:08.000000000
-0600
>>@@ -1256,6 +1256,12 @@
>> 	return (func & adap_func) == func;
>> }
>> 
>>+int i2c_spin_delay;
>>+void i2c_set_spin_delay(int val)
>>+{
>>+	i2c_spin_delay = val;
>>+}
>>+
>> EXPORT_SYMBOL(i2c_add_adapter);
>> EXPORT_SYMBOL(i2c_del_adapter);
>> EXPORT_SYMBOL(i2c_add_driver);
>>@@ -1292,6 +1298,8 @@
>> 
>> EXPORT_SYMBOL(i2c_get_functionality);
>> EXPORT_SYMBOL(i2c_check_functionality);
>>+EXPORT_SYMBOL(i2c_set_spin_delay);
>>+EXPORT_SYMBOL(i2c_spin_delay);
>> 
>> MODULE_AUTHOR("Simon G. Vogl <simon at tk.uni-linz.ac.at>");
>> MODULE_DESCRIPTION("I2C-Bus main module");
>>...
>>    
>>
>
>
>You can either add get/set functions and export them (more an OO 
>paradigm) or export the variable.
>
>If you export the variable, it's quite useless to add such a set 
>function since everyone can set the variable directly.
>
I think the point is that lower-level drivers need to use this variable 
(because of its use in the include file), but it's better to set it with

a function from external code.

Todd, am I correct here?

-Corey




More information about the lm-sensors mailing list