diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:14:29 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:14:29 -0800 |
| commit | 70a8be476e663526c3cb17a157c17ccf4fca5bd4 (patch) | |
| tree | 9cb7529d5c1d7e7d90a21b1a6c9f6133fbbb0511 /drivers | |
| parent | 1c3cefa582a6b598d204bad02676df300e457efa (diff) | |
v2.4.9.5 -> v2.4.9.6
- Jens Axboe: remove trivially dead io_request_lock usage
- Andrea Arcangeli: softirq cleanup and ARM fixes. Slab cleanups
- Christoph Hellwig: gendisk handling helper functions/cleanups
- Nikita Danilov: reiserfs dead code pruning
- Anton Altaparmakov: NTFS update to 1.1.18
- firestream network driver: patch reverted on authors request
- NIIBE Yutaka: SH architecture update
- Paul Mackerras: PPC cleanups, PPC8xx update.
- me: reverse broken bootdata allocation patch that went into pre5
Diffstat (limited to 'drivers')
39 files changed, 206 insertions, 370 deletions
diff --git a/drivers/acorn/block/mfmhd.c b/drivers/acorn/block/mfmhd.c index b5ac6c94220a..5502165c4c2a 100644 --- a/drivers/acorn/block/mfmhd.c +++ b/drivers/acorn/block/mfmhd.c @@ -1450,10 +1450,7 @@ int mfm_init (void) blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB?) read ahread */ -#ifndef MODULE - mfm_gendisk.next = gendisk_head; - gendisk_head = &mfm_gendisk; -#endif + add_gendisk(&mfm_gendisk); Busy = 0; lastspecifieddrive = -1; @@ -1512,6 +1509,7 @@ void cleanup_module(void) outw (0, mfm_irqenable); /* Required to enable IRQs from MFM podule */ free_irq(mfm_irq, NULL); unregister_blkdev(MAJOR_NR, "mfm"); + del_gendisk(&mfm_gendisk); if (ecs) ecard_release(ecs); if (mfm_addr) diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index c6dadff78c9e..00989cdff43c 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -38,9 +38,8 @@ obj-$(CONFIG_ACPI) += os.o acpi_ksyms.o obj-$(CONFIG_ACPI) += $(foreach dir,$(acpi-subdirs),$(dir)/$(dir).o) ifdef CONFIG_ACPI_KERNEL_CONFIG obj-$(CONFIG_ACPI) += acpiconf.o osconf.o -else - obj-$(CONFIG_ACPI) += driver.o endif +obj-$(CONFIG_ACPI) += driver.o ifeq ($(CONFIG_ACPI_BUSMGR),y) obj-y += ospm/ospm.o diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c index d196893d63af..bab3d0c12263 100644 --- a/drivers/atm/firestream.c +++ b/drivers/atm/firestream.c @@ -295,7 +295,6 @@ struct reginit_item PHY_NTC_INIT[] __initdata = { static int fs_keystream = 0; -static int fs_maxphy = 1; #ifdef DEBUG /* I didn't forget to set this to zero before shipping. Hit me with a stick @@ -309,7 +308,6 @@ static int fs_debug = 0; #ifdef DEBUG MODULE_PARM(fs_debug, "i"); #endif -MODULE_PARM(fs_maxphy, "i"); MODULE_PARM(loopback, "i"); MODULE_PARM(num, "i"); MODULE_PARM(fs_keystream, "i"); @@ -868,7 +866,6 @@ static int fs_open(struct atm_vcc *atm_vcc, short vpi, int vci) int bfp; int to; unsigned short tmc0; - int uaddr; func_enter (); @@ -911,9 +908,6 @@ static int fs_open(struct atm_vcc *atm_vcc, short vpi, int vci) txtp = &atm_vcc->qos.txtp; rxtp = &atm_vcc->qos.rxtp; - /* XXX Use VPI? How many bits? Which bits? */ - uaddr = atm_vcc->dev->number - dev->start_number; - if (!test_bit(ATM_VF_PARTIAL, &atm_vcc->flags)) { if (IS_FS50(dev)) { /* Increment the channel numer: take a free one next time. */ @@ -1018,7 +1012,7 @@ static int fs_open(struct atm_vcc *atm_vcc, short vpi, int vci) tc->TMC[2] = 0; /* Unused */ tc->TMC[3] = 0; /* Unused */ - tc->spec = uaddr << 16; /* UTOPIA address, UDF, HEC: Unused -> 0 */ + tc->spec = 0; /* UTOPIA address, UDF, HEC: Unused -> 0 */ tc->rtag[0] = 0; /* What should I do with routing tags??? -- Not used -- AS -- Thanks -- REW*/ tc->rtag[1] = 0; @@ -1087,7 +1081,7 @@ static int fs_open(struct atm_vcc *atm_vcc, short vpi, int vci) submit_command (dev, &dev->hp_txq, QE_CMD_REG_WR | QE_CMD_IMM_INQ, 0x80 + vcc->channo, - (uaddr << 28) | (vpi << 16) | vci, 0 ); /* XXX -- Use defines. */ + (vpi << 16) | vci, 0 ); /* XXX -- Use defines. */ } submit_command (dev, &dev->hp_txq, QE_CMD_RX_EN | QE_CMD_IMM_INQ | vcc->channo, @@ -1778,10 +1772,8 @@ static int __init fs_init (struct fs_dev *dev) if (IS_FS50 (dev)) { write_fs (dev, RAS0, RAS0_DCD_XHLT); - for (i=0;i<fs_maxphy;i++) { - dev->atm_dev[i]->ci_range.vpi_bits = 12; - dev->atm_dev[i]->ci_range.vci_bits = 16; - } + dev->atm_dev->ci_range.vpi_bits = 12; + dev->atm_dev->ci_range.vci_bits = 16; dev->nchannels = FS50_NR_CHANNELS; } else { write_fs (dev, RAS0, RAS0_DCD_XHLT @@ -1789,10 +1781,8 @@ static int __init fs_init (struct fs_dev *dev) | (((1 << FS155_VCI_BITS) - 1) * RAS0_VCSEL)); /* We can chose the split arbitarily. We might be able to support more. Whatever. This should do for now. */ - for (i=0;i<fs_maxphy;i++) { - dev->atm_dev[i]->ci_range.vpi_bits = FS155_VPI_BITS; - dev->atm_dev[i]->ci_range.vci_bits = FS155_VCI_BITS; - } + dev->atm_dev->ci_range.vpi_bits = FS155_VPI_BITS; + dev->atm_dev->ci_range.vci_bits = FS155_VCI_BITS; /* Address bits we can't use should be compared to 0. */ write_fs (dev, RAC, 0); @@ -1827,14 +1817,9 @@ static int __init fs_init (struct fs_dev *dev) } memset (dev->tx_inuse, 0, dev->nchannels / 8); - if (IS_FS50 (dev)) { - /* -- RAS1 : FS155 and 50 differ. Default (0) should be OK for FS155, FS50/multiphy needs the maxPHY set... */ - write_fs (dev, RAS1, (fs_maxphy - 1) * RAS1_UTREG); + /* -- RAS1 : FS155 and 50 differ. Default (0) should be OK for both */ + /* -- RAS2 : FS50 only: Default is OK. */ - /* -- RAS2 : FS50 only: Default is OK. */ - /* Enable selecting for Utopia address for multiphy configs. */ - write_fs (dev, RAS2, RAS2_USEL); - } /* DMAMODE, default should be OK. -- REW */ write_fs (dev, DMAMR, DMAMR_TX_MODE_FULL); @@ -1903,8 +1888,7 @@ static int __init fs_init (struct fs_dev *dev) add_timer (&dev->timer); #endif - for (i=0;i<fs_maxphy;i++) - dev->atm_dev[i]->dev_data = dev; + dev->atm_dev->dev_data = dev; func_exit (); return 0; @@ -1913,9 +1897,9 @@ static int __init fs_init (struct fs_dev *dev) static int __init firestream_init_one (struct pci_dev *pci_dev, const struct pci_device_id *ent) { + struct atm_dev *atm_dev; struct fs_dev *fs_dev; - int i; - + if (pci_enable_device(pci_dev)) goto err_out; @@ -1926,17 +1910,13 @@ static int __init firestream_init_one (struct pci_dev *pci_dev, goto err_out; memset (fs_dev, 0, sizeof (struct fs_dev)); - - for (i=0;i<fs_maxphy;i++) { - fs_dev->atm_dev[i] = atm_dev_register("fs", &ops, -1, NULL); - if (!fs_dev->atm_dev[i]) - goto err_out_free_atm_dev; - } - /* XXX if another device is registering atm devices at the same time - we get confusion. */ - fs_dev->start_number = fs_dev->atm_dev[0]->number; - + + atm_dev = atm_dev_register("fs", &ops, -1, NULL); + if (!atm_dev) + goto err_out_free_fs_dev; + fs_dev->pci_dev = pci_dev; + fs_dev->atm_dev = atm_dev; fs_dev->flags = ent->driver_data; if (fs_init(fs_dev)) @@ -1947,8 +1927,7 @@ static int __init firestream_init_one (struct pci_dev *pci_dev, return 0; err_out_free_atm_dev: - for (i--;i >= 0;i--) - atm_dev_deregister(fs_dev->atm_dev[i]); + atm_dev_deregister(atm_dev); err_out_free_fs_dev: kfree(fs_dev); err_out: @@ -2023,9 +2002,7 @@ void __devexit firestream_remove_one (struct pci_dev *pdev) free_irq (dev->irq, dev); del_timer (&dev->timer); - for (i=0;i<fs_maxphy;i++) - atm_dev_deregister(dev->atm_dev[i]); - + atm_dev_deregister(dev->atm_dev); free_queue (dev, &dev->hp_txq); free_queue (dev, &dev->lp_txq); free_queue (dev, &dev->tx_relq); diff --git a/drivers/atm/firestream.h b/drivers/atm/firestream.h index 273bc41c5b39..8ef266cc8a32 100644 --- a/drivers/atm/firestream.h +++ b/drivers/atm/firestream.h @@ -466,7 +466,6 @@ struct freepool { int n; }; -#define MAX_PHY 0x20 struct fs_dev { struct fs_dev *next; /* other FS devices */ @@ -474,9 +473,8 @@ struct fs_dev { unsigned char irq; /* IRQ */ struct pci_dev *pci_dev; /* PCI stuff */ - struct atm_dev *atm_dev[MAX_PHY]; + struct atm_dev *atm_dev; struct timer_list timer; - int start_number; unsigned long hw_base; /* mem base address */ unsigned long base; /* Mapping of base address */ diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c index f510b00e2c26..afda5fa3a405 100644 --- a/drivers/block/DAC960.c +++ b/drivers/block/DAC960.c @@ -1938,13 +1938,7 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller) /* Install the Generic Disk Information structure at the end of the list. */ - if ((GenericDiskInfo = gendisk_head) != NULL) - { - while (GenericDiskInfo->next != NULL) - GenericDiskInfo = GenericDiskInfo->next; - GenericDiskInfo->next = &Controller->GenericDiskInfo; - } - else gendisk_head = &Controller->GenericDiskInfo; + add_gendisk(&Controller->GenericDiskInfo); /* Indicate the Block Device Registration completed successfully, */ @@ -1980,16 +1974,7 @@ static void DAC960_UnregisterBlockDevice(DAC960_Controller_T *Controller) /* Remove the Generic Disk Information structure from the list. */ - if (gendisk_head != &Controller->GenericDiskInfo) - { - GenericDiskInfo_T *GenericDiskInfo = gendisk_head; - while (GenericDiskInfo != NULL && - GenericDiskInfo->next != &Controller->GenericDiskInfo) - GenericDiskInfo = GenericDiskInfo->next; - if (GenericDiskInfo != NULL) - GenericDiskInfo->next = GenericDiskInfo->next->next; - } - else gendisk_head = Controller->GenericDiskInfo.next; + del_gendisk(&Controller->GenericDiskInfo); } diff --git a/drivers/block/acsi.c b/drivers/block/acsi.c index e1d1a3566674..dbd637a5e89f 100644 --- a/drivers/block/acsi.c +++ b/drivers/block/acsi.c @@ -1792,8 +1792,7 @@ int acsi_init( void ) blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read-ahead */ - acsi_gendisk.next = gendisk_head; - gendisk_head = &acsi_gendisk; + add_gendisk(&acsi_gendisk); #ifdef CONFIG_ATARI_SLM err = slm_init(); @@ -1817,8 +1816,6 @@ int init_module(void) void cleanup_module(void) { - struct gendisk ** gdp; - del_timer( &acsi_timer ); blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); atari_stram_free( acsi_buffer ); @@ -1826,13 +1823,7 @@ void cleanup_module(void) if (devfs_unregister_blkdev( MAJOR_NR, "ad" ) != 0) printk( KERN_ERR "acsi: cleanup_module failed\n"); - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) - if (*gdp == &acsi_gendisk) - break; - if (!*gdp) - printk( KERN_ERR "acsi: entry in disk chain missing!\n" ); - else - *gdp = (*gdp)->next; + del_gendisk(&acsi_gendisk); } #endif diff --git a/drivers/block/blkpg.c b/drivers/block/blkpg.c index 43f42cb65917..166ae2505130 100644 --- a/drivers/block/blkpg.c +++ b/drivers/block/blkpg.c @@ -54,17 +54,6 @@ * Note that several drives may have the same major. */ -/* a linear search, superfluous when dev is a pointer */ -static struct gendisk *get_gendisk(kdev_t dev) { - struct gendisk *g; - int m = MAJOR(dev); - - for (g = gendisk_head; g; g = g->next) - if (g->major == m) - break; - return g; -} - /* * Add a partition. * diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 0c1a044f4172..0539f3aa5945 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -1965,8 +1965,7 @@ static int __init cciss_init_one(struct pci_dev *pdev, hba[i]->gendisk.nr_real = hba[i]->num_luns; /* Get on the disk list */ - hba[i]->gendisk.next = gendisk_head; - gendisk_head = &(hba[i]->gendisk); + add_gendisk(&(hba[i]->gendisk)); cciss_geninit(i); for(j=0; j<NWD; j++) @@ -1982,7 +1981,6 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev) { ctlr_info_t *tmp_ptr; int i; - struct gendisk *g; if (pdev->driver_data == NULL) { @@ -2007,19 +2005,8 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev) /* remove it from the disk list */ - if (gendisk_head == &(hba[i]->gendisk)) - { - gendisk_head = hba[i]->gendisk.next; - } else - { - for(g=gendisk_head; g ; g=g->next) - { - if(g->next == &(hba[i]->gendisk)) - { - g->next = hba[i]->gendisk.next; - } - } - } + del_gendisk(&(hba[i]->gendisk)); + pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof(CommandList_struct), hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle); pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof( ErrorInfo_struct), diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c index dc2287324a7e..b8ed321cae32 100644 --- a/drivers/block/cpqarray.c +++ b/drivers/block/cpqarray.c @@ -311,7 +311,6 @@ int __init init_module(void) void cleanup_module(void) { int i; - struct gendisk *g; char buff[4]; for(i=0; i<nr_ctlr; i++) { @@ -335,16 +334,7 @@ void cleanup_module(void) hba[i]->cmd_pool_dhandle); kfree(hba[i]->cmd_pool_bits); - if (gendisk_head == &ida_gendisk[i]) { - gendisk_head = ida_gendisk[i].next; - } else { - for(g=gendisk_head; g; g=g->next) { - if (g->next == &ida_gendisk[i]) { - g->next = ida_gendisk[i].next; - break; - } - } - } + del_gendisk(&ida_gendisk[i]); } remove_proc_entry("cpqarray", proc_root_driver); kfree(ida); @@ -550,8 +540,7 @@ int __init cpqarray_init(void) ida_gendisk[i].nr_real = 0; /* Get on the disk list */ - ida_gendisk[i].next = gendisk_head; - gendisk_head = &ida_gendisk[i]; + add_gendisk(&ida_gendisk[i]); init_timer(&hba[i]->timer); hba[i]->timer.expires = jiffies + IDA_TIMER; diff --git a/drivers/block/genhd.c b/drivers/block/genhd.c index 660289e94de7..4503fcdb2356 100644 --- a/drivers/block/genhd.c +++ b/drivers/block/genhd.c @@ -17,6 +17,75 @@ #include <linux/blk.h> #include <linux/init.h> + +struct gendisk *gendisk_head; + +void +add_gendisk(struct gendisk *gp) +{ + gp->next = gendisk_head; + gendisk_head = gp; +} + +void +del_gendisk(struct gendisk *gp) +{ + struct gendisk **gpp; + + for (gpp = &gendisk_head; *gpp; gpp = &((*gpp)->next)) + if (*gpp == gp) + break; + if (*gpp) + *gpp = (*gpp)->next; +} + +struct gendisk * +get_gendisk(kdev_t dev) +{ + struct gendisk *gp = NULL; + int maj = MAJOR(dev); + + for (gp = gendisk_head; gp; gp = gp->next) + if (gp->major == maj) + return gp; + return NULL; +} + +#ifdef CONFIG_PROC_FS +int +get_partition_list(char *page, char **start, off_t offset, int count) +{ + struct gendisk *gp; + char buf[64]; + int len, n; + + len = sprintf(page, "major minor #blocks name\n\n"); + for (gp = gendisk_head; gp; gp = gp->next) { + for (n = 0; n < (gp->nr_real << gp->minor_shift); n++) { + if (gp->part[n].nr_sects == 0) + continue; + + len += snprintf(page + len, 63, + "%4d %4d %10d %s\n", + gp->major, n, gp->sizes[n], + disk_name(gp, n, buf)); + if (len < offset) + offset -= len, len = 0; + else if (len >= offset + count) + goto out; + } + } + +out: + *start = page + offset; + len -= offset; + if (len < 0) + len = 0; + return len > count ? count : len; +} +#endif + + extern int blk_dev_init(void); #ifdef CONFIG_BLK_DEV_DAC960 extern void DAC960_Initialize(void); diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 9cd9ff915e94..9f1c8140d5e3 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -131,7 +131,7 @@ static inline int get_max_sectors(kdev_t dev) return max_sectors[MAJOR(dev)][MINOR(dev)]; } -inline request_queue_t *__blk_get_queue(kdev_t dev) +inline request_queue_t *blk_get_queue(kdev_t dev) { struct blk_dev_struct *bdev = blk_dev + MAJOR(dev); @@ -141,22 +141,6 @@ inline request_queue_t *__blk_get_queue(kdev_t dev) return &blk_dev[MAJOR(dev)].request_queue; } -/* - * NOTE: the device-specific queue() functions - * have to be atomic! - */ -request_queue_t *blk_get_queue(kdev_t dev) -{ - request_queue_t *ret; - unsigned long flags; - - spin_lock_irqsave(&io_request_lock,flags); - ret = __blk_get_queue(dev); - spin_unlock_irqrestore(&io_request_lock,flags); - - return ret; -} - static int __blk_cleanup_queue(struct list_head *head) { struct request *rq; @@ -1272,7 +1256,6 @@ EXPORT_SYMBOL(end_that_request_first); EXPORT_SYMBOL(end_that_request_last); EXPORT_SYMBOL(blk_init_queue); EXPORT_SYMBOL(blk_get_queue); -EXPORT_SYMBOL(__blk_get_queue); EXPORT_SYMBOL(blk_cleanup_queue); EXPORT_SYMBOL(blk_queue_headactive); EXPORT_SYMBOL(blk_queue_make_request); diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c index e83baf6bb108..0d5763f242ed 100644 --- a/drivers/block/paride/pd.c +++ b/drivers/block/paride/pd.c @@ -455,8 +455,7 @@ int pd_init (void) pd_gendisk.major = major; pd_gendisk.major_name = name; - pd_gendisk.next = gendisk_head; - gendisk_head = &pd_gendisk; + add_gendisk(&pd_gendisk); for(i=0;i<PD_DEVS;i++) pd_blocksizes[i] = 1024; blksize_size[MAJOR_NR] = pd_blocksizes; @@ -642,12 +641,7 @@ void cleanup_module(void) int unit; devfs_unregister_blkdev(MAJOR_NR,name); - for(gdp=&gendisk_head;*gdp;gdp=&((*gdp)->next)) - if (*gdp == &pd_gendisk) break; - if (*gdp) *gdp = (*gdp)->next; - - for (unit=0;unit<PD_UNITS;unit++) - if (PD.present) pi_release(PI); + del_gendisk(&pd_gendisk); } #endif diff --git a/drivers/block/ps2esdi.c b/drivers/block/ps2esdi.c index 3050ba13cd7a..9be57ac1558e 100644 --- a/drivers/block/ps2esdi.c +++ b/drivers/block/ps2esdi.c @@ -184,8 +184,7 @@ int __init ps2esdi_init(void) read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read ahead */ /* some minor housekeeping - setup the global gendisk structure */ - ps2esdi_gendisk.next = gendisk_head; - gendisk_head = &ps2esdi_gendisk; + add_gendisk(&ps2esdi_gendisk); ps2esdi_geninit(); return 0; } /* ps2esdi_init */ @@ -232,6 +231,7 @@ cleanup_module(void) free_dma(dma_arb_level); free_irq(PS2ESDI_IRQ, NULL) devfs_unregister_blkdev(MAJOR_NR, "ed"); + del_gendisk(&ps2esdi_gendisk); blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); } #endif /* MODULE */ diff --git a/drivers/block/xd.c b/drivers/block/xd.c index b611664451af..905223a9ab33 100644 --- a/drivers/block/xd.c +++ b/drivers/block/xd.c @@ -173,8 +173,7 @@ int __init xd_init (void) devfs_handle = devfs_mk_dir (NULL, xd_gendisk.major_name, NULL); blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read ahead */ - xd_gendisk.next = gendisk_head; - gendisk_head = &xd_gendisk; + add_gendisk(&xd_gendisk); xd_geninit(); return 0; @@ -1112,18 +1111,12 @@ MODULE_PARM(nodma, "i"); static void xd_done (void) { - struct gendisk ** gdp; - blksize_size[MAJOR_NR] = NULL; blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); blk_size[MAJOR_NR] = NULL; hardsect_size[MAJOR_NR] = NULL; read_ahead[MAJOR_NR] = 0; - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) - if (*gdp == &xd_gendisk) - break; - if (*gdp) - *gdp = (*gdp)->next; + del_gendisk(&xd_gendisk); release_region(xd_iobase,4); } diff --git a/drivers/char/sh-sci.c b/drivers/char/sh-sci.c index 6eeabcaed2c8..4c27b37b75e8 100644 --- a/drivers/char/sh-sci.c +++ b/drivers/char/sh-sci.c @@ -44,7 +44,7 @@ #include <linux/generic_serial.h> -#ifdef CONFIG_DEBUG_KERNEL_WITH_GDB_STUB +#ifdef CONFIG_SH_STANDARD_BIOS #include <asm/sh_bios.h> #endif @@ -94,6 +94,7 @@ MODULE_PARM(sci_debug, "i"); #define dprintk(x...) do { if (sci_debug) printk(x); } while(0) +#ifdef CONFIG_SERIAL_CONSOLE static void put_char(struct sci_port *port, char c) { unsigned long flags; @@ -111,8 +112,9 @@ static void put_char(struct sci_port *port, char c) restore_flags(flags); } +#endif -#ifdef CONFIG_DEBUG_KERNEL_WITH_GDB_STUB +#ifdef CONFIG_SH_STANDARD_BIOS static void handle_error(struct sci_port *port) { /* Clear error flags */ @@ -161,12 +163,12 @@ static __inline__ char lowhex(int x) * This routine does not wait for a positive acknowledge. */ -static void put_string(struct sci_port *port, - const char *buffer, int count) +#ifdef CONFIG_SERIAL_CONSOLE +static void put_string(struct sci_port *port, const char *buffer, int count) { int i; const unsigned char *p = buffer; -#ifdef CONFIG_DEBUG_KERNEL_WITH_GDB_STUB +#ifdef CONFIG_SH_STANDARD_BIOS int checksum; /* This call only does a trap the first time it is @@ -202,7 +204,7 @@ static void put_string(struct sci_port *port, put_char(port, *p++); } } - +#endif static struct real_driver sci_real_driver = { @@ -1159,7 +1161,7 @@ int __init sci_init(void) sci_init_drivers(); -#ifdef CONFIG_DEBUG_KERNEL_WITH_GDB_STUB +#ifdef CONFIG_SH_STANDARD_BIOS sh_bios_gdb_detach(); #endif return 0; /* Return -EIO when not detected */ diff --git a/drivers/i2o/i2o_block.c b/drivers/i2o/i2o_block.c index 9e402050ac8d..3e8f813e532d 100644 --- a/drivers/i2o/i2o_block.c +++ b/drivers/i2o/i2o_block.c @@ -1975,9 +1975,8 @@ int i2o_block_init(void) /* * Adding i2ob_gendisk into the gendisk list. - */ - i2ob_gendisk.next = gendisk_head; - gendisk_head = &i2ob_gendisk; + */ + add_gendisk(&i2ob_gendisk); return 0; } @@ -2047,20 +2046,6 @@ void cleanup_module(void) */ blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); - /* - * Why isnt register/unregister gendisk in the kernel ??? - */ - - if (gendisk_head == &i2ob_gendisk) { - gendisk_head = i2ob_gendisk.next; - } - else { - for (gdp = gendisk_head; gdp; gdp = gdp->next) - if (gdp->next == &i2ob_gendisk) - { - gdp->next = i2ob_gendisk.next; - break; - } - } + del_gendisk(&i2ob_gendisk); } #endif diff --git a/drivers/ide/hd.c b/drivers/ide/hd.c index 5ccc84574f2d..ab816436b09c 100644 --- a/drivers/ide/hd.c +++ b/drivers/ide/hd.c @@ -842,8 +842,7 @@ int __init hd_init(void) } blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read-ahead */ - hd_gendisk.next = gendisk_head; - gendisk_head = &hd_gendisk; + add_gendisk(&hd_gendisk, MAJOR_NR); init_timer(&device_timer); device_timer.function = hd_times_out; hd_geninit(); diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index ca70cb81f789..ce9489746d22 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c @@ -747,7 +747,7 @@ static int init_irq (ide_hwif_t *hwif) */ static void init_gendisk (ide_hwif_t *hwif) { - struct gendisk *gd, **gdp; + struct gendisk *gd; unsigned int unit, units, minors; int *bs, *max_sect, *max_ra; extern devfs_handle_t ide_devfs_handle; @@ -800,8 +800,8 @@ static void init_gendisk (ide_hwif_t *hwif) if (gd->flags) memset (gd->flags, 0, sizeof *gd->flags * units); - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) ; - hwif->gd = *gdp = gd; /* link onto tail of list */ + hwif->gd = gd; + add_gendisk(gd); for (unit = 0; unit < units; ++unit) { if (hwif->drives[unit].present) { diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 9cb992d6c374..c64ba73fcf07 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -2059,7 +2059,7 @@ jump_eight: void ide_unregister (unsigned int index) { - struct gendisk *gd, **gdp; + struct gendisk *gd; ide_drive_t *drive, *d; ide_hwif_t *hwif, *g; ide_hwgroup_t *hwgroup; @@ -2179,13 +2179,9 @@ void ide_unregister (unsigned int index) blk_dev[hwif->major].data = NULL; blk_dev[hwif->major].queue = NULL; blksize_size[hwif->major] = NULL; - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) - if (*gdp == hwif->gd) - break; - if (*gdp == NULL) - printk("gd not in disk chain!\n"); - else { - gd = *gdp; *gdp = gd->next; + gd = hwif->gd; + if (gd) { + del_gendisk(gd); kfree(gd->sizes); kfree(gd->part); if (gd->de_arr) @@ -2193,6 +2189,7 @@ void ide_unregister (unsigned int index) if (gd->flags) kfree (gd->flags); kfree(gd); + hwif->gd = NULL; } old_hwif = *hwif; init_hwif_data (index); /* restore hwif data to pristine status */ diff --git a/drivers/macintosh/macserial.c b/drivers/macintosh/macserial.c index f1bd198dfd6c..230a56ae6772 100644 --- a/drivers/macintosh/macserial.c +++ b/drivers/macintosh/macserial.c @@ -32,7 +32,7 @@ #endif #include <linux/slab.h> -#include <asm/init.h> +#include <asm/sections.h> #include <asm/io.h> #include <asm/pgtable.h> #include <asm/irq.h> @@ -185,9 +185,9 @@ serial_paranoia_check(struct mac_serial *info, dev_t device, const char *routine) { #ifdef SERIAL_PARANOIA_CHECK - static const char *badmagic = + static const char badmagic[] = KERN_WARNING "Warning: bad magic number for serial struct (%d, %d) in %s\n"; - static const char *badinfo = + static const char badinfo[] = KERN_WARNING "Warning: null mac_serial for (%d, %d) in %s\n"; if (!info) { @@ -418,7 +418,8 @@ static _INLINE_ void receive_chars(struct mac_serial *info, if (tty->flip.count >= TTY_FLIPBUF_SIZE) { static int flip_buf_ovf; if (++flip_buf_ovf <= 1) - printk("FB. overflow: %d\n", flip_buf_ovf); + printk(KERN_WARNING "FB. overflow: %d\n", + flip_buf_ovf); break; } tty->flip.count++; @@ -513,7 +514,7 @@ static _INLINE_ void status_handle(struct mac_serial *info) if ((status & CTS) == 0) { if (info->tx_stopped) { #ifdef SERIAL_DEBUG_FLOW - printk("CTS up\n"); + printk(KERN_DEBUG "CTS up\n"); #endif info->tx_stopped = 0; if (!info->tx_active) @@ -521,7 +522,7 @@ static _INLINE_ void status_handle(struct mac_serial *info) } } else { #ifdef SERIAL_DEBUG_FLOW - printk("CTS down\n"); + printk(KERN_DEBUG "CTS down\n"); #endif info->tx_stopped = 1; } @@ -568,7 +569,8 @@ static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs) int shift; if (!(info->flags & ZILOG_INITIALIZED)) { - printk("rs_interrupt: irq %d, port not initialized\n", irq); + printk(KERN_WARNING "rs_interrupt: irq %d, port not " + "initialized\n", irq); disable_irq(irq); return; } @@ -589,7 +591,7 @@ static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs) for (;;) { zs_intreg = read_zsreg(info->zs_chan_a, 3) >> shift; #ifdef SERIAL_DEBUG_INTR - printk("rs_interrupt: irq %d, zs_intreg 0x%x\n", + printk(KERN_DEBUG "rs_interrupt: irq %d, zs_intreg 0x%x\n", irq, (int)zs_intreg); #endif @@ -662,7 +664,7 @@ static void rs_stop(struct tty_struct *tty) struct mac_serial *info = (struct mac_serial *)tty->driver_data; #ifdef SERIAL_DEBUG_STOP - printk("rs_stop %ld....\n", + printk(KERN_DEBUG "rs_stop %ld....\n", tty->ldisc.chars_in_buffer(tty)); #endif @@ -686,7 +688,7 @@ static void rs_start(struct tty_struct *tty) unsigned long flags; #ifdef SERIAL_DEBUG_STOP - printk("rs_start %ld....\n", + printk(KERN_DEBUG "rs_start %ld....\n", tty->ldisc.chars_in_buffer(tty)); #endif @@ -1214,13 +1216,8 @@ static int set_scc_power(struct mac_serial * info, int state) else feature_set(info->dev_node, FEATURE_Serial_IO_B); delay = 10; - if (info->is_cobalt_modem){ - mdelay(300); - feature_set(info->dev_node, FEATURE_Modem_power); - mdelay(5); - feature_clear(info->dev_node, FEATURE_Modem_power); - mdelay(10); - feature_set(info->dev_node, FEATURE_Modem_power); + if (info->is_cobalt_modem) { + feature_set_modem_power(info->dev_node, 1); delay = 2500; /* wait for 2.5s before using */ } #ifdef CONFIG_PMAC_PBOOK @@ -1228,11 +1225,13 @@ static int set_scc_power(struct mac_serial * info, int state) pmu_enable_irled(1); #endif /* CONFIG_PMAC_PBOOK */ } else { + /* TODO: Make that depend on a timer, don't power down + * immediately + */ PWRDBG("ttyS%02d: shutting down hardware\n", info->line); if (info->is_cobalt_modem) { PWRDBG("ttyS%02d: shutting down modem\n", info->line); - feature_clear(info->dev_node, FEATURE_Modem_power); - mdelay(10); + feature_set_modem_power(info->dev_node, 0); } #ifdef CONFIG_PMAC_PBOOK if (info->is_irda) @@ -1648,7 +1647,7 @@ static void rs_throttle(struct tty_struct * tty) struct mac_serial *info = (struct mac_serial *)tty->driver_data; unsigned long flags; #ifdef SERIAL_DEBUG_THROTTLE - printk("throttle %ld....\n",tty->ldisc.chars_in_buffer(tty)); + printk(KERN_DEBUG "throttle %ld....\n",tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->device, "rs_throttle")) @@ -1701,7 +1700,8 @@ static void rs_unthrottle(struct tty_struct * tty) struct mac_serial *info = (struct mac_serial *)tty->driver_data; unsigned long flags; #ifdef SERIAL_DEBUG_THROTTLE - printk("unthrottle %s: %d....\n",tty->ldisc.chars_in_buffer(tty)); + printk(KERN_DEBUG "unthrottle %s: %d....\n", + tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->device, "rs_unthrottle")) @@ -1855,13 +1855,11 @@ static int get_modem_info(struct mac_serial *info, unsigned int *value) static int set_modem_info(struct mac_serial *info, unsigned int cmd, unsigned int *value) { - int error; unsigned int arg, bits; unsigned long flags; - error = get_user(arg, value); - if (error) - return error; + if (get_user(arg, value)) + return -EFAULT; bits = (arg & TIOCM_RTS? RTS: 0) + (arg & TIOCM_DTR? DTR: 0); save_flags(flags); cli(); switch (cmd) { @@ -2000,13 +1998,13 @@ static void rs_close(struct tty_struct *tty, struct file * filp) * one, we've got real problems, since it means the * serial port won't be shutdown. */ - printk("rs_close: bad serial port count; tty->count is 1, " - "info->count is %d\n", info->count); + printk(KERN_ERR "rs_close: bad serial port count; tty->count " + "is 1, info->count is %d\n", info->count); info->count = 1; } if (--info->count < 0) { - printk("rs_close: bad serial port count for ttys%d: %d\n", - info->line, info->count); + printk(KERN_ERR "rs_close: bad serial port count for " + "ttys%d: %d\n", info->line, info->count); info->count = 0; } if (info->count) { @@ -2104,14 +2102,16 @@ static void rs_wait_until_sent(struct tty_struct *tty, int timeout) * interval should also be less than the timeout. */ if (info->timeout <= HZ/50) { - printk("macserial: invalid info->timeout=%d\n", info->timeout); + printk(KERN_INFO "macserial: invalid info->timeout=%d\n", + info->timeout); info->timeout = HZ/50+1; } char_time = (info->timeout - HZ/50) / info->xmit_fifo_size; char_time = char_time / 5; if (char_time > HZ) { - printk("macserial: char_time %ld >HZ !!!\n", char_time); + printk(KERN_WARNING "macserial: char_time %ld >HZ !!!\n", + char_time); char_time = 1; } else if (char_time == 0) char_time = 1; @@ -2374,7 +2374,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp) static void show_serial_version(void) { - printk("PowerMac Z8530 serial driver version 2.0\n"); + printk(KERN_INFO "PowerMac Z8530 serial driver version 2.0\n"); } /* @@ -2461,8 +2461,8 @@ probe_sccs() nchan = 0; chip = n; if (n >= NUM_CHANNELS) { - printk("Sorry, can't use %s: no more channels\n", - dev->full_name); + printk(KERN_WARNING "Sorry, can't use %s: no more " + "channels\n", dev->full_name); continue; } chan_a_index = 0; @@ -2631,7 +2631,8 @@ int macserial_init(void) /* If console serial line, then enable interrupts. */ if (zs_soft[channel].is_cons) { - printk("macserial: console line, enabling interrupt %d\n", zs_soft[channel].irq); + printk(KERN_INFO "macserial: console line, enabling " + "interrupt %d\n", zs_soft[channel].irq); panic("macserial: console not supported yet !"); write_zsreg(zs_soft[channel].zs_channel, R1, (EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB)); @@ -2669,7 +2670,7 @@ int macserial_init(void) init_waitqueue_head(&info->open_wait); init_waitqueue_head(&info->close_wait); info->timeout = HZ; - printk("tty%02d at 0x%08x (irq = %d)", info->line, + printk(KERN_INFO "tty%02d at 0x%08x (irq = %d)", info->line, info->port, info->irq); printk(" is a Z8530 ESCC"); connector = get_property(info->dev_node, "AAPL,connector", &lenp); diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index 1bc1608d75f5..f25c6e6f04c2 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c @@ -27,7 +27,7 @@ #include <asm/io.h> #include <asm/feature.h> #include <asm/mediabay.h> -#include <asm/init.h> +#include <asm/sections.h> #include <linux/adb.h> #include <linux/pmu.h> diff --git a/drivers/macintosh/rtc.c b/drivers/macintosh/rtc.c index 2bbb69123f04..8d05ad933589 100644 --- a/drivers/macintosh/rtc.c +++ b/drivers/macintosh/rtc.c @@ -49,12 +49,8 @@ void set_rtc_time(struct rtc_time *t) { unsigned long nowtime; - printk(KERN_INFO "rtc.c:set_rtc_time: %04d-%02d-%02d %02d:%02d:%02d.\n", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); - nowtime = mktime(t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); - printk(KERN_INFO "rtc.c:set_rtc_time: set rtc time to %ld seconds.\n", nowtime); - (ppc_md.set_rtc_time)(nowtime); } diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 504167fe5166..78b2dbb6de1e 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c @@ -42,6 +42,7 @@ #include <asm/io.h> #include <asm/pgtable.h> #include <asm/system.h> +#include <asm/sections.h> #include <asm/irq.h> #include <asm/hardirq.h> #include <asm/feature.h> @@ -1736,7 +1737,6 @@ int __openfirmware powerbook_sleep_Core99(void) int __openfirmware powerbook_sleep_3400(void) { int ret, i, x; - unsigned long msr; unsigned int hid0; unsigned long p, wait; struct adb_request sleep_req; diff --git a/drivers/md/lvm.c b/drivers/md/lvm.c index 7fc2f8bcc2ac..7d42369854b9 100644 --- a/drivers/md/lvm.c +++ b/drivers/md/lvm.c @@ -394,8 +394,6 @@ static struct gendisk lvm_gendisk = */ int lvm_init(void) { - struct gendisk *gendisk_ptr = NULL; - if (register_chrdev(LVM_CHAR_MAJOR, lvm_name, &lvm_chr_fops) < 0) { printk(KERN_ERR "%s -- register_chrdev failed\n", lvm_name); return -EIO; @@ -423,19 +421,7 @@ int lvm_init(void) lvm_init_vars(); lvm_geninit(&lvm_gendisk); - /* insert our gendisk at the corresponding major */ - if (gendisk_head != NULL) { - gendisk_ptr = gendisk_head; - while (gendisk_ptr->next != NULL && - gendisk_ptr->major > lvm_gendisk.major) { - gendisk_ptr = gendisk_ptr->next; - } - lvm_gendisk.next = gendisk_ptr->next; - gendisk_ptr->next = &lvm_gendisk; - } else { - gendisk_head = &lvm_gendisk; - lvm_gendisk.next = NULL; - } + add_gendisk(&lvm_gendisk); #ifdef LVM_HD_NAME /* reference from drivers/block/genhd.c */ @@ -469,8 +455,6 @@ int lvm_init(void) */ static void lvm_cleanup(void) { - struct gendisk *gendisk_ptr = NULL, *gendisk_ptr_prev = NULL; - devfs_unregister (lvm_devfs_handle); if (unregister_chrdev(LVM_CHAR_MAJOR, lvm_name) < 0) { @@ -481,16 +465,7 @@ static void lvm_cleanup(void) } - gendisk_ptr = gendisk_ptr_prev = gendisk_head; - while (gendisk_ptr != NULL) { - if (gendisk_ptr == &lvm_gendisk) - break; - gendisk_ptr_prev = gendisk_ptr; - gendisk_ptr = gendisk_ptr->next; - } - /* delete our gendisk from chain */ - if (gendisk_ptr == &lvm_gendisk) - gendisk_ptr_prev->next = gendisk_ptr->next; + del_gendisk(&lvm_gendisk); blk_size[MAJOR_NR] = NULL; blksize_size[MAJOR_NR] = NULL; diff --git a/drivers/md/md.c b/drivers/md/md.c index c484e420715e..3ca62c0b18af 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -222,18 +222,6 @@ static mddev_t * alloc_mddev (kdev_t dev) return mddev; } -struct gendisk * find_gendisk (kdev_t dev) -{ - struct gendisk *tmp = gendisk_head; - - while (tmp != NULL) { - if (tmp->major == MAJOR(dev)) - return (tmp); - tmp = tmp->next; - } - return (NULL); -} - mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr) { mdk_rdev_t * rdev; @@ -281,7 +269,7 @@ char * partition_name (kdev_t dev) /* * ok, add this new device name to the list */ - hd = find_gendisk (dev); + hd = get_gendisk (dev); dname->name = NULL; if (hd) dname->name = disk_name (hd, MINOR(dev), dname->namebuf); @@ -569,7 +557,7 @@ abort: static kdev_t dev_unit(kdev_t dev) { unsigned int mask; - struct gendisk *hd = find_gendisk(dev); + struct gendisk *hd = get_gendisk(dev); if (!hd) return 0; @@ -3515,9 +3503,8 @@ int md__init md_init (void) read_ahead[MAJOR_NR] = INT_MAX; - md_gendisk.next = gendisk_head; - gendisk_head = &md_gendisk; + add_gendisk(&md_gendisk); md_recovery_thread = md_register_thread(md_do_recovery, NULL, name); if (!md_recovery_thread) @@ -3843,8 +3830,6 @@ static void free_device_names(void) void cleanup_module (void) { - struct gendisk **gendisk_ptr; - md_unregister_thread(md_recovery_thread); devfs_unregister(devfs_handle); @@ -3854,15 +3839,9 @@ void cleanup_module (void) #ifdef CONFIG_PROC_FS remove_proc_entry("mdstat", NULL); #endif - - gendisk_ptr = &gendisk_head; - while (*gendisk_ptr) { - if (*gendisk_ptr == &md_gendisk) { - *gendisk_ptr = md_gendisk.next; - break; - } - gendisk_ptr = & (*gendisk_ptr)->next; - } + + del_gendisk(&md_gendisk); + blk_dev[MAJOR_NR].queue = NULL; blksize_size[MAJOR_NR] = NULL; blk_size[MAJOR_NR] = NULL; diff --git a/drivers/mtd/ftl.c b/drivers/mtd/ftl.c index e222dd4b3760..02b217399c4a 100644 --- a/drivers/mtd/ftl.c +++ b/drivers/mtd/ftl.c @@ -1428,8 +1428,7 @@ mod_init_t init_ftl(void) blksize_size[FTL_MAJOR] = ftl_blocksizes; ftl_gendisk.major = FTL_MAJOR; blk_init_queue(BLK_DEFAULT_QUEUE(FTL_MAJOR), &do_ftl_request); - ftl_gendisk.next = gendisk_head; - gendisk_head = &ftl_gendisk; + add_gendisk(&ftl_gendisk); register_mtd_user(&ftl_notifier); @@ -1438,19 +1437,13 @@ mod_init_t init_ftl(void) mod_exit_t cleanup_ftl(void) { - struct gendisk *gd, **gdp; - unregister_mtd_user(&ftl_notifier); unregister_blkdev(FTL_MAJOR, "ftl"); blk_cleanup_queue(BLK_DEFAULT_QUEUE(FTL_MAJOR)); blksize_size[FTL_MAJOR] = NULL; - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) - if (*gdp == &ftl_gendisk) { - gd = *gdp; *gdp = gd->next; - break; - } + del_gendisk(&ftl_gendisk); } module_init(init_ftl); diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c index d5d27d839593..21b3aa27f5d0 100644 --- a/drivers/mtd/nftlcore.c +++ b/drivers/mtd/nftlcore.c @@ -1059,8 +1059,7 @@ static int __init init_nftl(void) } blksize_size[MAJOR_NR] = nftl_blocksizes; - nftl_gendisk.next = gendisk_head; - gendisk_head = &nftl_gendisk; + add_gendisk(&nftl_gendisk); } register_mtd_user(&nftl_notifier); @@ -1083,11 +1082,7 @@ static void __exit cleanup_nftl(void) /* remove ourself from generic harddisk list FIXME: why can't I found this partition on /proc/partition */ - for (gdp = &gendisk_head; *gdp; gdp = &((*gdp)->next)) - if (*gdp == &nftl_gendisk) { - gd = *gdp; *gdp = gd->next; - break; - } + del_gendisk(&nftl_gendisk);: } module_init(init_nftl); diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c index 257389d33b36..3b52d93592a2 100644 --- a/drivers/net/irda/irda-usb.c +++ b/drivers/net/irda/irda-usb.c @@ -76,7 +76,8 @@ static struct usb_device_id dongles[] = { { USB_DEVICE(0x50f, 0x180), driver_info: IUC_SPEED_BUG | IUC_NO_WINDOW }, /* Extended Systems, Inc., XTNDAccess IrDA USB (ESI-9685) */ { USB_DEVICE(0x8e9, 0x100), driver_info: IUC_SPEED_BUG | IUC_NO_WINDOW }, - { match_flags: USB_DEVICE_ID_MATCH_INT_CLASS, + { match_flags: USB_DEVICE_ID_MATCH_INT_CLASS | + USB_DEVICE_ID_MATCH_INT_SUBCLASS, bInterfaceClass: USB_CLASS_APP_SPEC, bInterfaceSubClass: USB_CLASS_IRDA, driver_info: IUC_DEFAULT, }, diff --git a/drivers/net/smc9194.c b/drivers/net/smc9194.c index 41f13e9ae8ba..bb0334c2a188 100644 --- a/drivers/net/smc9194.c +++ b/drivers/net/smc9194.c @@ -88,7 +88,11 @@ static const char version[] = . Do you want to use 32 bit xfers? This should work on all chips, as . the chipset is designed to accommodate them. */ +#ifdef __sh__ +#undef USE_32_BIT +#else #define USE_32_BIT 1 +#endif /* .the SMC9194 can be at any of the following port addresses. To change, @@ -983,12 +987,6 @@ static int __init smc_probe(struct net_device *dev, int ioaddr) retval = -ENODEV; goto err_out; } - if (dev->irq == 2) { - /* Fixup for users that don't know that IRQ 2 is really IRQ 9, - * or don't know which one to set. - */ - dev->irq = 9; - } /* now, print out the card info, in a short format.. */ @@ -1369,13 +1367,11 @@ static void smc_rcv(struct net_device *dev) packet_length & 0x3 ); #else PRINTK3((" Reading %d words and %d byte(s) \n", - (packet_length >> 1 ), packet_length & 1 ); - if ( packet_length & 1 ) - *(data++) = inb( ioaddr + DATA_1 ); - insw(ioaddr + DATA_1 , data, (packet_length + 1 ) >> 1); + (packet_length >> 1 ), packet_length & 1 )); + insw(ioaddr + DATA_1 , data, packet_length >> 1); if ( packet_length & 1 ) { data += packet_length & ~1; - *((data++) = inb( ioaddr + DATA_1 ); + *(data++) = inb( ioaddr + DATA_1 ); } #endif #if SMC_DEBUG > 2 diff --git a/drivers/net/smc9194.h b/drivers/net/smc9194.h index f99d39627218..393ab909bd86 100644 --- a/drivers/net/smc9194.h +++ b/drivers/net/smc9194.h @@ -169,7 +169,8 @@ static const char * chip_ids[ 15 ] = { /* 5 */ "SMC91C95", NULL, /* 7 */ "SMC91C100", - NULL, NULL, NULL, NULL, + /* 8 */ "SMC91C100FD", + NULL, NULL, NULL, NULL, NULL, NULL}; /* diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c index b3b33e0fece5..67c168b4a65c 100644 --- a/drivers/net/wan/farsync.c +++ b/drivers/net/wan/farsync.c @@ -1200,7 +1200,8 @@ fst_ioctl ( struct net_device *dev, struct ifreq *ifr, int cmd ) /* Sanity check the parameters. We don't support partial writes * when going over the top */ - if ( wrthdr.size + wrthdr.offset > FST_MEMSIZE ) + if ( wrthdr.size > FST_MEMSIZE || wrthdr.offset > FST_MEMSIZE + || wrthdr.size + wrthdr.offset > FST_MEMSIZE ) { return -ENXIO; } diff --git a/drivers/net/wan/sdla_chdlc.c b/drivers/net/wan/sdla_chdlc.c index b5f027c17c41..3595ab117fab 100644 --- a/drivers/net/wan/sdla_chdlc.c +++ b/drivers/net/wan/sdla_chdlc.c @@ -48,6 +48,7 @@ * Aug 07, 1998 David Fong Initial version. *****************************************************************************/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/net/wan/sdla_fr.c b/drivers/net/wan/sdla_fr.c index 1032346d596a..ac21b5d108d1 100644 --- a/drivers/net/wan/sdla_fr.c +++ b/drivers/net/wan/sdla_fr.c @@ -138,6 +138,7 @@ * Jan 02, 1997 Gene Kozin Initial version. *****************************************************************************/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/net/wan/sdla_ft1.c b/drivers/net/wan/sdla_ft1.c index f00e8c335ff5..fe318be96194 100644 --- a/drivers/net/wan/sdla_ft1.c +++ b/drivers/net/wan/sdla_ft1.c @@ -20,6 +20,7 @@ * Aug 07, 1998 David Fong Initial version. *****************************************************************************/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/net/wan/sdla_ppp.c b/drivers/net/wan/sdla_ppp.c index 00d53beb38d0..66402177f8cc 100644 --- a/drivers/net/wan/sdla_ppp.c +++ b/drivers/net/wan/sdla_ppp.c @@ -90,6 +90,7 @@ * Jan 06, 1997 Gene Kozin Initial version. *****************************************************************************/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/net/wan/sdla_x25.c b/drivers/net/wan/sdla_x25.c index 928327df0f22..1ce92859616a 100644 --- a/drivers/net/wan/sdla_x25.c +++ b/drivers/net/wan/sdla_x25.c @@ -81,6 +81,7 @@ * Includes *=====================================================*/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/net/wan/wanpipe_multppp.c b/drivers/net/wan/wanpipe_multppp.c index d190eb322e2c..17a0f1f3f409 100644 --- a/drivers/net/wan/wanpipe_multppp.c +++ b/drivers/net/wan/wanpipe_multppp.c @@ -17,6 +17,7 @@ * module. *****************************************************************************/ +#include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> /* printk(), and other useful stuff */ #include <linux/stddef.h> /* offsetof(), etc. */ diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 1f143317d7e8..0a8c1bae7dd5 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -714,10 +714,9 @@ dasd_register_major (major_info_t * major_info) INIT_BLK_DEV (major, do_dasd_request, dasd_get_queue, NULL); - major_info->gendisk.major = major; - major_info->gendisk.next = gendisk_head; major_info->gendisk.sizes = blk_size[major]; - gendisk_head = &major_info->gendisk; + major_info->gendisk.major = major; + add_gendisk (&major_info->gendisk); return major; /* error handling - free the prior allocated memory */ @@ -775,7 +774,6 @@ dasd_unregister_major (major_info_t * major_info) { int rc = 0; int major; - struct gendisk *dd, *prev = NULL; unsigned long flags; if (major_info == NULL) { @@ -784,20 +782,8 @@ dasd_unregister_major (major_info_t * major_info) major = major_info->gendisk.major; INIT_BLK_DEV (major, NULL, NULL, NULL); - /* do the gendisk stuff */ - for (dd = gendisk_head; dd; dd = dd->next) { - if (dd == &major_info->gendisk) { - if (prev) - prev->next = dd->next; - else - gendisk_head = dd->next; - break; - } - prev = dd; - } - if (dd == NULL) { - return -ENOENT; - } + del_gendisk (&major_info->gendisk); + kfree (major_info->dasd_device); kfree (major_info->gendisk.part); diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 35ca6dc3147d..d8c61f5537f5 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -578,7 +578,6 @@ static struct gendisk sd_gendisk = static struct gendisk *sd_gendisks = &sd_gendisk; #define SD_GENDISK(i) sd_gendisks[(i) / SCSI_DISKS_PER_MAJOR] -#define LAST_SD_GENDISK sd_gendisks[N_USED_SD_MAJORS - 1] /* * rw_intr is the interrupt routine for the device driver. @@ -1147,12 +1146,10 @@ static int sd_init() sd_gendisks[i].part = sd + (i * SCSI_DISKS_PER_MAJOR << 4); sd_gendisks[i].sizes = sd_sizes + (i * SCSI_DISKS_PER_MAJOR << 4); sd_gendisks[i].nr_real = 0; - sd_gendisks[i].next = sd_gendisks + i + 1; sd_gendisks[i].real_devices = (void *) (rscsi_disks + i * SCSI_DISKS_PER_MAJOR); } - LAST_SD_GENDISK.next = NULL; return 0; cleanup_gendisks_flags: @@ -1184,19 +1181,13 @@ cleanup_devfs: static void sd_finish() { - struct gendisk *gendisk; int i; for (i = 0; i < N_USED_SD_MAJORS; i++) { blk_dev[SD_MAJOR(i)].queue = sd_find_queue; + add_gendisk(&sd_gendisks[i]); } - for (gendisk = gendisk_head; gendisk != NULL; gendisk = gendisk->next) - if (gendisk == sd_gendisks) - break; - if (gendisk == NULL) { - LAST_SD_GENDISK.next = gendisk_head; - gendisk_head = sd_gendisks; - } + for (i = 0; i < sd_template.dev_max; ++i) if (!rscsi_disks[i].capacity && rscsi_disks[i].device) { sd_init_onedisk(i); @@ -1377,10 +1368,7 @@ static int __init init_sd(void) static void __exit exit_sd(void) { - struct gendisk **prev_sdgd_link; - struct gendisk *sdgd; int i; - int removed = 0; scsi_unregister_module(MODULE_SCSI_DEV, &sd_template); @@ -1394,26 +1382,9 @@ static void __exit exit_sd(void) kfree(sd_blocksizes); kfree(sd_hardsizes); kfree((char *) sd); - - /* - * Now remove sd_gendisks from the linked list - */ - prev_sdgd_link = &gendisk_head; - while ((sdgd = *prev_sdgd_link) != NULL) { - if (sdgd >= sd_gendisks && sdgd <= &LAST_SD_GENDISK) { - removed++; - *prev_sdgd_link = sdgd->next; - continue; - } - prev_sdgd_link = &sdgd->next; - } - - if (removed != N_USED_SD_MAJORS) - printk("%s %d sd_gendisks in disk chain", - removed > N_USED_SD_MAJORS ? "total" : "just", removed); - } for (i = 0; i < N_USED_SD_MAJORS; i++) { + del_gendisk(&sd_gendisks[i]); blk_size[SD_MAJOR(i)] = NULL; hardsect_size[SD_MAJOR(i)] = NULL; read_ahead[SD_MAJOR(i)] = 0; |
