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
D: modularized BSD Unix domain sockets
N: Martin Kasper Petersen
E: mkp@linuxcare.com
E: mkp@mkp.net
D: PA-RISC port
D: XFS file system
......@@ -3466,14 +3465,10 @@ S: D-73732 Esslingen
S: Germany
N: Leonard N. Zubkoff
E: lnz@dandelion.com
W: http://www.dandelion.com/Linux/
D: BusLogic SCSI driver
D: Mylex DAC960 PCI RAID driver
D: Miscellaneous kernel fixes
S: 3078 Sulphur Spring Court
S: San Jose, California 95148
S: USA
N: Alessandro Zummo
E: azummo@ita.flashnet.it
......
VERSION = 2
PATCHLEVEL = 5
SUBLEVEL = 54
SUBLEVEL = 55
EXTRAVERSION =
# *DOCUMENTATION*
......
......@@ -303,11 +303,6 @@ config X86_POPAD_OK
depends on !M386
default y
config X86_USE_STRING_486
bool
depends on MELAN || M586MMX || M586TSC || M586 || M486
default y
config X86_ALIGNMENT_16
bool
depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486
......@@ -345,11 +340,11 @@ config X86_OOSTORE
config X86_PREFETCH
bool
depends on MPENTIUMIII || MP4
depends on MPENTIUMIII || MPENTIUM4
default y
config X86_SSE2
bool
bool
depends on MK8 || MPENTIUM4
default y
......
......@@ -419,8 +419,8 @@ edd_show_info_flags(struct edd_device *edev, char *buf, size_t count,
return 0;
}
if (info->params.info_flags & EDD_INFO_DMA_BOUNDRY_ERROR_TRANSPARENT)
p += snprintf(p, left, "DMA boundry error transparent\n");
if (info->params.info_flags & EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT)
p += snprintf(p, left, "DMA boundary error transparent\n");
if (info->params.info_flags & EDD_INFO_GEOMETRY_VALID)
p += snprintf(p, left, "geometry valid\n");
if (info->params.info_flags & EDD_INFO_REMOVABLE)
......
......@@ -19,7 +19,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
void *ret;
int gfp = GFP_ATOMIC;
if (dev == NULL || ((u32)*dev->dma_mask != 0xffffffff))
if (dev == NULL || (*dev->dma_mask < 0xffffffff))
gfp |= GFP_DMA;
ret = (void *)__get_free_pages(gfp, get_order(size));
......
......@@ -276,8 +276,11 @@ static inline unsigned long get_cr2(void)
static inline void do_trap(int trapnr, int signr, char *str, int vm86,
struct pt_regs * regs, long error_code, siginfo_t *info)
{
if (vm86 && regs->eflags & VM_MASK)
goto vm86_trap;
if (regs->eflags & VM_MASK) {
if (vm86)
goto vm86_trap;
goto trap_signal;
}
if (!(regs->xcs & 3))
goto kernel_trap;
......
......@@ -161,7 +161,7 @@ static struct temp_map {
} temp_mappings[] __initdata = {
{ &temp_boot_pmds[0], (void *)(40UL * 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)
static int atmtcp_v_send(struct atm_vcc *vcc,struct sk_buff *skb)
{
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 atmtcp_hdr *hdr;
int size;
......
......@@ -727,6 +727,7 @@ static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
cgc.cmd[0] = GPCMD_LOAD_UNLOAD;
cgc.cmd[4] = 2 + (slot >= 0);
cgc.cmd[8] = slot;
cgc.timeout = 60 * HZ;
/* The Sanyo 3 CD changer uses byte 7 of the
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,
{
struct cdrom_device_ops *cdo = cdi->ops;
struct cdrom_generic_command cgc;
struct request_sense sense;
char buffer[32];
int ret = 0;
......@@ -1935,9 +1937,11 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
cgc.buffer = (char *) kmalloc(blocksize, GFP_KERNEL);
if (cgc.buffer == NULL)
return -ENOMEM;
memset(&sense, 0, sizeof(sense));
cgc.sense = &sense;
cgc.data_direction = CGC_DATA_READ;
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
* READ_CD, so let's try switching block size
......
......@@ -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 irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 };
static int poll_only = 0;
#ifdef MODULE
static int poll_only = 0;
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
MODULE_AUTHOR("Doug McNash");
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
if (*offset < 0)
return -EINVAL;
if (count <= 0)
if (count == 0 || count > 16384)
return 0;
if (*offset != 0)
return 0;
......
......@@ -1511,7 +1511,8 @@ static int __init HiSax_init(void)
nrcards, (nrcards > 1) ? "s" : "");
/* Install only, if at least one card found */
HiSax_inithardware(NULL);
if (!HiSax_inithardware(NULL))
return -ENODEV;
return 0;
out_tei:
......@@ -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",
nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag);
if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n");
#endif
return 0;
......@@ -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",
nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag);
if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n");
#endif
return 0;
......@@ -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",
nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag);
if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n");
#endif
return 0;
......@@ -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",
nrcards, (nrcards > 1) ? "s" : "");
HiSax_inithardware(busy_flag);
if (!HiSax_inithardware(busy_flag))
return -ENODEV;
printk(KERN_NOTICE "HiSax: module installed\n");
#endif
return 0;
......
......@@ -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)
{
struct apm_user * as;
int i;
size_t i;
apm_event_t event;
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.
......
......@@ -4158,7 +4158,6 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd,
{
struct zoran_status bs;
int norm, input, status;
unsigned long timeout;
if (zr->codec_mode != BUZ_MODE_IDLE) {
DEBUG1(printk(KERN_ERR
......@@ -4204,9 +4203,8 @@ static int do_zoran_ioctl(struct zoran *zr, unsigned int cmd,
/* sleep 1 second */
timeout = jiffies + 1 * HZ;
while (jiffies < timeout)
schedule();
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(HZ);
/* Get status of video decoder */
......
......@@ -13,7 +13,7 @@ config DEV_APPLETALK
config LTPC
tristate "Apple/Farallon LocalTalk PC support"
depends on DEV_APPLETALK
depends on DEV_APPLETALK && (ISA || EISA)
help
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.
......@@ -24,7 +24,7 @@ config LTPC
config COPS
tristate "COPS LocalTalk PC support"
depends on DEV_APPLETALK
depends on DEV_APPLETALK && (ISA || EISA)
help
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
......
......@@ -114,8 +114,6 @@ static char version[] =
#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
*/
#ifndef NET_DEBUG
......
......@@ -695,7 +695,7 @@ static int yenta_suspend(pci_socket_t *socket)
/*
* 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()
* to update all the critical registers, notably
* the IO and MEM bridging region data.. That is
......
......@@ -4,9 +4,11 @@
* Intel Corporation: Storage RAID Controllers *
* *
* 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 *
* it under the terms of the GNU General Public License as published *
......@@ -22,9 +24,23 @@
* along with this kernel; if not, write to the Free Software *
* 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 $
* 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
* Bugfix free_irq()
*
......@@ -232,7 +248,7 @@
* 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.
* This includes the PCI/EISA/ISA SCSI Disk Array Controllers and the
......@@ -269,7 +285,7 @@
*
* The default values are: "gdth=disable:N,reserve_mode:1,reverse_scan:N,
* 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".
*
* When loading the gdth driver as a module, the same options are available.
......@@ -670,7 +686,7 @@ static int rescan = 0;
/* map channels to virtual controllers */
static int virt_ctr = 0;
/* shared access */
static int shared_access = 0;
static int shared_access = 1;
#ifdef MODULE
#if LINUX_VERSION_CODE >= 0x02011A
......@@ -2343,12 +2359,13 @@ static void gdth_next(int hanum)
register Scsi_Cmnd *nscp;
unchar b, t, firsttime;
unchar this_cmd, next_cmd;
ulong flags;
ulong flags = 0;
int cmd_index;
TRACE(("gdth_next() hanum %d\n",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;
this_cmd = firsttime = TRUE;
......@@ -2443,10 +2460,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
}
}
} else
......@@ -2471,10 +2490,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
}
} else {
switch (nscp->cmnd[0]) {
......@@ -2500,16 +2521,20 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
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)) {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
}
break;
......@@ -2524,10 +2549,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
}
} else {
nscp->cmnd[3] = (ha->hdr[t].devtype&1) ? 1:0;
......@@ -2562,10 +2589,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
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)))
this_cmd = FALSE;
......@@ -2581,10 +2610,12 @@ static void gdth_next(int hanum)
if (!nscp->SCp.have_data_in)
nscp->SCp.have_data_in++;
else {
GDTH_UNLOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_UNLOCK_HA(ha,flags);
/* io_request_lock already active ! */
nscp->scsi_done(nscp);
GDTH_LOCK_HA(ha,flags);
if (!gdth_polling)
GDTH_LOCK_HA(ha,flags);
}
break;
}
......@@ -2604,7 +2635,8 @@ static void gdth_next(int 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_wait(hanum,cmd_index,POLL_TIMEOUT))
......@@ -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;
}
memset((char*)scp->sense_buffer,0,16);
scp->sense_buffer[0] = 0x70;
scp->sense_buffer[2] = NOT_READY;
scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
if (ha->status == (ushort)S_CACHE_RESERV) {
scp->result = (DID_OK << 16) | (RESERVATION_CONFLICT << 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 (scp->done != gdth_scsi_done)
#endif
......@@ -3981,6 +4017,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
return 0;
}
printk("GDT: Storage RAID Controller Driver. Version: %s \n",GDTH_VERSION_STR);
/* initializations */
gdth_polling = TRUE; b = 0;
gdth_clear_events();
......@@ -4215,6 +4252,7 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
gdth_pci_str pcistr[MAXHA];
cnt = gdth_search_pci(pcistr);
printk("GDT: Found %d PCI Storage RAID Controllers\n",cnt);
gdth_sort_pci(pcistr,cnt);
for (ctr = 0; ctr < cnt; ++ctr) {
if (gdth_ctr_count >= MAXHA)
......@@ -4229,8 +4267,8 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp))
continue;
}
/* controller found and initialized */
printk("Configuring GDT-PCI HA at %d/%d IRQ %u\n",
pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq);
printk("GDT CTR%d: Configuring GDT-PCI HA at %d/%d IRQ %u\n",
ctr,pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq);
#if LINUX_VERSION_CODE >= 0x010346
if (request_irq(ha->irq, gdth_interrupt,
......@@ -4703,9 +4741,7 @@ void gdth_halt(void)
del_timer(&gdth_timer);
#endif
#if LINUX_VERSION_CODE >= 0x020100
#if LINUX_VERSION_CODE < 0x020322
unregister_reboot_notifier(&gdth_notifier);
#endif
return NOTIFY_OK;
#endif
}
......
......@@ -2,15 +2,15 @@
#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
* 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>
......@@ -29,9 +29,9 @@
/* defines, macros */
/* driver version */
#define GDTH_VERSION_STR "2.03"
#define GDTH_VERSION_STR "2.05"
#define GDTH_VERSION 2
#define GDTH_SUBVERSION 3
#define GDTH_SUBVERSION 5
/* protocol version */
#define PROTOCOL_VERSION 1
......@@ -265,6 +265,7 @@
#define S_CACHE_UNKNOWN 12 /* cache serv.: drive unknown */
#define S_RAW_SCSI 12 /* raw serv.: target error */
#define S_RAW_ILL 0xff /* raw serv.: illegal */
#define S_CACHE_RESERV -24 /* cache: reserv. conflict */
/* timeout values */
#define INIT_RETRIES 100000 /* 100000 * 1ms = 100s */
......
......@@ -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"
"Gid:\t%d\t%d\t%d\t%d\n",
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->gid, p->egid, p->sgid, p->fsgid);
read_unlock(&tasklist_lock);
......
......@@ -48,7 +48,7 @@
#define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2)
#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_REMOVABLE (1 << 2)
#define EDD_INFO_WRITE_VERIFY (1 << 3)
......
......@@ -15,7 +15,7 @@ extern int printk(const char * fmt, ...)
typedef struct {
volatile unsigned int lock;
#if SPINLOCK_DEBUG
#if CONFIG_DEBUG_SPINLOCK
unsigned magic;
#endif
} spinlock_t;
......
......@@ -51,7 +51,7 @@ typedef struct { unsigned long a,b; } __attribute__((aligned(16))) xmm_store_t;
: "memory"); \
} while(0)
#define XMMS_RESTORE \
#define XMMS_RESTORE do { \
asm volatile ( \
"sfence ;\n\t" \
"movups (%1),%%xmm0 ;\n\t" \
......
......@@ -70,37 +70,24 @@ static inline int sigfindinword(unsigned long word)
#define _SIG_SET_BINOP(name, op) \
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 i; \
\
for (i = 0; i < _NSIG_WORDS/4; ++i) { \
a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \
a2 = a->sig[4*i+2]; a3 = a->sig[4*i+3]; \
b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \
b2 = b->sig[4*i+2]; b3 = b->sig[4*i+3]; \
r->sig[4*i+0] = op(a0, b0); \
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; \
switch (_NSIG_WORDS) { \
case 4: \
a3 = a->sig[3]; a2 = a->sig[2]; \
b3 = b->sig[3]; b2 = b->sig[2]; \
r->sig[3] = op(a3, b3); \
r->sig[2] = op(a2, b2); \
case 2: \
a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \
b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \
r->sig[4*i+0] = op(a0, b0); \
r->sig[4*i+1] = op(a1, b1); \
break; \
a1 = a->sig[1]; b1 = b->sig[1]; \
r->sig[1] = op(a1, b1); \
case 1: \
a0 = a->sig[4*i+0]; b0 = b->sig[4*i+0]; \
r->sig[4*i+0] = op(a0, b0); \
a0 = a->sig[0]; b0 = b->sig[0]; \
r->sig[0] = op(a0, b0); \
break; \
default: \
_NSIG_WORDS_is_unsupported_size(); \
} \
}
......@@ -121,18 +108,16 @@ _SIG_SET_BINOP(signandsets, _sig_nand)
#define _SIG_SET_OP(name, op) \
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) { \
set->sig[4*i+0] = op(set->sig[4*i+0]); \
set->sig[4*i+1] = op(set->sig[4*i+1]); \
set->sig[4*i+2] = op(set->sig[4*i+2]); \
set->sig[4*i+3] = op(set->sig[4*i+3]); \
} \
switch (_NSIG_WORDS % 4) { \
case 3: set->sig[4*i+2] = op(set->sig[4*i+2]); \
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]); \
switch (_NSIG_WORDS) { \
case 4: set->sig[3] = op(set->sig[3]); \
set->sig[2] = op(set->sig[2]); \
case 2: set->sig[1] = op(set->sig[1]); \
case 1: set->sig[0] = op(set->sig[0]); \
break; \
default: \
_NSIG_WORDS_is_unsupported_size(); \
} \
}
......
......@@ -113,10 +113,8 @@ static inline void free_one_pgd(mmu_gather_t *tlb, pgd_t * dir)
}
pmd = pmd_offset(dir, 0);
pgd_clear(dir);
for (j = 0; j < PTRS_PER_PMD ; j++) {
prefetchw(pmd+j+(PREFETCH_STRIDE/16));
for (j = 0; j < PTRS_PER_PMD ; j++)
free_one_pmd(tlb, pmd+j);
}
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