All in-kernel PCMCIA devices do unregister their client in their respective ->detach() function after a REMOVAL event. So, AFAICS, the dev_list iteration should always be false. Signed-off-by: Dominik Brodowski Index: 2.6.10-rc3/drivers/bluetooth/bluecard_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/bluetooth/bluecard_cs.c 2004-12-05 10:24:13.317822360 +0100 +++ 2.6.10-rc3/drivers/bluetooth/bluecard_cs.c 2004-12-05 10:26:02.904162704 +0100 @@ -1117,10 +1117,7 @@ static void __exit exit_bluecard_cs(void) { pcmcia_unregister_driver(&bluecard_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - bluecard_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_bluecard_cs); Index: 2.6.10-rc3/drivers/bluetooth/bt3c_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/bluetooth/bt3c_cs.c 2004-12-05 10:24:13.318822208 +0100 +++ 2.6.10-rc3/drivers/bluetooth/bt3c_cs.c 2004-12-05 10:26:02.905162552 +0100 @@ -967,10 +967,7 @@ static void __exit exit_bt3c_cs(void) { pcmcia_unregister_driver(&bt3c_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - bt3c_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_bt3c_cs); Index: 2.6.10-rc3/drivers/bluetooth/btuart_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/bluetooth/btuart_cs.c 2004-12-05 10:24:13.319822056 +0100 +++ 2.6.10-rc3/drivers/bluetooth/btuart_cs.c 2004-12-05 10:26:02.906162400 +0100 @@ -887,10 +887,7 @@ static void __exit exit_btuart_cs(void) { pcmcia_unregister_driver(&btuart_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - btuart_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_btuart_cs); Index: 2.6.10-rc3/drivers/bluetooth/dtl1_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/bluetooth/dtl1_cs.c 2004-12-05 10:24:13.320821904 +0100 +++ 2.6.10-rc3/drivers/bluetooth/dtl1_cs.c 2004-12-05 10:26:02.907162248 +0100 @@ -839,10 +839,7 @@ static void __exit exit_dtl1_cs(void) { pcmcia_unregister_driver(&dtl1_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - dtl1_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_dtl1_cs); Index: 2.6.10-rc3/drivers/char/pcmcia/synclink_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/char/pcmcia/synclink_cs.c 2004-12-05 10:24:13.410808224 +0100 +++ 2.6.10-rc3/drivers/char/pcmcia/synclink_cs.c 2004-12-05 10:26:02.919160424 +0100 @@ -3147,13 +3147,7 @@ } pcmcia_unregister_driver(&mgslpc_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - mgslpc_release((u_long)dev_list); - mgslpc_detach(dev_list); - } + BUG_ON(dev_list != NULL); } static int __init synclink_cs_init(void) Index: 2.6.10-rc3/drivers/ide/legacy/ide-cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/ide/legacy/ide-cs.c 2004-12-05 10:24:13.564784816 +0100 +++ 2.6.10-rc3/drivers/ide/legacy/ide-cs.c 2004-12-05 10:26:02.920160272 +0100 @@ -485,8 +485,7 @@ static void __exit exit_ide_cs(void) { pcmcia_unregister_driver(&ide_cs_driver); - while (dev_list != NULL) - ide_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_ide_cs); Index: 2.6.10-rc3/drivers/isdn/hardware/avm/avm_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/isdn/hardware/avm/avm_cs.c 2004-06-16 18:08:57.000000000 +0200 +++ 2.6.10-rc3/drivers/isdn/hardware/avm/avm_cs.c 2004-12-05 10:26:02.921160120 +0100 @@ -521,13 +521,7 @@ static void __exit avmcs_exit(void) { pcmcia_unregister_driver(&avmcs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - avmcs_release(dev_list); - avmcs_detach(dev_list); - } + BUG_ON(dev_list != NULL); } module_init(avmcs_init); Index: 2.6.10-rc3/drivers/isdn/hisax/avma1_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/isdn/hisax/avma1_cs.c 2004-03-12 22:27:01.000000000 +0100 +++ 2.6.10-rc3/drivers/isdn/hisax/avma1_cs.c 2004-12-05 10:26:02.922159968 +0100 @@ -531,13 +531,7 @@ static void __exit exit_avma1_cs(void) { pcmcia_unregister_driver(&avma1cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - avma1cs_release(dev_list); - avma1cs_detach(dev_list); - } + BUG_ON(dev_list != NULL); } module_init(init_avma1_cs); Index: 2.6.10-rc3/drivers/isdn/hisax/elsa_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/isdn/hisax/elsa_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/isdn/hisax/elsa_cs.c 2004-12-05 10:26:02.923159816 +0100 @@ -541,10 +541,7 @@ static void __exit exit_elsa_cs(void) { pcmcia_unregister_driver(&elsa_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - elsa_cs_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_elsa_cs); Index: 2.6.10-rc3/drivers/isdn/hisax/sedlbauer_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/isdn/hisax/sedlbauer_cs.c 2004-03-12 22:27:01.000000000 +0100 +++ 2.6.10-rc3/drivers/isdn/hisax/sedlbauer_cs.c 2004-12-05 10:26:02.924159664 +0100 @@ -648,13 +648,7 @@ static void __exit exit_sedlbauer_cs(void) { pcmcia_unregister_driver(&sedlbauer_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - sedlbauer_release(dev_list); - sedlbauer_detach(dev_list); - } + BUG_ON(dev_list != NULL); } module_init(init_sedlbauer_cs); Index: 2.6.10-rc3/drivers/isdn/hisax/teles_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/isdn/hisax/teles_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/isdn/hisax/teles_cs.c 2004-12-05 10:26:02.924159664 +0100 @@ -522,10 +522,7 @@ static void __exit exit_teles_cs(void) { pcmcia_unregister_driver(&teles_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - teles_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_teles_cs); Index: 2.6.10-rc3/drivers/mtd/maps/pcmciamtd.c =================================================================== --- 2.6.10-rc3.orig/drivers/mtd/maps/pcmciamtd.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/mtd/maps/pcmciamtd.c 2004-12-05 10:26:02.926159360 +0100 @@ -854,35 +854,7 @@ { DEBUG(1, DRIVER_DESC " unloading"); pcmcia_unregister_driver(&pcmciamtd_driver); - - while(dev_list) { - dev_link_t *link = dev_list; - - dev_list = link->next; - if (link) { - struct pcmciamtd_dev *dev = link->priv; - - if(dev) { - if(link->state & DEV_PRESENT) { - if (!(link->state & DEV_STALE_LINK)) { - pcmciamtd_detach(link); - } - link->state &= ~DEV_PRESENT; - if(dev->mtd_info) { - del_mtd_device(dev->mtd_info); - info("mtd%d: Removed", - dev->mtd_info->index); - } - } - if(dev->mtd_info) { - DEBUG(2, "Destroying map for mtd%d", - dev->mtd_info->index); - map_destroy(dev->mtd_info); - } - kfree(dev); - } - } - } + BUG_ON(dev_list != NULL); } module_init(init_pcmciamtd); Index: 2.6.10-rc3/drivers/net/pcmcia/3c574_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/3c574_cs.c 2004-12-05 10:24:14.155694984 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/3c574_cs.c 2004-12-05 10:26:02.927159208 +0100 @@ -1308,8 +1308,7 @@ static void __exit exit_tc574(void) { pcmcia_unregister_driver(&tc574_driver); - while (dev_list != NULL) - tc574_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_tc574); Index: 2.6.10-rc3/drivers/net/pcmcia/3c589_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/3c589_cs.c 2004-12-05 10:24:14.156694832 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/3c589_cs.c 2004-12-05 10:26:02.928159056 +0100 @@ -1083,8 +1083,7 @@ static void __exit exit_tc589(void) { pcmcia_unregister_driver(&tc589_driver); - while (dev_list != NULL) - tc589_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_tc589); Index: 2.6.10-rc3/drivers/net/pcmcia/axnet_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/axnet_cs.c 2004-12-05 10:24:14.157694680 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/axnet_cs.c 2004-12-05 10:26:02.930158752 +0100 @@ -877,8 +877,7 @@ static void __exit exit_axnet_cs(void) { pcmcia_unregister_driver(&axnet_cs_driver); - while (dev_list != NULL) - axnet_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_axnet_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/com20020_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/com20020_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/net/pcmcia/com20020_cs.c 2004-12-05 10:26:02.931158600 +0100 @@ -513,8 +513,7 @@ static void __exit exit_com20020_cs(void) { pcmcia_unregister_driver(&com20020_cs_driver); - while (dev_list != NULL) - com20020_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_com20020_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/fmvj18x_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/fmvj18x_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/net/pcmcia/fmvj18x_cs.c 2004-12-05 10:26:02.932158448 +0100 @@ -792,8 +792,7 @@ static void __exit exit_fmvj18x_cs(void) { pcmcia_unregister_driver(&fmvj18x_cs_driver); - while (dev_list != NULL) - fmvj18x_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_fmvj18x_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/ibmtr_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/ibmtr_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/net/pcmcia/ibmtr_cs.c 2004-12-05 10:26:02.933158296 +0100 @@ -538,8 +538,7 @@ static void __exit exit_ibmtr_cs(void) { pcmcia_unregister_driver(&ibmtr_cs_driver); - while (dev_list != NULL) - ibmtr_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_ibmtr_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/nmclan_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/nmclan_cs.c 2004-12-05 10:24:14.159694376 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/nmclan_cs.c 2004-12-05 10:26:02.934158144 +0100 @@ -1702,8 +1702,7 @@ static void __exit exit_nmclan_cs(void) { pcmcia_unregister_driver(&nmclan_cs_driver); - while (dev_list != NULL) - nmclan_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_nmclan_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/pcnet_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/pcnet_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/net/pcmcia/pcnet_cs.c 2004-12-05 10:26:02.936157840 +0100 @@ -1659,8 +1659,7 @@ { DEBUG(0, "pcnet_cs: unloading\n"); pcmcia_unregister_driver(&pcnet_driver); - while (dev_list != NULL) - pcnet_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_pcnet_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/smc91c92_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/smc91c92_cs.c 2004-12-05 10:24:29.771321048 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/smc91c92_cs.c 2004-12-05 10:26:02.938157536 +0100 @@ -2263,8 +2263,7 @@ static void __exit exit_smc91c92_cs(void) { pcmcia_unregister_driver(&smc91c92_cs_driver); - while (dev_list != NULL) - smc91c92_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_smc91c92_cs); Index: 2.6.10-rc3/drivers/net/pcmcia/xirc2ps_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/pcmcia/xirc2ps_cs.c 2004-12-05 10:24:14.163693768 +0100 +++ 2.6.10-rc3/drivers/net/pcmcia/xirc2ps_cs.c 2004-12-05 10:26:02.939157384 +0100 @@ -2016,9 +2016,7 @@ exit_xirc2ps_cs(void) { pcmcia_unregister_driver(&xirc2ps_cs_driver); - - while (dev_list) - xirc2ps_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_xirc2ps_cs); Index: 2.6.10-rc3/drivers/net/wireless/airo_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/airo_cs.c 2004-08-29 17:03:21.000000000 +0200 +++ 2.6.10-rc3/drivers/net/wireless/airo_cs.c 2004-12-05 10:26:02.940157232 +0100 @@ -592,13 +592,7 @@ static void airo_cs_cleanup(void) { pcmcia_unregister_driver(&airo_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - airo_release(dev_list); - airo_detach(dev_list); - } + BUG_ON(dev_list != NULL); } /* Index: 2.6.10-rc3/drivers/net/wireless/atmel_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/atmel_cs.c 2004-12-05 10:24:14.313670968 +0100 +++ 2.6.10-rc3/drivers/net/wireless/atmel_cs.c 2004-12-05 10:26:02.941157080 +0100 @@ -693,13 +693,7 @@ static void atmel_cs_cleanup(void) { pcmcia_unregister_driver(&atmel_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - atmel_release(dev_list); - atmel_detach(dev_list); - } + BUG_ON(dev_list != NULL); } /* Index: 2.6.10-rc3/drivers/net/wireless/netwave_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/netwave_cs.c 2004-12-05 10:24:14.314670816 +0100 +++ 2.6.10-rc3/drivers/net/wireless/netwave_cs.c 2004-12-05 10:26:02.943156776 +0100 @@ -1692,9 +1692,7 @@ static void __exit exit_netwave_cs(void) { pcmcia_unregister_driver(&netwave_driver); - - if (dev_list != NULL) /* Critical situation */ - printk("netwave_cs: devices remaining when removing module\n"); + BUG_ON(dev_list != NULL); } module_init(init_netwave_cs); Index: 2.6.10-rc3/drivers/net/wireless/orinoco_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/orinoco_cs.c 2004-10-21 19:35:00.000000000 +0200 +++ 2.6.10-rc3/drivers/net/wireless/orinoco_cs.c 2004-12-05 10:26:02.944156624 +0100 @@ -653,14 +653,7 @@ exit_orinoco_cs(void) { pcmcia_unregister_driver(&orinoco_driver); - - if (dev_list) - DEBUG(0, PFX "Removing leftover devices.\n"); - while (dev_list != NULL) { - if (dev_list->state & DEV_CONFIG) - orinoco_cs_release(dev_list); - orinoco_cs_detach(dev_list); - } + BUG_ON(dev_list != NULL); } module_init(init_orinoco_cs); Index: 2.6.10-rc3/drivers/net/wireless/ray_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/ray_cs.c 2004-10-21 19:35:00.000000000 +0200 +++ 2.6.10-rc3/drivers/net/wireless/ray_cs.c 2004-12-05 10:26:02.946156320 +0100 @@ -2956,8 +2956,7 @@ #endif pcmcia_unregister_driver(&ray_driver); - while (dev_list != NULL) - ray_detach(dev_list); + BUG_ON(dev_list != NULL); } /* exit_ray_cs */ module_init(init_ray_cs); Index: 2.6.10-rc3/drivers/net/wireless/wl3501_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/net/wireless/wl3501_cs.c 2004-12-05 10:24:14.339667016 +0100 +++ 2.6.10-rc3/drivers/net/wireless/wl3501_cs.c 2004-12-05 10:26:02.948156016 +0100 @@ -2267,13 +2267,7 @@ { dprintk(0, ": unloading"); pcmcia_unregister_driver(&wl3501_driver); - while (wl3501_dev_list) { - /* Mark the device as non-existing to minimize calls to card */ - wl3501_dev_list->state &= ~DEV_PRESENT; - if (wl3501_dev_list->state & DEV_CONFIG) - wl3501_release(wl3501_dev_list); - wl3501_detach(wl3501_dev_list); - } + BUG_ON(wl3501_dev_list != NULL); } module_init(wl3501_init_module); Index: 2.6.10-rc3/drivers/parport/parport_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/parport/parport_cs.c 2004-02-08 13:06:12.000000000 +0100 +++ 2.6.10-rc3/drivers/parport/parport_cs.c 2004-12-05 10:26:02.949155864 +0100 @@ -401,10 +401,7 @@ static void __exit exit_parport_cs(void) { pcmcia_unregister_driver(&parport_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - parport_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_parport_cs); Index: 2.6.10-rc3/drivers/scsi/pcmcia/aha152x_stub.c =================================================================== --- 2.6.10-rc3.orig/drivers/scsi/pcmcia/aha152x_stub.c 2004-12-05 10:24:14.714610016 +0100 +++ 2.6.10-rc3/drivers/scsi/pcmcia/aha152x_stub.c 2004-12-05 10:26:02.950155712 +0100 @@ -347,10 +347,7 @@ static void __exit exit_aha152x_cs(void) { pcmcia_unregister_driver(&aha152x_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - aha152x_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_aha152x_cs); Index: 2.6.10-rc3/drivers/scsi/pcmcia/fdomain_stub.c =================================================================== --- 2.6.10-rc3.orig/drivers/scsi/pcmcia/fdomain_stub.c 2004-08-29 17:03:22.000000000 +0200 +++ 2.6.10-rc3/drivers/scsi/pcmcia/fdomain_stub.c 2004-12-05 10:26:02.950155712 +0100 @@ -328,10 +328,7 @@ static void __exit exit_fdomain_cs(void) { pcmcia_unregister_driver(&fdomain_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - fdomain_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_fdomain_cs); Index: 2.6.10-rc3/drivers/scsi/pcmcia/nsp_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/scsi/pcmcia/nsp_cs.c 2004-12-05 10:24:29.945294600 +0100 +++ 2.6.10-rc3/drivers/scsi/pcmcia/nsp_cs.c 2004-12-05 10:26:02.952155408 +0100 @@ -2194,10 +2194,9 @@ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,68)) pcmcia_unregister_driver(&nsp_driver); + BUG_ON(dev_list != NULL); #else unregister_pcmcia_driver(&dev_info); -#endif - /* XXX: this really needs to move into generic code.. */ while (dev_list != NULL) { if (dev_list->state & DEV_CONFIG) { @@ -2205,6 +2204,7 @@ } nsp_cs_detach(dev_list); } +#endif } Index: 2.6.10-rc3/drivers/scsi/pcmcia/qlogic_stub.c =================================================================== --- 2.6.10-rc3.orig/drivers/scsi/pcmcia/qlogic_stub.c 2004-12-05 10:24:14.715609864 +0100 +++ 2.6.10-rc3/drivers/scsi/pcmcia/qlogic_stub.c 2004-12-05 10:26:02.953155256 +0100 @@ -432,10 +432,7 @@ static void __exit exit_qlogic_cs(void) { pcmcia_unregister_driver(&qlogic_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - qlogic_detach(dev_list); + BUG_ON(dev_list != NULL); } MODULE_AUTHOR("Tom Zerucha, Michael Griffith"); Index: 2.6.10-rc3/drivers/serial/serial_cs.c =================================================================== --- 2.6.10-rc3.orig/drivers/serial/serial_cs.c 2004-12-05 10:24:15.740454064 +0100 +++ 2.6.10-rc3/drivers/serial/serial_cs.c 2004-12-05 10:26:02.954155104 +0100 @@ -749,10 +749,7 @@ static void __exit exit_serial_cs(void) { pcmcia_unregister_driver(&serial_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - serial_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_serial_cs); Index: 2.6.10-rc3/drivers/telephony/ixj_pcmcia.c =================================================================== --- 2.6.10-rc3.orig/drivers/telephony/ixj_pcmcia.c 2004-12-05 10:24:15.754451936 +0100 +++ 2.6.10-rc3/drivers/telephony/ixj_pcmcia.c 2004-12-05 10:26:02.955154952 +0100 @@ -313,10 +313,7 @@ static void ixj_pcmcia_exit(void) { pcmcia_unregister_driver(&ixj_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - ixj_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(ixj_pcmcia_init); Index: 2.6.10-rc3/sound/pcmcia/pdaudiocf/pdaudiocf.c =================================================================== --- 2.6.10-rc3.orig/sound/pcmcia/pdaudiocf/pdaudiocf.c 2004-12-05 10:24:23.381292480 +0100 +++ 2.6.10-rc3/sound/pcmcia/pdaudiocf/pdaudiocf.c 2004-12-05 10:26:02.956154800 +0100 @@ -274,15 +274,6 @@ } /* - * snd_pdacf_detach_all - detach all instances linked to the hw - */ -static void snd_pdacf_detach_all(void) -{ - while (dev_list != NULL) - snd_pdacf_detach(dev_list); -} - -/* * configuration callback */ @@ -413,7 +404,7 @@ static void __exit exit_pdacf(void) { pcmcia_unregister_driver(&pdacf_cs_driver); - snd_pdacf_detach_all(); + BUG_ON(dev_list != NULL); } module_init(init_pdacf); Index: 2.6.10-rc3/sound/pcmcia/vx/vx_entry.c =================================================================== --- 2.6.10-rc3.orig/sound/pcmcia/vx/vx_entry.c 2004-10-21 19:35:06.000000000 +0200 +++ 2.6.10-rc3/sound/pcmcia/vx/vx_entry.c 2004-12-05 10:26:02.984150544 +0100 @@ -245,15 +245,6 @@ } /* - * snd_vxpocket_detach_all - detach all instances linked to the hw - */ -void snd_vxpocket_detach_all(struct snd_vxp_entry *hw) -{ - while (hw->dev_list != NULL) - snd_vxpocket_detach(hw, hw->dev_list); -} - -/* * configuration callback */ @@ -373,4 +364,3 @@ EXPORT_SYMBOL(snd_vxpocket_ops); EXPORT_SYMBOL(snd_vxpocket_attach); EXPORT_SYMBOL(snd_vxpocket_detach); -EXPORT_SYMBOL(snd_vxpocket_detach_all); Index: 2.6.10-rc3/sound/pcmcia/vx/vxpocket.c =================================================================== --- 2.6.10-rc3.orig/sound/pcmcia/vx/vxpocket.c 2004-12-05 10:24:23.382292328 +0100 +++ 2.6.10-rc3/sound/pcmcia/vx/vxpocket.c 2004-12-05 10:26:02.984150544 +0100 @@ -165,7 +165,7 @@ static void __exit exit_vxpocket(void) { pcmcia_unregister_driver(&vxp_cs_driver); - snd_vxpocket_detach_all(&hw_entry); + BUG_ON(hw_entry.dev_list != NULL); } module_init(init_vxpocket); Index: 2.6.10-rc3/sound/pcmcia/vx/vxpocket.h =================================================================== --- 2.6.10-rc3.orig/sound/pcmcia/vx/vxpocket.h 2003-06-15 12:16:37.000000000 +0200 +++ 2.6.10-rc3/sound/pcmcia/vx/vxpocket.h 2004-12-05 10:26:02.985150392 +0100 @@ -77,7 +77,6 @@ */ dev_link_t *snd_vxpocket_attach(struct snd_vxp_entry *hw); void snd_vxpocket_detach(struct snd_vxp_entry *hw, dev_link_t *link); -void snd_vxpocket_detach_all(struct snd_vxp_entry *hw); int vxp_add_mic_controls(vx_core_t *chip);