On Fri, 19 Mar 2004 04:53:22 -0800 (PST) Andre Hedrick wrote: > http://www.kernel.org/pub/linux/kernel/people/hedrick/ide-2.4.25/hpt366-0.37.patch.bz2 > > Fixes fifo dma data corruption on RocketRaid404 > Fixes native HPT372 detection/setup for HPT372/HPT372A/HPT372N > > HPT372N's previous code seems kooky, but then again do not have specific > hardware rev in question. static void __init init_setup_hpt37x (struct pci_dev *dev, ide_pci_device_t *d) { + if (d->device == PCI_DEVICE_ID_TTI_HPT372) { + unsigned int class_rev; + static char *chipset_names[] = {"HPT372", "HPT372A", "HPT372N"}; + + pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); + class_rev &= 0xff; + d->name = chipset_names[class_rev]; + } + ide_setup_pci_device(dev, d); } This will blow up if a chip with the same PCI ID and a revision larger than 2 ever appears. Also, hpt366_init_one() is __devinit, but it calls d->init_setup, and all init_setup_*() functions are __init - does not look good. Hmm, this is present in many drivers, also in 2.6.x... apparently this is safe because such devices cannot be hotplugged.