Commit e737d9ff authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge kroah.com:/home/linux/linux/BK/bleeding-2.5

into kroah.com:/home/linux/linux/BK/gregkh-2.5
parents 10e040aa 27d23d3f
...@@ -2440,7 +2440,6 @@ D: implemented kmod ...@@ -2440,7 +2440,6 @@ D: implemented kmod
D: modularized BSD Unix domain sockets D: modularized BSD Unix domain sockets
N: Martin Kasper Petersen N: Martin Kasper Petersen
E: mkp@linuxcare.com
E: mkp@mkp.net E: mkp@mkp.net
D: PA-RISC port D: PA-RISC port
D: XFS file system D: XFS file system
...@@ -3466,14 +3465,10 @@ S: D-73732 Esslingen ...@@ -3466,14 +3465,10 @@ S: D-73732 Esslingen
S: Germany S: Germany
N: Leonard N. Zubkoff N: Leonard N. Zubkoff
E: lnz@dandelion.com
W: http://www.dandelion.com/Linux/ W: http://www.dandelion.com/Linux/
D: BusLogic SCSI driver D: BusLogic SCSI driver
D: Mylex DAC960 PCI RAID driver D: Mylex DAC960 PCI RAID driver
D: Miscellaneous kernel fixes D: Miscellaneous kernel fixes
S: 3078 Sulphur Spring Court
S: San Jose, California 95148
S: USA
N: Alessandro Zummo N: Alessandro Zummo
E: azummo@ita.flashnet.it E: azummo@ita.flashnet.it
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 5 PATCHLEVEL = 5
SUBLEVEL = 54 SUBLEVEL = 55
EXTRAVERSION = EXTRAVERSION =
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -303,11 +303,6 @@ config X86_POPAD_OK ...@@ -303,11 +303,6 @@ config X86_POPAD_OK
depends on !M386 depends on !M386
default y default y
config X86_USE_STRING_486
bool
depends on MELAN || M586MMX || M586TSC || M586 || M486
default y
config X86_ALIGNMENT_16 config X86_ALIGNMENT_16
bool bool
depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486 depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486
...@@ -345,11 +340,11 @@ config X86_OOSTORE ...@@ -345,11 +340,11 @@ config X86_OOSTORE
config X86_PREFETCH config X86_PREFETCH
bool bool
depends on MPENTIUMIII || MP4 depends on MPENTIUMIII || MPENTIUM4
default y default y
config X86_SSE2 config X86_SSE2
bool bool
depends on MK8 || MPENTIUM4 depends on MK8 || MPENTIUM4
default y default y
......
...@@ -419,8 +419,8 @@ edd_show_info_flags(struct edd_device *edev, char *buf, size_t count, ...@@ -419,8 +419,8 @@ edd_show_info_flags(struct edd_device *edev, char *buf, size_t count,
return 0; return 0;
} }
if (info->params.info_flags & EDD_INFO_DMA_BOUNDRY_ERROR_TRANSPARENT) if (info->params.info_flags & EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT)
p += snprintf(p, left, "DMA boundry error transparent\n"); p += snprintf(p, left, "DMA boundary error transparent\n");
if (info->params.info_flags & EDD_INFO_GEOMETRY_VALID) if (info->params.info_flags & EDD_INFO_GEOMETRY_VALID)
p += snprintf(p, left, "geometry valid\n"); p += snprintf(p, left, "geometry valid\n");
if (info->params.info_flags & EDD_INFO_REMOVABLE) if (info->params.info_flags & EDD_INFO_REMOVABLE)
......
...@@ -19,7 +19,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size, ...@@ -19,7 +19,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
void *ret; void *ret;
int gfp = GFP_ATOMIC; int gfp = GFP_ATOMIC;
if (dev == NULL || ((u32)*dev->dma_mask != 0xffffffff)) if (dev == NULL || (*dev->dma_mask < 0xffffffff))
gfp |= GFP_DMA; gfp |= GFP_DMA;
ret = (void *)__get_free_pages(gfp, get_order(size)); ret = (void *)__get_free_pages(gfp, get_order(size));
......
...@@ -276,8 +276,11 @@ static inline unsigned long get_cr2(void) ...@@ -276,8 +276,11 @@ static inline unsigned long get_cr2(void)
static inline void do_trap(int trapnr, int signr, char *str, int vm86, static inline void do_trap(int trapnr, int signr, char *str, int vm86,
struct pt_regs * regs, long error_code, siginfo_t *info) struct pt_regs * regs, long error_code, siginfo_t *info)
{ {
if (vm86 && regs->eflags & VM_MASK) if (regs->eflags & VM_MASK) {
goto vm86_trap; if (vm86)
goto vm86_trap;
goto trap_signal;
}
if (!(regs->xcs & 3)) if (!(regs->xcs & 3))
goto kernel_trap; goto kernel_trap;
......
...@@ -161,7 +161,7 @@ static struct temp_map { ...@@ -161,7 +161,7 @@ static struct temp_map {
} temp_mappings[] __initdata = { } temp_mappings[] __initdata = {
{ &temp_boot_pmds[0], (void *)(40UL * 1024 * 1024) }, { &temp_boot_pmds[0], (void *)(40UL * 1024 * 1024) },
{ &temp_boot_pmds[1], (void *)(42UL * 1024 * 1024) }, { &temp_boot_pmds[1], (void *)(42UL * 1024 * 1024) },
{ &temp_boot_pmds[1], (void *)(44UL * 1024 * 1024) }, { &temp_boot_pmds[2], (void *)(44UL * 1024 * 1024) },
{} {}
}; };
......
...@@ -173,7 +173,7 @@ static int atmtcp_v_ioctl(struct atm_dev *dev,unsigned int cmd,void *arg) ...@@ -173,7 +173,7 @@ static int atmtcp_v_ioctl(struct atm_dev *dev,unsigned int cmd,void *arg)
static int atmtcp_v_send(struct atm_vcc *vcc,struct sk_buff *skb) static int atmtcp_v_send(struct atm_vcc *vcc,struct sk_buff *skb)
{ {
struct atmtcp_dev_data *dev_data; struct atmtcp_dev_data *dev_data;
struct atm_vcc *out_vcc; struct atm_vcc *out_vcc=NULL; /* Initializer quietens GCC warning */
struct sk_buff *new_skb; struct sk_buff *new_skb;
struct atmtcp_hdr *hdr; struct atmtcp_hdr *hdr;
int size; int size;
......
...@@ -727,6 +727,7 @@ static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot) ...@@ -727,6 +727,7 @@ static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
cgc.cmd[0] = GPCMD_LOAD_UNLOAD; cgc.cmd[0] = GPCMD_LOAD_UNLOAD;
cgc.cmd[4] = 2 + (slot >= 0); cgc.cmd[4] = 2 + (slot >= 0);
cgc.cmd[8] = slot; cgc.cmd[8] = slot;
cgc.timeout = 60 * HZ;
/* The Sanyo 3 CD changer uses byte 7 of the /* The Sanyo 3 CD changer uses byte 7 of the
GPCMD_TEST_UNIT_READY to command to switch CDs instead of GPCMD_TEST_UNIT_READY to command to switch CDs instead of
...@@ -1901,6 +1902,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, ...@@ -1901,6 +1902,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
{ {
struct cdrom_device_ops *cdo = cdi->ops; struct cdrom_device_ops *cdo = cdi->ops;
struct cdrom_generic_command cgc; struct cdrom_generic_command cgc;
struct request_sense sense;
char buffer[32]; char buffer[32];
int ret = 0; int ret = 0;
...@@ -1935,9 +1937,11 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, ...@@ -1935,9 +1937,11 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
cgc.buffer = (char *) kmalloc(blocksize, GFP_KERNEL); cgc.buffer = (char *) kmalloc(blocksize, GFP_KERNEL);
if (cgc.buffer == NULL) if (cgc.buffer == NULL)
return -ENOMEM; return -ENOMEM;
memset(&sense, 0, sizeof(sense));
cgc.sense = &sense;
cgc.data_direction = CGC_DATA_READ; cgc.data_direction = CGC_DATA_READ;
ret = cdrom_read_block(cdi, &cgc, lba, 1, format, blocksize); ret = cdrom_read_block(cdi, &cgc, lba, 1, format, blocksize);
if (ret) { if (ret && sense.sense_key==0x05 && sense.asc==0x20 && sense.ascq==0x00) {
/* /*
* SCSI-II devices are not required to support * SCSI-II devices are not required to support
* READ_CD, so let's try switching block size * READ_CD, so let's try switching block size
......
...@@ -33,10 +33,11 @@ ip2_loadmain(int *, int *, unsigned char *, int ); // ref into ip2main.c ...@@ -33,10 +33,11 @@ ip2_loadmain(int *, int *, unsigned char *, int ); // ref into ip2main.c
*/ */
static int io[IP2_MAX_BOARDS]= { 0, 0, 0, 0 }; static int io[IP2_MAX_BOARDS]= { 0, 0, 0, 0 };
static int irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 }; static int irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 };
static int poll_only = 0;
#ifdef MODULE #ifdef MODULE
static int poll_only = 0;
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
MODULE_AUTHOR("Doug McNash"); MODULE_AUTHOR("Doug McNash");
MODULE_DESCRIPTION("Computone IntelliPort Plus Driver"); MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
......
...@@ -596,7 +596,7 @@ static ssize_t power_read_file (struct file *file, char *buf, size_t count, loff ...@@ -596,7 +596,7 @@ static ssize_t power_read_file (struct file *file, char *buf, size_t count, loff
if (*offset < 0) if (*offset < 0)
return -EINVAL; return -EINVAL;
if (count <= 0) if (count == 0 || count > 16384)
return 0; return 0;
if (*offset != 0) if (*offset != 0)
return 0; return 0;
......
...@@ -1511,7 +1511,8 @@ static int __init HiSax_init(void) ...@@ -1511,7 +1511,8 @@ static int __init HiSax_init(void)
nrcards, (nrcards > 1) ? "s" : ""); nrcards, (nrcards > 1) ? "s" : "");
/* Install only, if at least one card found */ /* Install only, if at least one card found */
HiSax_inithardware(NULL); if (!HiSax_inithardware(NULL))
return -ENODEV;
return 0; return 0;
out_tei: out_tei:
...@@ -1575,7 +1576,8 @@ int elsa_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot) ...@@ -1575,7 +1576,8 @@ int elsa_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
printk(KERN_DEBUG "HiSax: Total %d card%s defined\n", printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
nrcards, (nrcards > 1) ? "s" : ""); nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag); if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n"); printk(KERN_NOTICE "HiSax: module installed\n");
#endif #endif
return 0; return 0;
...@@ -1617,7 +1619,8 @@ int hfc_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot) ...@@ -1617,7 +1619,8 @@ int hfc_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
printk(KERN_DEBUG "HiSax: Total %d card%s defined\n", printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
nrcards, (nrcards > 1) ? "s" : ""); nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag); if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n"); printk(KERN_NOTICE "HiSax: module installed\n");
#endif #endif
return 0; return 0;
...@@ -1659,7 +1662,8 @@ int sedl_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot) ...@@ -1659,7 +1662,8 @@ int sedl_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
printk(KERN_DEBUG "HiSax: Total %d card%s defined\n", printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
nrcards, (nrcards > 1) ? "s" : ""); nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag); if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n"); printk(KERN_NOTICE "HiSax: module installed\n");
#endif #endif
return 0; return 0;
...@@ -1701,7 +1705,8 @@ int avm_a1_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot) ...@@ -1701,7 +1705,8 @@ int avm_a1_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
printk(KERN_DEBUG "HiSax: Total %d card%s defined\n", printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
nrcards, (nrcards > 1) ? "s" : ""); nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag); if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n"); printk(KERN_NOTICE "HiSax: module installed\n");
#endif #endif
return 0; return 0;
......
...@@ -183,7 +183,7 @@ static int check_apm_user(struct apm_user *as, const char *func) ...@@ -183,7 +183,7 @@ static int check_apm_user(struct apm_user *as, const char *func)
static ssize_t do_read(struct file *fp, char *buf, size_t count, loff_t *ppos) static ssize_t do_read(struct file *fp, char *buf, size_t count, loff_t *ppos)
{ {
struct apm_user * as; struct apm_user * as;
int i; size_t i;
apm_event_t event; apm_event_t event;
DECLARE_WAITQUEUE(wait, current); DECLARE_WAITQUEUE(wait, current);
......
# #
# Makefile for the kernel character device drivers. # Makefile for the video capture/playback device drivers.
# #
# All of the (potential) objects that export symbols. # All of the (potential) objects that export symbols.
......
...@@ -4158,7 +4158,6 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd, ...@@ -4158,7 +4158,6 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd,
{ {
struct zoran_status bs; struct zoran_status bs;
int norm, input, status; int norm, input, status;
unsigned long timeout;
if (zr->codec_mode != BUZ_MODE_IDLE) { if (zr->codec_mode != BUZ_MODE_IDLE) {
DEBUG1(printk(KERN_ERR DEBUG1(printk(KERN_ERR
...@@ -4204,9 +4203,8 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd, ...@@ -4204,9 +4203,8 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd,
/* sleep 1 second */ /* sleep 1 second */
timeout = jiffies + 1 * HZ; set_current_state(TASK_UNINTERRUPTIBLE);
while (jiffies < timeout) schedule_timeout(HZ);
schedule();
/* Get status of video decoder */ /* Get status of video decoder */
......
...@@ -13,7 +13,7 @@ config DEV_APPLETALK ...@@ -13,7 +13,7 @@ config DEV_APPLETALK
config LTPC config LTPC
tristate "Apple/Farallon LocalTalk PC support" tristate "Apple/Farallon LocalTalk PC support"
depends on DEV_APPLETALK depends on DEV_APPLETALK && (ISA || EISA)
help help
This allows you to use the AppleTalk PC card to connect to LocalTalk This allows you to use the AppleTalk PC card to connect to LocalTalk
networks. The card is also known as the Farallon PhoneNet PC card. networks. The card is also known as the Farallon PhoneNet PC card.
...@@ -24,7 +24,7 @@ config LTPC ...@@ -24,7 +24,7 @@ config LTPC
config COPS config COPS
tristate "COPS LocalTalk PC support" tristate "COPS LocalTalk PC support"
depends on DEV_APPLETALK depends on DEV_APPLETALK && (ISA || EISA)
help help
This allows you to use COPS AppleTalk cards to connect to LocalTalk This allows you to use COPS AppleTalk cards to connect to LocalTalk
networks. You also need version 1.3.3 or later of the netatalk networks. You also need version 1.3.3 or later of the netatalk
......
...@@ -114,8 +114,6 @@ static char version[] = ...@@ -114,8 +114,6 @@ static char version[] =
#include <asm/atari_stdma.h> #include <asm/atari_stdma.h>
extern struct net_device *init_etherdev(struct net_device *dev, int sizeof_private);
/* use 0 for production, 1 for verification, >2 for debug /* use 0 for production, 1 for verification, >2 for debug
*/ */
#ifndef NET_DEBUG #ifndef NET_DEBUG
......
...@@ -695,7 +695,7 @@ static int yenta_suspend(pci_socket_t *socket) ...@@ -695,7 +695,7 @@ static int yenta_suspend(pci_socket_t *socket)
/* /*
* This does not work currently. The controller * This does not work currently. The controller
* loses too much informationduring D3 to come up * loses too much information during D3 to come up
* cleanly. We should probably fix yenta_init() * cleanly. We should probably fix yenta_init()
* to update all the critical registers, notably * to update all the critical registers, notably
* the IO and MEM bridging region data.. That is * the IO and MEM bridging region data.. That is
......
...@@ -4,9 +4,11 @@ ...@@ -4,9 +4,11 @@
* Intel Corporation: Storage RAID Controllers * * Intel Corporation: Storage RAID Controllers *
* * * *
* gdth.c * * gdth.c *
* Copyright (C) 1995-01 ICP vortex, an Intel company, Achim Leubner * * Copyright (C) 1995-02 ICP vortex, an Intel company, Achim Leubner *
* <achim.leubner@intel.com> *
* * * *
* <achim@vortex.de> * * Additions/Fixes: Boji Tony Kannanthanam *
* <boji.t.kannanthanam@intel.com> *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published * * it under the terms of the GNU General Public License as published *
...@@ -22,9 +24,23 @@ ...@@ -22,9 +24,23 @@
* along with this kernel; if not, write to the Free Software * * along with this kernel; if not, write to the Free Software *
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* * * *
* Tested with Linux 1.2.13, ..., 2.2.19, ..., 2.4.7 * * Tested with Linux 1.2.13, ..., 2.2.20, ..., 2.4.18 *
* * * *
* $Log: gdth.c,v $ * $Log: gdth.c,v $
* Revision 1.61 2002/10/03 09:35:22 boji
* Fixed SCREENSERVICE intialisation in SMP cases.
* Added checks for gdth_polling before GDTH_HA_LOCK
*
* Revision 1.60 2002/02/05 09:35:22 achim
* MODULE_LICENSE only if kernel >= 2.4.11
*
* Revision 1.59 2002/01/30 09:46:33 achim
* Small changes
*
* Revision 1.58 2002/01/29 15:30:02 achim
* Set default value of shared_access to Y
* New status S_CACHE_RESERV for clustering added
*
* Revision 1.57 2001/08/21 11:16:35 achim * Revision 1.57 2001/08/21 11:16:35 achim
* Bugfix free_irq() * Bugfix free_irq()
* *
...@@ -232,7 +248,7 @@ ...@@ -232,7 +248,7 @@
* Initial revision * Initial revision
* *
************************************************************************/ ************************************************************************/
#ident "$Id: gdth.c,v 1.57 2001/08/21 11:16:35 achim Exp $" #ident "$Id: gdth.c,v 1.60 2002/02/05 09:35:22 achim Exp $"
/* All GDT Disk Array Controllers are fully supported by this driver. /* All GDT Disk Array Controllers are fully supported by this driver.
* This includes the PCI/EISA/ISA SCSI Disk Array Controllers and the * This includes the PCI/EISA/ISA SCSI Disk Array Controllers and the
...@@ -269,7 +285,7 @@ ...@@ -269,7 +285,7 @@
* *
* The default values are: "gdth=disable:N,reserve_mode:1,reverse_scan:N, * The default values are: "gdth=disable:N,reserve_mode:1,reverse_scan:N,
* max_ids:127,rescan:N,virt_ctr:N,hdr_channel:0, * max_ids:127,rescan:N,virt_ctr:N,hdr_channel:0,
* shared_access:N". * shared_access:Y".
* Here is another example: "gdth=reserve_list:0,1,2,0,0,1,3,0,rescan:Y". * Here is another example: "gdth=reserve_list:0,1,2,0,0,1,3,0,rescan:Y".
* *
* When loading the gdth driver as a module, the same options are available. * When loading the gdth driver as a module, the same options are available.
...@@ -670,7 +686,7 @@ static int rescan = 0; ...@@ -670,7 +686,7 @@ static int rescan = 0;
/* map channels to virtual controllers */ /* map channels to virtual controllers */
static int virt_ctr = 0; static int virt_ctr = 0;
/* shared access */ /* shared access */
static int shared_access = 0; static int shared_access = 1;
#ifdef MODULE #ifdef MODULE
#if LINUX_VERSION_CODE >= 0x02011A #if LINUX_VERSION_CODE >= 0x02011A
...@@ -2343,12 +2359,13 @@ static void gdth_next(int hanum) ...@@ -2343,12 +2359,13 @@ static void gdth_next(int hanum)
register Scsi_Cmnd *nscp; register Scsi_Cmnd *nscp;
unchar b, t, firsttime; unchar b, t, firsttime;
unchar this_cmd, next_cmd; unchar this_cmd, next_cmd;
ulong flags; ulong flags = 0;
int cmd_index; int cmd_index;
TRACE(("gdth_next() hanum %d\n",hanum)); TRACE(("gdth_next() hanum %d\n",hanum));
ha = HADATA(gdth_ctr_tab[hanum]); ha = HADATA(gdth_ctr_tab[hanum]);
GDTH_LOCK_HA(ha, flags); if (!gdth_polling)
GDTH_LOCK_HA(ha, flags);
ha->cmd_cnt = ha->cmd_offs_dpmem = 0; ha->cmd_cnt = ha->cmd_offs_dpmem = 0;
this_cmd = firsttime = TRUE; this_cmd = firsttime = TRUE;
...@@ -2443,10 +2460,12 @@ static void gdth_next(int hanum) ...@@ -2443,10 +2460,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
} }
} else } else
...@@ -2471,10 +2490,12 @@ static void gdth_next(int hanum) ...@@ -2471,10 +2490,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
} else { } else {
switch (nscp->cmnd[0]) { switch (nscp->cmnd[0]) {
...@@ -2500,16 +2521,20 @@ static void gdth_next(int hanum) ...@@ -2500,16 +2521,20 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
} else if (gdth_internal_cache_cmd(hanum,nscp)) { } else if (gdth_internal_cache_cmd(hanum,nscp)) {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
break; break;
...@@ -2524,10 +2549,12 @@ static void gdth_next(int hanum) ...@@ -2524,10 +2549,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
} else { } else {
nscp->cmnd[3] = (ha->hdr[t].devtype&1) ? 1:0; nscp->cmnd[3] = (ha->hdr[t].devtype&1) ? 1:0;
...@@ -2562,10 +2589,12 @@ static void gdth_next(int hanum) ...@@ -2562,10 +2589,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
} else if (!(cmd_index=gdth_fill_cache_cmd(hanum,nscp,t))) } else if (!(cmd_index=gdth_fill_cache_cmd(hanum,nscp,t)))
this_cmd = FALSE; this_cmd = FALSE;
...@@ -2581,10 +2610,12 @@ static void gdth_next(int hanum) ...@@ -2581,10 +2610,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in) if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++; nscp->SCp.have_data_in++;
else { else {
GDTH_UNLOCK_HA(ha,flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */ /* io_request_lock already active ! */
nscp->scsi_done(nscp); nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags); if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
} }
break; break;
} }
...@@ -2604,7 +2635,8 @@ static void gdth_next(int hanum) ...@@ -2604,7 +2635,8 @@ static void gdth_next(int hanum)
gdth_release_event(hanum); gdth_release_event(hanum);
} }
GDTH_UNLOCK_HA(ha, flags); if (!gdth_polling)
GDTH_UNLOCK_HA(ha, flags);
if (gdth_polling && ha->cmd_cnt > 0) { if (gdth_polling && ha->cmd_cnt > 0) {
if (!gdth_wait(hanum,cmd_index,POLL_TIMEOUT)) if (!gdth_wait(hanum,cmd_index,POLL_TIMEOUT))
...@@ -3512,9 +3544,13 @@ static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp) ...@@ -3512,9 +3544,13 @@ static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp)
ha->hdr[scp->target].cluster_type &= ~CLUSTER_RESERVED; ha->hdr[scp->target].cluster_type &= ~CLUSTER_RESERVED;
} }
memset((char*)scp->sense_buffer,0,16); memset((char*)scp->sense_buffer,0,16);
scp->sense_buffer[0] = 0x70; if (ha->status == (ushort)S_CACHE_RESERV) {
scp->sense_buffer[2] = NOT_READY; scp->result = (DID_OK << 16) | (RESERVATION_CONFLICT << 1);
scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1); } else {
scp->sense_buffer[0] = 0x70;
scp->sense_buffer[2] = NOT_READY;
scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
}
#if LINUX_VERSION_CODE >= 0x010300 #if LINUX_VERSION_CODE >= 0x010300
if (scp->done != gdth_scsi_done) if (scp->done != gdth_scsi_done)
#endif #endif
...@@ -3981,6 +4017,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp)) ...@@ -3981,6 +4017,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
return 0; return 0;
} }
printk("GDT: Storage RAID Controller Driver. Version: %s \n",GDTH_VERSION_STR);
/* initializations */ /* initializations */
gdth_polling = TRUE; b = 0; gdth_polling = TRUE; b = 0;
gdth_clear_events(); gdth_clear_events();
...@@ -4215,6 +4252,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp)) ...@@ -4215,6 +4252,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
gdth_pci_str pcistr[MAXHA]; gdth_pci_str pcistr[MAXHA];
cnt = gdth_search_pci(pcistr); cnt = gdth_search_pci(pcistr);
printk("GDT: Found %d PCI Storage RAID Controllers\n",cnt);
gdth_sort_pci(pcistr,cnt); gdth_sort_pci(pcistr,cnt);
for (ctr = 0; ctr < cnt; ++ctr) { for (ctr = 0; ctr < cnt; ++ctr) {
if (gdth_ctr_count >= MAXHA) if (gdth_ctr_count >= MAXHA)
...@@ -4229,8 +4267,8 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp)) ...@@ -4229,8 +4267,8 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
continue; continue;
} }
/* controller found and initialized */ /* controller found and initialized */
printk("Configuring GDT-PCI HA at %d/%d IRQ %u\n", printk("GDT CTR%d: Configuring GDT-PCI HA at %d/%d IRQ %u\n",
pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq); ctr,pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq);
#if LINUX_VERSION_CODE >= 0x010346 #if LINUX_VERSION_CODE >= 0x010346
if (request_irq(ha->irq, gdth_interrupt, if (request_irq(ha->irq, gdth_interrupt,
...@@ -4703,9 +4741,7 @@ void gdth_halt(void) ...@@ -4703,9 +4741,7 @@ void gdth_halt(void)
del_timer(&gdth_timer); del_timer(&gdth_timer);
#endif #endif
#if LINUX_VERSION_CODE >= 0x020100 #if LINUX_VERSION_CODE >= 0x020100
#if LINUX_VERSION_CODE < 0x020322
unregister_reboot_notifier(&gdth_notifier); unregister_reboot_notifier(&gdth_notifier);
#endif
return NOTIFY_OK; return NOTIFY_OK;
#endif #endif
} }
......
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
#define _GDTH_H #define _GDTH_H
/* /*
* Header file for the GDT ISA/EISA/PCI Disk Array Controller driver for Linux * Header file for the GDT Disk Array/Storage RAID controllers driver for Linux
* *
* gdth.h Copyright (C) 1995-01 ICP vortex Computersysteme GmbH, Achim Leubner * gdth.h Copyright (C) 1995-02 ICP vortex, an Intel company, Achim Leubner
* See gdth.c for further informations and * See gdth.c for further informations and
* below for supported controller types * below for supported controller types
* *
* <achim@vortex.de> * <achim.leubner@intel.com>
* *
* $Id: gdth.h,v 1.44 2001/08/21 11:19:05 achim Exp $ * $Id: gdth.h,v 1.46 2002/02/05 09:39:53 achim Exp $
*/ */
#include <linux/version.h> #include <linux/version.h>
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
/* defines, macros */ /* defines, macros */
/* driver version */ /* driver version */
#define GDTH_VERSION_STR "2.03" #define GDTH_VERSION_STR "2.05"
#define GDTH_VERSION 2 #define GDTH_VERSION 2
#define GDTH_SUBVERSION 3 #define GDTH_SUBVERSION 5
/* protocol version */ /* protocol version */
#define PROTOCOL_VERSION 1 #define PROTOCOL_VERSION 1
...@@ -265,6 +265,7 @@ ...@@ -265,6 +265,7 @@
#define S_CACHE_UNKNOWN 12 /* cache serv.: drive unknown */ #define S_CACHE_UNKNOWN 12 /* cache serv.: drive unknown */
#define S_RAW_SCSI 12 /* raw serv.: target error */ #define S_RAW_SCSI 12 /* raw serv.: target error */
#define S_RAW_ILL 0xff /* raw serv.: illegal */ #define S_RAW_ILL 0xff /* raw serv.: illegal */
#define S_CACHE_RESERV -24 /* cache: reserv. conflict */
/* timeout values */ /* timeout values */
#define INIT_RETRIES 100000 /* 100000 * 1ms = 100s */ #define INIT_RETRIES 100000 /* 100000 * 1ms = 100s */
......
...@@ -161,7 +161,8 @@ static inline char * task_state(struct task_struct *p, char *buffer) ...@@ -161,7 +161,8 @@ static inline char * task_state(struct task_struct *p, char *buffer)
"Uid:\t%d\t%d\t%d\t%d\n" "Uid:\t%d\t%d\t%d\t%d\n"
"Gid:\t%d\t%d\t%d\t%d\n", "Gid:\t%d\t%d\t%d\t%d\n",
get_task_state(p), p->tgid, get_task_state(p), p->tgid,
p->pid, p->pid ? p->real_parent->pid : 0, 0, p->pid, p->pid ? p->real_parent->pid : 0,
p->pid && p->ptrace ? p->parent->pid : 0,
p->uid, p->euid, p->suid, p->fsuid, p->uid, p->euid, p->suid, p->fsuid,
p->gid, p->egid, p->sgid, p->fsgid); p->gid, p->egid, p->sgid, p->fsgid);
read_unlock(&tasklist_lock); read_unlock(&tasklist_lock);
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2) #define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2)
#define EDD_EXT_64BIT_EXTENSIONS (1 << 3) #define EDD_EXT_64BIT_EXTENSIONS (1 << 3)
#define EDD_INFO_DMA_BOUNDRY_ERROR_TRANSPARENT (1 << 0) #define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0)
#define EDD_INFO_GEOMETRY_VALID (1 << 1) #define EDD_INFO_GEOMETRY_VALID (1 << 1)
#define EDD_INFO_REMOVABLE (1 << 2) #define EDD_INFO_REMOVABLE (1 << 2)
#define EDD_INFO_WRITE_VERIFY (1 << 3) #define EDD_INFO_WRITE_VERIFY (1 << 3)
......
...@@ -15,7 +15,7 @@ extern int printk(const char * fmt, ...) ...@@ -15,7 +15,7 @@ extern int printk(const char * fmt, ...)
typedef struct { typedef struct {
volatile unsigned int lock; volatile unsigned int lock;
#if SPINLOCK_DEBUG #if CONFIG_DEBUG_SPINLOCK
unsigned magic; unsigned magic;
#endif #endif
} spinlock_t; } spinlock_t;
......
...@@ -51,7 +51,7 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t; ...@@ -51,7 +51,7 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
: "memory"); \ : "memory"); \
} while(0) } while(0)
#define XMMS_RESTORE \ #define XMMS_RESTORE do { \
asm volatile ( \ asm volatile ( \
"sfence ;\n\t" \ "sfence ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \ "movups (%1),%%xmm0 ;\n\t" \
......
...@@ -70,37 +70,24 @@ static inline int sigfindinword(unsigned long word) ...@@ -70,37 +70,24 @@ static inline int sigfindinword(unsigned long word)
#define _SIG_SET_BINOP(name, op) \ #define _SIG_SET_BINOP(name, op) \
static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \ static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \
{ \ { \
extern void _NSIG_WORDS_is_unsupported_size(void); \
unsigned long a0, a1, a2, a3, b0, b1, b2, b3; \ unsigned long a0, a1, a2, a3, b0, b1, b2, b3; \
unsigned long i; \
\ \
for (i = 0; i < _NSIG_WORDS/4; ++i) { \ switch (_NSIG_WORDS) { \
a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \ case 4: \
a2 = a->sig[4*i+2]; a3 = a->sig[4*i+3]; \ a3 = a->sig[3]; a2 = a->sig[2]; \
b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \ b3 = b->sig[3]; b2 = b->sig[2]; \
b2 = b->sig[4*i+2]; b3 = b->sig[4*i+3]; \ r->sig[3] = op(a3, b3); \
r->sig[4*i+0] = op(a0, b0); \ r->sig[2] = op(a2, b2); \
r->sig[4*i+1] = op(a1, b1); \
r->sig[4*i+2] = op(a2, b2); \
r->sig[4*i+3] = op(a3, b3); \
} \
switch (_NSIG_WORDS % 4) { \
case 3: \
a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; a2 = a->sig[4*i+2]; \
b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; b2 = b->sig[4*i+2]; \
r->sig[4*i+0] = op(a0, b0); \
r->sig[4*i+1] = op(a1, b1); \
r->sig[4*i+2] = op(a2, b2); \
break; \
case 2: \ case 2: \
a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \ a1 = a->sig[1]; b1 = b->sig[1]; \
b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \ r->sig[1] = op(a1, b1); \
r->sig[4*i+0] = op(a0, b0); \
r->sig[4*i+1] = op(a1, b1); \
break; \
case 1: \ case 1: \
a0 = a->sig[4*i+0]; b0 = b->sig[4*i+0]; \ a0 = a->sig[0]; b0 = b->sig[0]; \
r->sig[4*i+0] = op(a0, b0); \ r->sig[0] = op(a0, b0); \
break; \ break; \
default: \
_NSIG_WORDS_is_unsupported_size(); \
} \ } \
} }
...@@ -121,18 +108,16 @@ _SIG_SET_BINOP(signandsets, _sig_nand) ...@@ -121,18 +108,16 @@ _SIG_SET_BINOP(signandsets, _sig_nand)
#define _SIG_SET_OP(name, op) \ #define _SIG_SET_OP(name, op) \
static inline void name(sigset_t *set) \ static inline void name(sigset_t *set) \
{ \ { \
unsigned long i; \ extern void _NSIG_WORDS_is_unsupported_size(void); \
\ \
for (i = 0; i < _NSIG_WORDS/4; ++i) { \ switch (_NSIG_WORDS) { \
set->sig[4*i+0] = op(set->sig[4*i+0]); \ case 4: set->sig[3] = op(set->sig[3]); \
set->sig[4*i+1] = op(set->sig[4*i+1]); \ set->sig[2] = op(set->sig[2]); \
set->sig[4*i+2] = op(set->sig[4*i+2]); \ case 2: set->sig[1] = op(set->sig[1]); \
set->sig[4*i+3] = op(set->sig[4*i+3]); \ case 1: set->sig[0] = op(set->sig[0]); \
} \ break; \
switch (_NSIG_WORDS % 4) { \ default: \
case 3: set->sig[4*i+2] = op(set->sig[4*i+2]); \ _NSIG_WORDS_is_unsupported_size(); \
case 2: set->sig[4*i+1] = op(set->sig[4*i+1]); \
case 1: set->sig[4*i+0] = op(set->sig[4*i+0]); \
} \ } \
} }
......
...@@ -113,10 +113,8 @@ static inline void free_one_pgd(mmu_gather_t *tlb, pgd_t * dir) ...@@ -113,10 +113,8 @@ static inline void free_one_pgd(mmu_gather_t *tlb, pgd_t * dir)
} }
pmd = pmd_offset(dir, 0); pmd = pmd_offset(dir, 0);
pgd_clear(dir); pgd_clear(dir);
for (j = 0; j < PTRS_PER_PMD ; j++) { for (j = 0; j < PTRS_PER_PMD ; j++)
prefetchw(pmd+j+(PREFETCH_STRIDE/16));
free_one_pmd(tlb, pmd+j); free_one_pmd(tlb, pmd+j);
}
pmd_free_tlb(tlb, pmd); pmd_free_tlb(tlb, pmd);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment