PATCH: abituguru driver

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

 



Hi Hans,

> This one should be it. I've converted the driver to implement the new
> sysfs alarm interface and I've created a proper patch against the latest
> mm kernel tree, including the nescesarry makefile & kconfig mods,
> MAINTAINERS entry, docs etc.
> 
> Signed-off-by: Hans de Goede <j.w.r.degoede at hhs.nl>

OK, I applied this. At last! :)

I did many cosmetic changes, fixing coding style and spelling all
around the place.

I didn't do a full review, given that the code was already reviewed
several times. If things need to be fixed, they always can be fixed
afterwards. And this will happen ;) From now on, any further change
should be provided as an incremental patch. The exact patch I applied
can be seen here:

http://khali.linux-fr.org/devel/i2c/linux-2.6/hwmon-abituguru-new-driver.patch

Now, before I push this upwards, there's at least one thing which I
would like you change/fix: the sysfs interface files handling. I see
that you are creating the sysfs file attributes dynamically, and store
the names in a large array in the device private data structure:

> struct abituguru_data {
> (...)
> 	/* The sysfs attr and their names are generated automatically, for bank1
> 	   we cannot use a predefined array because we don't know beforehand
> 	   of a sensor is a volt or a temp sensor, for bank2 and the pwms its
> 	   easier todo things the same way.  For in sensors we have 9 (temp 7)
> 	   sysfs entries per sensor, for bank2 and pwms 6. */
> 	struct sensor_device_attribute_2 sysfs_attr[16 * 9 +
> 		ABIT_UGURU_MAX_BANK2_SENSORS * 6 + ABIT_UGURU_MAX_PWMS * 6];
> 	/* Buffer to store the dynamically generated sysfs names, we need 2120
> 	   bytes for bank1 (worst case scenario of 16 in sensors), 444 bytes
> 	   for fan1-6 and 738 bytes for pwm1-6 + some room to spare in case I
> 	   miscounted :) */
> 	char bank1_names[3400];

Why do you want to do this in the first place? All other hardware
monitoring drivers use static attributes. Within a given driver, not
all supported chips use all attributes, but that's OK. What makes the
uGuru different?

Your dynamic implementation has "overflow" written on it in big block
letters. What will happen when we later need to add files? Or if we
change the names and the new ones are longer? I'd need to be convinced
that everything is safe and under control. "3400" hardcoded doesn't
qualify, let alone the comment itself ;) At the very least, you should
express the array size from clearly defined constants. And you should
use snprintf, not sprintf, when filling the array.

But before that you really need to convince me that this is needed at
all, because the code complexity must be justified by a significant
benefit, else it's just not worth it.

I won't push the driver upwards until this is sorted out.

Other cleanups I'd like you to consider:

* Use the ARRAY_SIZE macro instead of hardcoded values wherever
  possible.
* In abituguru_probe(), refactor the error path so that you have a
  single call to kfree().

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