Try changing one thing at a time per patch please. There's some bugs in here: > - struct config_t dig_in_config[32]; > - struct config_t dig_out_config[32]; > - struct config_t chan_in_config[32]; > - struct config_t chan_out_config[32]; > int i; > + config_data = kmalloc(sizeof(struct config_data_t), GFP_KERNEL); Shouldn't that be: config_data = kmalloc(sizeof(struct config_data_t)*32, GFP_KERNEL); Otherwise you overflow your buffer here: > > for (i = 0; i < 32; i++) { > - dig_in_config[i].kind = 0; > - dig_in_config[i].bits = 0; > - dig_in_config[i].min = 0; > - dig_in_config[i].max = 0; > - dig_out_config[i].kind = 0; > - dig_out_config[i].bits = 0; > - dig_out_config[i].min = 0; > - dig_out_config[i].max = 0; > - chan_in_config[i].kind = 0; > - chan_in_config[i].bits = 0; > - chan_in_config[i].min = 0; > - chan_in_config[i].max = 0; > - chan_out_config[i].kind = 0; > - chan_out_config[i].bits = 0; > - chan_out_config[i].min = 0; > - chan_out_config[i].max = 0; > + config_data->dig_in_config[i].kind = 0; > + config_data->dig_in_config[i].bits = 0; > + config_data->dig_in_config[i].min = 0; > + config_data->dig_in_config[i].max = 0; > + config_data->dig_out_config[i].kind = 0; > + config_data->dig_out_config[i].bits = 0; > + config_data->dig_out_config[i].min = 0; > + config_data->dig_out_config[i].max = 0; > + config_data->chan_in_config[i].kind = 0; > + config_data->chan_in_config[i].bits = 0; > + config_data->chan_in_config[i].min = 0; > + config_data->chan_in_config[i].max = 0; > + config_data->chan_out_config[i].kind = 0; > + config_data->chan_out_config[i].bits = 0; > + config_data->chan_out_config[i].min = 0; > + config_data->chan_out_config[i].max = 0; > } Or am I mistaken? thanks, greg k-h _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel