Hi everyone, >From what I read in drivers/mtd/chips/chipreg.c, unregister_mtd_chip_driver would disable preemptiveness, and do a spin_lock, and then remove drv->list by repointing the previous and next nodes, and then do a spin_unlock. However, from what I noticed in drivers/mtd/chips/sharp.c, it does a unregister_mtd_chip_driver(&sharp_chipdrv), which looks all right, but the sharp_chipdrv static structure did not initialise the struct list_head list entry in struct mtd_chip_driver. /* drivers/mtd/chips/sharp.c */ 100: static struct mtd_chip_driver sharp_chipdrv = { 101: .probe = sharp_probe, 102: .destroy = sharp_destroy, 103: .name = "sharp", 104: .module = THIS_MODULE 105: }; /* include/linux/list.h */ 136 static inline void list_del(struct list_head *entry) 137 { 138 __list_del(entry->prev, entry->next); 139 } /* include/linux/list.h */ 124 static inline void __list_del(struct list_head * prev, struct list_head * next) 125 { 126 next->prev = prev; 127 prev->next = next; 128 } What would list_del do? Since it does not check if entry is NULL. Please enlighten! Using kernel 2.5.68 on x86. Cheers, Eugene -- :(){(:|:)&};: -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/