rpms/kernel/FC-3 linux-2.6.11-ide-acfixes.patch, NONE, 1.1 kernel-2.6.spec, 1.822, 1.823
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Mon May 9 23:39:06 UTC 2005
- Previous message (by thread): rpms/kernel/FC-3 patch-2.6.11.8.bz2.sign, NONE, 1.1 .cvsignore, 1.119, 1.120 sources, 1.122, 1.123 patch-2.6.11.7.bz2.sign, 1.1, NONE
- Next message (by thread): rpms/kernel/FC-3/configs config-generic,1.5,1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: davej
Update of /cvs/dist/rpms/kernel/FC-3
In directory cvs.devel.redhat.com:/tmp/cvs-serv19603
Modified Files:
kernel-2.6.spec
Added Files:
linux-2.6.11-ide-acfixes.patch
Log Message:
Merge IDE fixes from 2.6.11-ac7
linux-2.6.11-ide-acfixes.patch:
drivers/cdrom/cdrom.c | 3
drivers/ide/Kconfig | 13
drivers/ide/arm/icside.c | 6
drivers/ide/cris/ide-v10.c | 6
drivers/ide/ide-cd.c | 119 ++++--
drivers/ide/ide-disk.c | 46 +-
drivers/ide/ide-dma.c | 13
drivers/ide/ide-floppy.c | 4
drivers/ide/ide-io.c | 64 +++
drivers/ide/ide-iops.c | 165 +++++---
drivers/ide/ide-pnp.c | 7
drivers/ide/ide-probe.c | 1
drivers/ide/ide-proc.c | 188 ++++++---
drivers/ide/ide-tape.c | 4
drivers/ide/ide-taskfile.c | 12
drivers/ide/ide.c | 437 ++++++++++++++++------
drivers/ide/legacy/ide-cs.c | 28 -
drivers/ide/pci/Makefile | 2
drivers/ide/pci/alim15x3.c | 2
drivers/ide/pci/cs5520.c | 11
drivers/ide/pci/delkin_cb.c | 140 +++++++
drivers/ide/pci/generic.c | 86 +++-
drivers/ide/pci/hpt366.c | 474 +++++++++++------------
drivers/ide/pci/it821x.c | 812 +++++++++++++++++++++++++++++++++++++++++
drivers/ide/pci/ns87415.c | 2
drivers/ide/pci/pdc202xx_old.c | 2
drivers/ide/pci/sgiioc4.c | 4
drivers/ide/pci/siimage.c | 8
drivers/ide/pci/sl82c105.c | 2
drivers/ide/pci/trm290.c | 7
drivers/ide/ppc/pmac.c | 6
drivers/ide/setup-pci.c | 82 +++-
drivers/macintosh/mediabay.c | 5
drivers/scsi/ide-scsi.c | 4
include/asm-i386/ide.h | 14
include/linux/ide.h | 47 +-
include/linux/pci_ids.h | 16
37 files changed, 2238 insertions(+), 604 deletions(-)
--- NEW FILE linux-2.6.11-ide-acfixes.patch ---
This patch contains the IDE fixes from 2.6.11-ac7
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/drivers/cdrom/cdrom.c linux-2.6.11/drivers/cdrom/cdrom.c
--- linux.vanilla-2.6.11/drivers/cdrom/cdrom.c 2005-03-05 15:17:01.000000000 +0000
+++ linux-2.6.11/drivers/cdrom/cdrom.c 2005-03-05 15:31:30.000000000 +0000
@@ -1131,7 +1131,8 @@
This ensures that the drive gets unlocked after a mount fails. This
is a goto to avoid bloating the driver with redundant code. */
clean_up_and_return:
- cdinfo(CD_WARNING, "open failed.\n");
+ /* Don't log this, its a perfectly normal user occurence */
+ /* cdinfo(CD_WARNING, "open failed.\n"); */
if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
cdo->lock_door(cdi, 0);
cdinfo(CD_OPEN, "door unlocked.\n");
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/drivers/ide/arm/icside.c linux-2.6.11/drivers/ide/arm/icside.c
--- linux.vanilla-2.6.11/drivers/ide/arm/icside.c 2005-03-05 15:17:01.000000000 +0000
+++ linux-2.6.11/drivers/ide/arm/icside.c 2005-03-06 14:46:16.000000000 +0000
@@ -502,9 +502,9 @@
hwif->ide_dma_off_quietly = icside_dma_off_quietly;
hwif->ide_dma_host_on = icside_dma_host_on;
hwif->ide_dma_on = icside_dma_on;
- hwif->dma_setup = icside_dma_setup;
- hwif->dma_exec_cmd = icside_dma_exec_cmd;
- hwif->dma_start = icside_dma_start;
+ hwif->ide_dma_setup = icside_dma_setup;
+ hwif->ide_dma_exec_cmd = icside_dma_exec_cmd;
+ hwif->ide_dma_start = icside_dma_start;
hwif->ide_dma_end = icside_dma_end;
hwif->ide_dma_test_irq = icside_dma_test_irq;
hwif->ide_dma_timeout = icside_dma_timeout;
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/drivers/ide/cris/ide-v10.c linux-2.6.11/drivers/ide/cris/ide-v10.c
--- linux.vanilla-2.6.11/drivers/ide/cris/ide-v10.c 2005-03-05 15:17:01.000000000 +0000
+++ linux-2.6.11/drivers/ide/cris/ide-v10.c 2005-03-06 14:46:16.000000000 +0000
@@ -332,9 +332,9 @@
hwif->atapi_output_bytes = &e100_atapi_output_bytes;
hwif->ide_dma_check = &e100_dma_check;
hwif->ide_dma_end = &e100_dma_end;
- hwif->dma_setup = &e100_dma_setup;
- hwif->dma_exec_cmd = &e100_dma_exec_cmd;
- hwif->dma_start = &e100_dma_start;
+ hwif->ide_dma_setup = &e100_dma_setup;
+ hwif->ide_dma_exec_cmd = &e100_dma_exec_cmd;
+ hwif->ide_dma_start = &e100_dma_start;
hwif->OUTB = &etrax100_ide_outb;
hwif->OUTW = &etrax100_ide_outw;
hwif->OUTBSYNC = &etrax100_ide_outbsync;
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/drivers/ide/ide.c linux-2.6.11/drivers/ide/ide.c
--- linux.vanilla-2.6.11/drivers/ide/ide.c 2005-03-05 15:17:01.000000000 +0000
+++ linux-2.6.11/drivers/ide/ide.c 2005-03-06 15:00:57.000000000 +0000
@@ -175,7 +175,8 @@
static int initializing; /* set while initializing built-in drivers */
DECLARE_MUTEX(ide_cfg_sem);
- __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
+EXPORT_SYMBOL_GPL(ide_cfg_sem);
+__cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
#ifdef CONFIG_BLK_DEV_IDEPCI
static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
@@ -205,11 +206,13 @@
static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
{
unsigned int unit;
+ unsigned int key = hwif->key;
/* bulk initialize hwif & drive info with zeros */
memset(hwif, 0, sizeof(ide_hwif_t));
/* fill in any non-zero initial values */
+ hwif->key = key + 1; /* Protected by ide_cfg_sem */
hwif->index = index;
hwif->major = ide_hwif_to_major[index];
@@ -320,6 +323,92 @@
#endif
}
+/*
+ * ide_drive_from_key - turn key into drive
+ * @kval: persistent key
+ *
+ * Convert a key into a drive. Currently the key is packed as
+ * [keyval] << 16 | hwif << 8 | drive_num. Caller must hold
+ * ide_settings_sem for the duration of the returned reference
+ */
+
+ide_drive_t *ide_drive_from_key(void *kval)
+{
+ unsigned long key = (unsigned long) kval;
+ int idx = (key >> 8) & 0xFF;
+ int drive = key & 3;
+ ide_hwif_t *hwif = &ide_hwifs[idx];
+ ide_drive_t *ret;
+
+ key >>= 16;
+
+ if(hwif->configured == 0 || hwif->present == 0 || hwif->drives[drive].dead || hwif->key != key)
+ ret = NULL;
+ else
+ ret = &ide_hwifs[idx].drives[drive];
+
+ return ret;
+}
+
+EXPORT_SYMBOL_GPL(ide_drive_from_key);
+
+/*
+ * ide_drive_to_key - turn drive to persistent key
+ * @drive: drive to use
+ *
+ * Convert drive into a key. Currently the key is packed as
+ * [keyval] << 16 | hwif << 8 | drive_num. Caller must hold
+ * ide_settings_sem for the duration of the returned reference
+ */
+
+void *ide_drive_to_key(ide_drive_t *drive)
+{
+ ide_hwif_t *hwif = HWIF(drive);
+ unsigned long val;
+
+ val = (hwif->index << 8) | (hwif->key << 16) | drive->select.b.unit;
+ return (void *)val;
+}
+
+/*
+ * ide_hwif_from_key - turn key into hwif
+ * @kval: persistent key
+ *
+ * Convert a key into a drive. Currently the key is packed as
+ * [keyval] << 16 | hwif << 8 | drive_num. Caller must hold
+ * ide_settings_sem for the duration of the returned reference
+ */
+
+ide_hwif_t *ide_hwif_from_key(void *kval)
+{
+ unsigned long key = (unsigned long) kval;
+ int idx = (key >> 8) & 0xFF;
+ ide_hwif_t *hwif = &ide_hwifs[idx];
+
+ key >>= 16;
+
+ if(hwif->configured == 0 || hwif->present == 0 || hwif->key != key)
+ return NULL;
+ return hwif;
+}
+
+/*
+ * ide_hwif_to_key - turn drive to persistent key
+ * @hwif: hwif to use
+ *
+ * Convert drive into a key. Currently the key is packed as
+ * [keyval] << 16 | hwif << 8 | drive_num. Caller must hold
+ * ide_settings_sem for the duration of the returned reference
+ */
+
+void *ide_hwif_to_key(ide_hwif_t *hwif)
+{
+ unsigned long val;
+
+ val = (hwif->index << 8) | (hwif->key << 16);
+ return (void *)val;
+}
+
/**
* ide_system_bus_speed - guess bus speed
*
@@ -368,11 +457,16 @@
}
/*
- * drives_lock protects the list of drives, drivers_lock the
- * list of drivers. Currently nobody takes both at once.
+ * drives_lock protects the list of drives, drivers lock the
+ * list of drivers. Currently nobody takes both at once.
+ * drivers_sem guards the drivers_list for readers that may
+ * sleep. It must be taken before drivers_lock. Take drivers_sem
+ * before ide_setting_sem and idecfg_sem before either of the
+ * others.
*/
static DEFINE_SPINLOCK(drives_lock);
+static DECLARE_MUTEX(drivers_sem);
static DEFINE_SPINLOCK(drivers_lock);
static LIST_HEAD(drivers);
@@ -382,7 +476,7 @@
{
struct list_head *p;
loff_t l = *pos;
- spin_lock(&drivers_lock);
+ down(&drivers_sem);
list_for_each(p, &drivers)
if (!l--)
return list_entry(p, ide_driver_t, drivers);
@@ -398,7 +492,7 @@
static void m_stop(struct seq_file *m, void *v)
[...4471 lines suppressed...]
- case 4: return 0x1e0;
- case 5: return 0x160;
default:
return 0;
- }
+ }
}
#define IDE_ARCH_OBSOLETE_INIT
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/include/linux/ide.h linux-2.6.11/include/linux/ide.h
--- linux.vanilla-2.6.11/include/linux/ide.h 2005-03-05 15:17:06.000000000 +0000
+++ linux-2.6.11/include/linux/ide.h 2005-03-06 17:30:15.000000000 +0000
@@ -190,7 +190,10 @@
#define WAIT_READY (5*HZ) /* 5sec - some laptops are very slow */
#define WAIT_PIDENTIFY (10*HZ) /* 10sec - should be less than 3ms (?), if all ATAPI CD is closed at boot */
#define WAIT_WORSTCASE (30*HZ) /* 30sec - worst case when spinning up */
-#define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */
+/* We should make this more tunable and smart: Windows apparently uses 7 secs
+ but we've seen drives take long. Equally some drives can now do fast fails
+ for RAID. Can probably be 10 but lets see if 15 helps */
+#define WAIT_CMD (15*HZ) /* 10sec - maximum wait for an IRQ to happen */
#define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */
#define HOST(hwif,chipset) \
@@ -748,6 +751,7 @@
unsigned int usage; /* current "open()" count for drive */
unsigned int failures; /* current failure count */
unsigned int max_failures; /* maximum allowed failure count */
+ u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */
u64 capacity64; /* total number of sectors */
@@ -764,6 +768,7 @@
#define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1)
struct ide_pci_device_s;
+struct ide_task_s;
typedef struct hwif_s {
struct hwif_s *next; /* for linked-list in ide_hwgroup_t */
@@ -771,6 +776,7 @@
struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */
struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
+ u16 key; /* /proc persistent keying */
char name[6]; /* name of interface, eg. "ide0" */
/* task file registers for pata and sata */
@@ -826,6 +832,9 @@
// u8 (*ratemask)(ide_drive_t *);
// /* device rate limiter */
// u8 (*ratefilter)(ide_drive_t *, u8);
+ /* hwif remove hook, called on unload/pci remove paths*/
+ void (*remove)(struct hwif_s *);
+ /* allow command filter/control */
#endif
void (*ata_input_data)(ide_drive_t *, void *, u32);
@@ -834,9 +843,9 @@
void (*atapi_input_bytes)(ide_drive_t *, void *, u32);
void (*atapi_output_bytes)(ide_drive_t *, void *, u32);
- int (*dma_setup)(ide_drive_t *);
- void (*dma_exec_cmd)(ide_drive_t *, u8);
- void (*dma_start)(ide_drive_t *);
+ int (*ide_dma_setup)(ide_drive_t *);
+ void (*ide_dma_exec_cmd)(ide_drive_t *, u8);
+ void (*ide_dma_start)(ide_drive_t *);
int (*ide_dma_end)(ide_drive_t *drive);
int (*ide_dma_check)(ide_drive_t *drive);
int (*ide_dma_on)(ide_drive_t *drive);
@@ -897,7 +906,9 @@
unsigned noprobe : 1; /* don't probe for this interface */
unsigned present : 1; /* this interface exists */
+ unsigned configured : 1; /* this hwif exists and is set up (may not be "present") */
unsigned hold : 1; /* this interface is always present */
+ unsigned user_dev : 1; /* user ioctl created device */
unsigned serialized : 1; /* serialized all channel operation */
unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */
unsigned reset : 1; /* reset after probe */
@@ -908,6 +919,7 @@
unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */
unsigned auto_poll : 1; /* supports nop auto-poll */
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
+ unsigned polling : 1; /* doing a polled command ignore irqs */
struct device gendev;
struct semaphore gendev_rel_sem; /* To deal with device release() */
@@ -1002,6 +1014,11 @@
extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val);
extern void ide_add_generic_settings(ide_drive_t *drive);
+extern void *ide_drive_to_key(ide_drive_t *drive);
+extern ide_drive_t *ide_drive_from_key(void *);
+extern void *ide_hwif_to_key(ide_hwif_t *hwif);
+extern ide_hwif_t *ide_hwif_from_key(void *);
+
/*
* /proc/ide interface
*/
@@ -1018,7 +1035,7 @@
extern void proc_ide_create(void);
extern void proc_ide_destroy(void);
extern void create_proc_ide_interfaces(void);
-void destroy_proc_ide_interface(ide_hwif_t *);
+extern void destroy_proc_ide_interface(ide_hwif_t *);
extern void ide_add_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *, void *);
extern void ide_remove_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *);
read_proc_t proc_ide_read_capacity;
@@ -1130,6 +1147,7 @@
extern int noautodma;
extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
+extern int ide_end_dequeued_request (ide_drive_t *drive, struct request *rq, int uptodate, int nrsecs);
/*
* This is used on exit from the driver to designate the next irq handler
@@ -1342,16 +1360,18 @@
extern void ide_pci_unregister_driver(struct pci_driver *driver);
void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *);
extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d);
+extern void ide_pci_remove_hwifs(struct pci_dev *dev);
extern void default_hwif_iops(ide_hwif_t *);
extern void default_hwif_mmiops(ide_hwif_t *);
+extern void removed_hwif_iops(ide_hwif_t *);
extern void default_hwif_transport(ide_hwif_t *);
-int ide_register_driver(ide_driver_t *driver);
-void ide_unregister_driver(ide_driver_t *driver);
-int ide_register_subdriver(ide_drive_t *, ide_driver_t *);
-int ide_unregister_subdriver (ide_drive_t *drive);
-int ide_replace_subdriver(ide_drive_t *drive, const char *driver);
+extern int ide_register_driver(ide_driver_t *driver);
+extern void ide_unregister_driver(ide_driver_t *driver);
+extern int ide_register_subdriver(ide_drive_t *, ide_driver_t *);
+extern int ide_unregister_subdriver (ide_drive_t *drive);
+extern int ide_replace_subdriver(ide_drive_t *drive, const char *driver);
#define ON_BOARD 1
#define NEVER_BOARD 0
@@ -1444,11 +1464,12 @@
extern int ide_hwif_request_regions(ide_hwif_t *hwif);
extern void ide_hwif_release_regions(ide_hwif_t* hwif);
-extern void ide_unregister (unsigned int index);
+extern int ide_unregister_hwif(ide_hwif_t *hwif);
+extern int __ide_unregister_hwif(ide_hwif_t *hwif);
-void ide_undecoded_slave(ide_hwif_t *);
+extern void ide_undecoded_slave(ide_hwif_t *);
-int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *));
+extern int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *));
extern int probe_hwif_init(ide_hwif_t *);
static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.11/include/linux/pci_ids.h linux-2.6.11/include/linux/pci_ids.h
--- linux.vanilla-2.6.11/include/linux/pci_ids.h 2005-03-05 15:17:06.000000000 +0000
+++ linux-2.6.11/include/linux/pci_ids.h 2005-03-08 10:15:31.000000000 +0000
@@ -352,10 +352,21 @@
#define PCI_DEVICE_ID_ATI_RS300_133 0x5831
#define PCI_DEVICE_ID_ATI_RS300_166 0x5832
#define PCI_DEVICE_ID_ATI_RS300_200 0x5833
+#define PCI_DEVICE_ID_ATI_RS350_100 0x7830
+#define PCI_DEVICE_ID_ATI_RS350_133 0x7831
+#define PCI_DEVICE_ID_ATI_RS350_166 0x7832
+#define PCI_DEVICE_ID_ATI_RS350_200 0x7833
+#define PCI_DEVICE_ID_ATI_RS400_100 0x5a30
+#define PCI_DEVICE_ID_ATI_RS400_133 0x5a31
+#define PCI_DEVICE_ID_ATI_RS400_166 0x5a32
+#define PCI_DEVICE_ID_ATI_RS400_200 0x5a33
+#define PCI_DEVICE_ID_ATI_RS480 0x5950
/* ATI IXP Chipset */
#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349
#define PCI_DEVICE_ID_ATI_IXP300_IDE 0x4369
+#define PCI_DEVICE_ID_ATI_IXP300_SATA 0x436e
#define PCI_DEVICE_ID_ATI_IXP400_IDE 0x4376
+#define PCI_DEVICE_ID_ATI_IXP400_SATA 0x4379
#define PCI_VENDOR_ID_VLSI 0x1004
#define PCI_DEVICE_ID_VLSI_82C592 0x0005
@@ -1678,6 +1696,8 @@
#define PCI_VENDOR_ID_ITE 0x1283
#define PCI_DEVICE_ID_ITE_IT8172G 0x8172
#define PCI_DEVICE_ID_ITE_IT8172G_AUDIO 0x0801
+#define PCI_DEVICE_ID_ITE_8211 0x8211
+#define PCI_DEVICE_ID_ITE_8212 0x8212
#define PCI_DEVICE_ID_ITE_8872 0x8872
#define PCI_DEVICE_ID_ITE_IT8330G_0 0xe886
@@ -2427,3 +2447,6 @@
#define PCI_DEVICE_ID_ARK_STING 0xa091
#define PCI_DEVICE_ID_ARK_STINGARK 0xa099
#define PCI_DEVICE_ID_ARK_2000MT 0xa0a1
+
+#define PCI_VENDOR_ID_WORKBIT 0x1145
+#define PCI_DEVICE_ID_WORKBIT_CB 0xf021
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-3/kernel-2.6.spec,v
retrieving revision 1.822
retrieving revision 1.823
diff -u -r1.822 -r1.823
--- kernel-2.6.spec 9 May 2005 23:21:00 -0000 1.822
+++ kernel-2.6.spec 9 May 2005 23:39:04 -0000 1.823
@@ -306,7 +306,7 @@
Patch2000: linux-2.6.11-vm-taint.patch
Patch2003: linux-2.6.9-vm-oomkiller-debugging.patch
-Patch2101: linux-2.6.9-ide-cd-early-EOF.patch
+Patch2100: linux-2.6.11-ide-acfixes.patch
Patch2999: linux-2.6.3-printopen.patch
@@ -608,8 +608,8 @@
%patch2003 -p1
# IDE bits.
-# Handle early EOF on CD's.
-%patch2101 -p1
+# Numerous fixes from 2.6.11-ac7
+%patch2100 -p1
#
# Local hack (off for any shipped kernels) to printk all files opened
@@ -916,6 +916,7 @@
- Rebase to 2.6.11.8
| Fixes CAN-2005-1368 (local DoS in key lookup). (#156680)
| Fixes CAN-2005-1369 (i2c alarms sysfs DoS). (#156683)
+- Merge IDE fixes from 2.6.11-ac7
* Sun May 1 2005 Dave Jones <davej at redhat.com>
- Various firewire fixes backported from -mm. (#133798)
- Previous message (by thread): rpms/kernel/FC-3 patch-2.6.11.8.bz2.sign, NONE, 1.1 .cvsignore, 1.119, 1.120 sources, 1.122, 1.123 patch-2.6.11.7.bz2.sign, 1.1, NONE
- Next message (by thread): rpms/kernel/FC-3/configs config-generic,1.5,1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list