summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:14:29 -0800
committerLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:14:29 -0800
commit70a8be476e663526c3cb17a157c17ccf4fca5bd4 (patch)
tree9cb7529d5c1d7e7d90a21b1a6c9f6133fbbb0511 /drivers
parent1c3cefa582a6b598d204bad02676df300e457efa (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')
-rw-r--r--drivers/acorn/block/mfmhd.c6
-rw-r--r--drivers/acpi/Makefile3
-rw-r--r--drivers/atm/firestream.c61
-rw-r--r--drivers/atm/firestream.h4
-rw-r--r--drivers/block/DAC960.c19
-rw-r--r--drivers/block/acsi.c13
-rw-r--r--drivers/block/blkpg.c11
-rw-r--r--drivers/block/cciss.c19
-rw-r--r--drivers/block/cpqarray.c15
-rw-r--r--drivers/block/genhd.c69
-rw-r--r--drivers/block/ll_rw_blk.c19
-rw-r--r--drivers/block/paride/pd.c10
-rw-r--r--drivers/block/ps2esdi.c4
-rw-r--r--drivers/block/xd.c11
-rw-r--r--drivers/char/sh-sci.c16
-rw-r--r--drivers/i2o/i2o_block.c21
-rw-r--r--drivers/ide/hd.c3
-rw-r--r--drivers/ide/ide-probe.c6
-rw-r--r--drivers/ide/ide.c13
-rw-r--r--drivers/macintosh/macserial.c73
-rw-r--r--drivers/macintosh/mediabay.c2
-rw-r--r--drivers/macintosh/rtc.c4
-rw-r--r--drivers/macintosh/via-pmu.c2
-rw-r--r--drivers/md/lvm.c29
-rw-r--r--drivers/md/md.c33
-rw-r--r--drivers/mtd/ftl.c11
-rw-r--r--drivers/mtd/nftlcore.c9
-rw-r--r--drivers/net/irda/irda-usb.c3
-rw-r--r--drivers/net/smc9194.c18
-rw-r--r--drivers/net/smc9194.h3
-rw-r--r--drivers/net/wan/farsync.c3
-rw-r--r--drivers/net/wan/sdla_chdlc.c1
-rw-r--r--drivers/net/wan/sdla_fr.c1
-rw-r--r--drivers/net/wan/sdla_ft1.c1
-rw-r--r--drivers/net/wan/sdla_ppp.c1
-rw-r--r--drivers/net/wan/sdla_x25.c1
-rw-r--r--drivers/net/wan/wanpipe_multppp.c1
-rw-r--r--drivers/s390/block/dasd.c22
-rw-r--r--drivers/scsi/sd.c35
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;