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