On 5/6/13 10:05 AM, Jean Delvare wrote:
Hi all,
I recently noticed that driver ucb1400_gpio was built into all openSUSE kernels while most systems did not need it. Now that I fixed this specific issue, I decided to check if there were other drivers like that. I used the following script to test my running systems:
#!/bin/sh
find /sys/bus -path "*/drivers/*/uevent" | sed -e 's/\/sys\/bus\/\(.*\)\/uevent$/\1/' | sort > /tmp/drivers find /sys/bus -type l -path "*/drivers/*" | sed -e 's/\/sys\/bus\/\(.*\)\/[^/]*$/\1/' | sort -u > /tmp/drivers_with_devices diff -u /tmp/drivers_with_devices /tmp/drivers | grep '^+[^+]' | cut -c 2-
OK, this is a somewhat crude heuristic but it seems to work. I ran this script on 3 different machines running openSUSE 12.2 or 12.3, and took the common results. This led me to the following driver list:
acpi/drivers/ec acpi/drivers/hardware_error_device acpi/drivers/hpet
A ton of systems have this one.
hid/drivers/a4tech hid/drivers/belkin hid/drivers/cherry hid/drivers/chicony hid/drivers/cypress hid/drivers/dragonrise hid/drivers/ezkey hid/drivers/greenasia hid/drivers/gyration hid/drivers/kensington hid/drivers/kye hid/drivers/logitech hid/drivers/microsoft hid/drivers/monterey hid/drivers/ortek hid/drivers/pantherlord hid/drivers/petalynx hid/drivers/samsung hid/drivers/smartjoyplus hid/drivers/sony hid/drivers/sunplus hid/drivers/thrustmaster hid/drivers/topseed hid/drivers/twinhan hid/drivers/zeroplus i2c/drivers/dummy mdio_bus/drivers/Generic PHY pci/drivers/agpgart-sis pci/drivers/agpgart-via pci/drivers/ioapic
I think this is used all over the place.
pci/drivers/ohci_hcd
Likewise.
pci/drivers/pci-stub pci/drivers/serial
Not sure about this one. I think most built-in serial will use the serial8250 driver.
pci/drivers/tsi721 pci_express/drivers/aer pci_express/drivers/pcie_pme platform/drivers/dsa platform/drivers/ucb1400_gpio
This is a rather long list, 41 drivers. While I am certain that there are false positives, either common hardware which I just happen to not have on any of my machines (most of pci and acpi), or drivers we may need very early (pci/serial?), or pseudo-drivers which are in fact part of their subsystem core (i2c/dummy, pci_express/aer, pcie_pme), it still seems to me that many of these should be modularized, to make our kernel smaller in size and faster to boot.
More than half of the drivers are HID drivers. They are only built-in in 4 kernel flavors: i386/desktop, x86_64/desktop, ppc/default and ppc/vanilla. Jeff, Jiri, is this on purpose? If not, can I change all these to modular?
No. Feel free to change non-keyboard drivers to modules, but keyboard drivers should be builtins.
Then we have mdio_bus/Generic PHY (what a driver name is that? <sigh>), pci/tsi721 and platform/dsa left.
mdio_bus/Generic PHY is part of PHYLIB, I think we could build that as a module? It was accidentally made a bool in kernel v3.2-rc1 but was reverted to tristate in v3.2-rc5. Jeff, you made it build-in in commit 455827126, no objection to me making it a module again?
No objection. I suspect something changed in the Kconfig there.
pci/tsi721 is part of RapidIO. None of RapidIO support being built as modules. Which is a shame really, because I suspect most users don't need that and it isn't small - 165 kB on x86-64. This needs to be discussed with upstream.
And finally platform/dsa is already dealt with in Factory. By me, even :)
Thanks for looking into this. Some of the builtins aren't on purpose, but are relics of old Kconfigs that only offered bools. Others were probably added as part of the boot speedup attempt years ago. -Jeff -- Jeff Mahoney SUSE Labs