I am writing a simple driver for a USB dongle based on the
FDTI232R part. The driver itself seems to be working fine.
I can load and exercise it without problems. The issue I am
having is when I remove the module, the module itself seems
to disconnect properly, but I get 2 processes that seem to be
running rouge, "/sbin/udevd -d" and "/lib/udev/udev_run_devd".
The
udev_run_devd process consumes massive amounts
of CPU time and slows everything down. If I install and remove
the USB driver again, I get another pair of processes.
Killing either of these processes causes a full system hang.
I have added the file "80-dlpd.rules" to "/etc/udev/rules.d"
which contains the single line;
KERNEL=="dlpd[0-9]*", NAME="%k", MODE="0666", OWNER="root", GROUP="root"
I previously had a similar entry in the "50-udev.rules" file
but with similar results.
The
udevd process is looping on (from strace -p)
waitpid(8478, 0xbfc82844, WNOHANG) = 0
nanosleep({0, 100000000}, NULL) = 0
waitpid(8478, 0xbfc82844, WNOHANG) = 0
nanosleep({0, 100000000}, NULL) = 0
while the
udev_run_devd process is looping on
getdents64(3, /* 170 entries */, 4096) = 4080
getdents64(3, /* 170 entries */, 4096) = 4080
getdents64(3, /* 170 entries */, 4096) = 4080
getdents64(3, /* 170 entries */, 4096) = 4080
I'm not too fimilar with these utilities and the source code
didn't help much, but I assume that they are trying to remove
the device node that was created when the driver was loaded.
The node has been removed from the /dev directory.
Any help would be greatly appreciated.
Thank You.