Patches to make it compatible with kernel 2.3.27 and newer

* Improved monitoring of /proc directories
  Instead of doing:
         proc_bus_i2c->fill_inode = &monitor_bus_i2c;
         void monitor_bus_i2c(struct inode *inode, int fill)
         {
           if (fill)
             MOD_INC_USE_COUNT;
           else
             MOD_DEC_USE_COUNT;
         }
  you can now simply set:
         proc_bus_i2c->owner = THIS_MODULE;
  and this is just as good!
* An old 2.3 problem seemingly never was resolved yet: instead of using
  a *wait_queue directly, you have to use a wait_queue_head_t and
  initialize it properly:
         #if (LINUX_VERSION_CODE < 0x020301)
         static struct wait_queue *pcf_wait = NULL;
         #else
         static wait_queue_head_t pcf_wait;
         #endif

         #if (LINUX_VERSION_CODE >= 0x020301)
            init_waitqueue_head(&pcf_wait);
         #endif
  except for this, semantics remain the same (but using a plain
  wait_queue_head_t instead of a pointer to a wait_queue)
* I had to change the semantics of sensors_register_entry slightly,
  to make the monitoring of /proc/sys/dev/* files possible for kernels
  2.3.27 and newer. It now takes an additional parameter, which you
  can specify as THIS_MODULE.
* THIS_MODULE is only defined in kernels 2.3.13 and later; added
  it to compat.h and the compatibility section of mkpatch.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@640 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Frodo Looijaard committed 1999-11-30 20:48:43 +00:00
1 parent e3ff8f1660
commit 52b2ce8f52
18 files changed
+67 -24

No files matched your search

+2 -1
View File
@@ -295,7 +295,8 @@ static int adm1021_detect(struct i2c_adapter *adapter, int address,
if ((i = sensors_register_entry(new_client,
type_name,
data->type==adm1021?adm1021_dir_table_template:
adm1021_max_dir_table_template)) < 0) {
adm1021_max_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -443,7 +443,8 @@ static int adm9240_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,
type_name,
adm9240_dir_table_template)) < 0) {
adm9240_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -237,7 +237,8 @@ printk("bt869.o: probing address %d .\n",address);
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
bt869_dir_table_template)) < 0) {
bt869_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -237,7 +237,8 @@ int eeprom_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
eeprom_dir_table_template)) < 0) {
eeprom_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+15 -3
View File
@@ -155,8 +155,11 @@ struct gl518_data {
int quit_thread;
struct task_struct *thread;
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1)
wait_queue_head_t wq;
#else
struct wait_queue *wq;
#endif
char valid; /* !=0 if following fields are valid */
unsigned long last_updated; /* In jiffies */
unsigned long last_updated_v00;
@@ -391,7 +394,8 @@ static int gl518_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry((struct i2c_client *) new_client,
type_name,
gl518_dir_table_template)) < 0) {
gl518_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
@@ -661,7 +665,11 @@ int gl518_update_thread(void *c)
current->fs->umask = 0;
strcpy(current->comm,"gl518sm");
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1)
init_waitqueue_head(&(data->wq));
#else
data->wq = NULL;
#endif
data->thread = current;
#ifdef __SMP__
@@ -1002,7 +1010,11 @@ void gl518_iterate(struct i2c_client *client, int operation, int ctl_name,
data->quit_thread = 1;
wake_up_interruptible(&data->wq);
} else if ((data->iterate==2) && (! data->thread)) {
data->wq = NULL;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1)
init_waitqueue_head(&(data->wq));
#else
data->wq = NULL;
#endif
kernel_thread(gl518_update_thread, (void*) client, 0);
}
#endif
+2 -1
View File
@@ -368,7 +368,8 @@ static int gl520_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,
type_name,
gl520_dir_table_template)) < 0) {
gl520_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -182,7 +182,8 @@ int icspll_attach_adapter(struct i2c_adapter *adapter)
/* Register a new directory entry with module sensors */
if ((err = sensors_register_entry(new_client,"icspll",
icspll_dir_table_template)) < 0)
icspll_dir_table_template
THIS_MODULE)) < 0)
goto ERROR3;
data->sysctl_id = err;
err = 0;
+2 -1
View File
@@ -216,7 +216,8 @@ int lm75_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
lm75_dir_table_template)) < 0) {
lm75_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -433,7 +433,8 @@ int lm78_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,
type_name,
lm78_dir_table_template)) < 0) {
lm78_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -362,7 +362,8 @@ int lm80_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
lm80_dir_table_template)) < 0) {
lm80_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -221,7 +221,8 @@ int ltc1710_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
ltc1710_dir_table_template)) < 0) {
ltc1710_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -183,7 +183,8 @@ int matorb_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
matorb_dir_table_template)) < 0) {
matorb_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -367,7 +367,8 @@ int maxi_detect_smbus(struct i2c_adapter *adapter)
/* Register a new directory entry with module sensors */
if ((err = sensors_register_entry(new_client, type_name,
maxi_dir_table_template)) < 0)
maxi_dir_table_template,
THIS_MODULE)) < 0)
goto ERROR4;
((struct maxi_data *) (new_client->data))->sysctl_id = err;
err = 0;
+2 -1
View File
@@ -408,7 +408,8 @@ int sis5595_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry((struct i2c_client *) new_client,
type_name,
sis5595_dir_table_template)) < 0) {
sis5595_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -259,7 +259,8 @@ int thmc50_detect(struct i2c_adapter *adapter, int address,
/* Register a new directory entry with module sensors */
if ((i = sensors_register_entry(new_client,type_name,
thmc50_dir_table_template)) < 0) {
thmc50_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+2 -1
View File
@@ -808,7 +808,8 @@ int w83781d_detect(struct i2c_adapter *adapter, int address,
kind == w83781d?w83781d_dir_table_template:
kind == w83783s?w83783s_dir_table_template:
is_isa?w83782d_i2c_dir_table_template:
w83782d_isa_dir_table_template)) < 0) {
w83782d_isa_dir_table_template,
THIS_MODULE)) < 0) {
err = i;
goto ERROR4;
}
+5 -2
View File
@@ -70,8 +70,11 @@ extern int sensors_proc_real(ctl_table *ctl, int write, struct file * filp,
copied in memory. The extra2 field of each file is set to point to client.
If any driver wants subdirectories within the newly created directory,
these functions must be updated! */
extern int sensors_register_entry(struct i2c_client *client,
const char *prefix, ctl_table *ctl_template);
extern int sensors_register_entry(struct i2c_client *client ,
const char *prefix,
ctl_table *ctl_template,
struct module *controlling_mod);
extern void sensors_deregister_entry(int id);
+17 -4
View File
@@ -63,8 +63,10 @@ static struct ctl_table_header *sensors_entries[SENSORS_ENTRY_MAX];
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58))
static struct i2c_client *sensors_clients[SENSORS_ENTRY_MAX];
static unsigned short sensors_inodes[SENSORS_ENTRY_MAX];
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1)
static void sensors_fill_inode(struct inode *inode, int fill);
static void sensors_dir_fill_inode(struct inode *inode, int fill);
#endif
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58)) */
static ctl_table sysctl_table[] = {
@@ -124,9 +126,14 @@ int sensors_create_name(char **name, const char *prefix,
ctl_template should be a template of the newly created directory. It is
copied in memory. The extra2 field of each file is set to point to client.
If any driver wants subdirectories within the newly created directory,
this function must be updated! */
this function must be updated!
controlling_mod is the controlling module. It should usually be
THIS_MODULE when calling. Note that this symbol is not defined in
kernels before 2.3.13; define it to NULL in that case. We will not use it
for anything older than 2.3.27 anyway. */
int sensors_register_entry(struct i2c_client *client ,const char *prefix,
ctl_table *ctl_template)
ctl_table *ctl_template,
struct module *controlling_mod)
{
int i,res,len,id;
ctl_table *new_table;
@@ -186,7 +193,11 @@ int sensors_register_entry(struct i2c_client *client ,const char *prefix,
}
#endif /* DEBUG */
sensors_inodes[id-256] = new_header->ctl_table->child->child->de->low_ino;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27))
new_header->ctl_table->child->child->de->owner = controlling_mod;
#else
new_header->ctl_table->child->child->de->fill_inode = &sensors_dir_fill_inode;
#endif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27))
#endif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58))
return id;
@@ -759,9 +770,11 @@ int __init sensors_init(void)
sensors_initialized = 0;
if (! (sensors_proc_header = register_sysctl_table(sensors_proc,0)))
return -ENOMEM;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58))
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1))
sensors_proc_header->ctl_table->child->de->owner = THIS_MODULE;
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58))
sensors_proc_header->ctl_table->child->de->fill_inode = &sensors_fill_inode;
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58)) */
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1)) */
sensors_initialized ++;
return 0;
}