Jon Masters пишет:
>> Some of modules have no MODULE_DEVICE_TABLE(...) and do not export hardware
>> ("pnp") aliases, but have all required data to do this. I found it after
>> ioatdma module (currently fixed in tree). This information may be useful to
>> hardware/modules detection.

> Thanks for the patch. linux-modules is mostly for userspace
> module-init-tools (modprobe, etc.) however I will take a look at your
> patch. You might also want to send this to Rusty Russell (the kernel
> side maintainer) for his opinion prior to/at the same time as posting to
> the LKML upstream. Thanks again.

After post, I found next related problem: some of modules (scx200_acb.c and
pch_dma.c) have not NULL-terminated pci_device_id record. Prior I just exclude
scx200_acb, now pch_dma is new (in 2.6.36). To be correct, pch_dma exclusion
must be added to patch-script or both modules may be fixed - just add array
element:
static const struct pci_device_id ... = {
...
        { 0, }          
}

Or change in script:
*/scx200_acb.c|*/mdio-gpio.c)
to
*/scx200_acb.c|*/mdio-gpio.c|*/pch_dma.c)
(attached)

In case scx200_acb.c & pch_dma.c will be fixed - this exclusion may be removed
(mdio-gpio.c was buggy only in older kernels).

PS Thanks, now posting all to Rusty Russel.

-- 
WBR, Dzianis Kahanovich AKA Denis Kaganovich, http://mahatma.bspu.unibel.by/
#!/bin/bash
## (c) Denis Kaganovich
## v4
## grep-pcre required

#BUS="pci"
BUS="\w+"

STR="^(?:static\s+)?(?:const\s+)?struct\s+"

fnd(){
grep -Prhl "${STR}${BUS}_device_id\s+" $1 --include="*.c" | while read i ; do
        local bus=`grep -Prho "${STR}${BUS}_device_id.*\s+" $i`
        bus="${bus#*struct }"
        local n="${bus%%[*}"
        n="${n%%=*}"
        n="${n##*device_id }"
        n="${n// }"
        bus="${bus%%_device_id*}"
        grep -Pq "^module_init\s*\(" $i || continue
        grep -q "MODULE_DEVICE_TABLE" $i && continue
        local ii="${i#$1}"
        ii="${ii#/}"

        # add NULL element into scx200_acb.c & pch_dma.c pci_device_id and may 
remove "case"
        case $ii in
        */scx200_acb.c|*/mdio-gpio.c|*/pch_dma.c)
                echo "BROKEN: $bus: $ii"
                continue
        ;;
        esac

        bus="${bus%%_*}"
        local BU
        case "$bus" in
        sdio)BU=MMC;;
        *)BU="${bus^^}";;
        esac
        if grep -Prq "^\s*(?:menu)?config\s+$BU(?:\s.*)?$" $1 
--include="Kconfig*"; then
                echo "Fixing: $BU: ($n) $ii"
                sed -i -e 's/^\(module_init.*\)$/\n#ifdef 
CONFIG_'"$BU"'\nMODULE_DEVICE_TABLE('"$bus, $n"');\n#endif\n\n\1/' $i
        else
                echo "Fixing: $bus: ($n) $ii"
                sed -i -e 's/^\(module_init.*\)$/\nMODULE_DEVICE_TABLE('"$bus, 
$n"');\n\n\1/' $i
        fi
done
}

[[ -z "$1" ]] && echo "$0 <path_to_kernel>" && exit 1

fnd $*

Reply via email to