several wrong sections for probe functions of platform drivers
From: Uwe Kleine-König
Date: Tue Sep 02 2008 - 17:58:47 EST
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