Messages in this thread | | | Date | Tue, 2 Sep 2008 23:05:02 +0200 | From | Uwe Kleine-König <> | Subject | several wrong sections for probe functions of platform drivers |
| |
Hello,
I wrote a small python script that extracts the section specifier for probe functions of platform drivers and warns if it's != __devinit. The script is attached.
It's not always an error if the probe function is defined using __init, but then (AFAIK) it should not be passed in the struct platform_driver!?
With Linus' current tree (v2.6.27-rc5-55-gafa153f) I get 215 matches with
1x __devexit 67x __init 146x no section
and one match that isn't interpreted correctly by my script.
I think the __devexit case is definitly wrong. I will do a deeper look and then probably send a patch for that one as a follow up to this mail.
I didn't (yet) checked the other cases, but I expect that most of them need fixing.
Would it make sense to start collecting such scripts in the vanilla tree?
I appreciate any constructive feedback.
Best regards Uwe
-- Uwe Kleine-König
If a lawyer and an IRS agent were both drowning, and you could only save one of them, would you go to lunch or read the paper? #! /usr/bin/python
import os import re
re_probename = re.compile('struct\s+platform_driver\s+(?P<drivername>\S+)\s*=\s*{.*\.probe\s*=\s*(?P<probefunction>[A-Za-z0-9_]*)', re.S)
for dirpath, dirnames, filenames in os.walk('.'): for f in filter(lambda s: s.endswith('.c'), filenames): fullf = os.path.join(dirpath, f) content = open(fullf).read() matchdict = dict(filename=fullf)
mo = re_probename.search(content) if mo: matchdict.update(mo.groupdict()) else: continue
re_section = re.compile('int\s+(?:(?P<probesection>__(?:dev)?(?:init|exit)+)\s+)?%(probefunction)s\s*\(' % matchdict) mo = re_section.search(content) if mo: matchdict.update(mo.groupdict()) else: matchdict['probesection'] = ''
if matchdict['probesection'] != '__devinit': print 'probe function %(probefunction)r for %(drivername)r (%(filename)s) defined in section %(probesection)r' % matchdict
| |