Re: Linux v2.5.54

Rudmer van Dijk
2003-01-02T17:41:27Z

On Thursday 02 January 2003 04:43, Linus Torvalds wrote:
> Happy new year to you all, hopefully most of you are back from the dead
> and the hangovers are all long gone. And if not, I'm told reading a large
> kernel patch is _just_ the medication for whatever ails you.
>
> The 2.5.54 patch is largely mainly a big collection of various small
> things, all over the place (diffstat shows a long list of small changes,
> with some noticeable activity in UML, the MPT fusion driver and some of
> the fbcon drivers).
>
> Various module updates (deprecated functions, updated loaders etc), usb,
> m68k, x86-64 updates, kbuild stuff etc etc.
<snip>
> Jaroslav Kysela <perex@suse.cz>:
> o PnP update
>

this broke the ne driver:

gcc -Wp,-MD,drivers/net/.ne.o.d -D__KERNEL__ -Iinclude -Wall
-Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -pipe
-mpreferred-stack-boundary=2 -march=i586 -Iinclude/asm-i386/mach-default
-fomit-frame-pointer -nostdinc -iwithprefix include -DKBUILD_BASENAME=ne
-DKBUILD_MODNAME=ne -c -o drivers/net/ne.o drivers/net/ne.c
drivers/net/ne.c: In function `ne_probe_isapnp':
drivers/net/ne.c:201: warning: implicit declaration of function
`isapnp_find_dev'
drivers/net/ne.c:204: warning: assignment makes pointer from integer without
a cast
drivers/net/ne.c:206: dereferencing pointer to incomplete type
drivers/net/ne.c:208: dereferencing pointer to incomplete type
drivers/net/ne.c:211: dereferencing pointer to incomplete type
drivers/net/ne.c:214: dereferencing pointer to incomplete type
drivers/net/ne.c:215: dereferencing pointer to incomplete type
make[2]: *** [drivers/net/ne.o] Error 1
make[1]: *** [drivers/net] Error 2
make: *** [drivers] Error 2

CONFIG_PNP is not set

with drivers/pcmcia/i82365.c as an example I could get this to build (see
patch below), as noted in Documentation/pnp.txt this is not the correct fix,
but it works for now.

with patch below, kernel builds, boots and it servives a simple stresstest
(the bandwidth program in
http://marc.theaimsgroup.com/?l=linux-kernel&m=104151288832193&w=2)

Rudmer

--- linux-2.5.54/drivers/net/ne.c.orig 2003-01-02 14:36:14.000000000 +0100
+++ linux-2.5.54/drivers/net/ne.c 2003-01-02 16:01:33.000000000 +0100
@@ -193,32 +193,29 @@

static int __init ne_probe_isapnp(struct net_device *dev)
{
- int i;
-
- for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
- struct pci_dev *idev = NULL;
+ struct isapnp_device_id *devid;
+ struct pnp_dev *idev;

- while ((idev = isapnp_find_dev(NULL,
- isapnp_clone_list[i].vendor,
- isapnp_clone_list[i].function,
- idev))) {
- /* Avoid already found cards from previous calls */
- if (idev->prepare(idev))
- continue;
- if (idev->activate(idev))
- continue;
- /* if no irq, search for next */
- if (idev->irq_resource[0].start == 0)
+ for (devid = isapnp_clone_list; devid->vendor; devid++) {
+ while ((idev = pnp_find_dev(NULL, devid->vendor,
+ devid->function, idev))) {
+ if (pnp_activate_dev(idev, NULL) < 0) {
+ printk("ne.c: PNP prepare failed\n");
+ break;
+ }
+ /* if no irq, search for next */
+ if (pnp_irq(idev, 0) == 0)
continue;
/* found it */
- dev->base_addr = idev->resource[0].start;
- dev->irq = idev->irq_resource[0].start;
- printk(KERN_INFO "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
- (char *) isapnp_clone_list[i].driver_data,
-
+ dev->base_addr = pnp_port_start(idev, 0);
+ dev->irq = pnp_irq(idev, 0);
+ printk(KERN_INFO "ne.c: PNP reports %s at i/o %#lx, irq %d.\n",
+ (char *) devid->driver_data,
dev->base_addr, dev->irq);
+
if (ne_probe1(dev, dev->base_addr) != 0) { /* Shouldn't happen. */
- printk(KERN_ERR "ne.c: Probe of ISAPnP card at %#lx failed.\n",
dev->base_addr);
+ printk(KERN_ERR "ne.c: Probe of ISAPnP card at %#lx failed.\n",
+ dev->base_addr);
return -ENXIO;
}
ei_status.priv = (unsigned long)idev;
@@ -783,9 +780,9 @@
struct net_device *dev = &dev_ne[this_dev];
if (dev->priv != NULL) {
void *priv = dev->priv;
- struct pci_dev *idev = (struct pci_dev *)ei_status.priv;
+ struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
if (idev)
- idev->deactivate(idev);
+ pnp_disable_dev(idev);
free_irq(dev->irq, dev);
release_region(dev->base_addr, NE_IO_EXTENT);
unregister_netdev(dev);