Commit cfc615f2 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://linux-pnp.bkbits.net/pnp-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents a0b18907 7ee49b42
...@@ -563,7 +563,7 @@ $(sort $(vmlinux-objs)) arch/$(ARCH)/kernel/vmlinux.lds.s: $(SUBDIRS) ; ...@@ -563,7 +563,7 @@ $(sort $(vmlinux-objs)) arch/$(ARCH)/kernel/vmlinux.lds.s: $(SUBDIRS) ;
# Handle descending into subdirectories listed in $(SUBDIRS) # Handle descending into subdirectories listed in $(SUBDIRS)
.PHONY: $(SUBDIRS) .PHONY: $(SUBDIRS)
$(SUBDIRS): prepare-all $(SUBDIRS): prepare-all scripts
$(Q)$(MAKE) $(build)=$@ $(Q)$(MAKE) $(build)=$@
# Things we need to do before we recursively start building the kernel # Things we need to do before we recursively start building the kernel
......
...@@ -608,6 +608,7 @@ create_iface(struct device_node *np, struct device *dev) ...@@ -608,6 +608,7 @@ create_iface(struct device_node *np, struct device *dev)
} }
#endif /* POLLED_MODE */ #endif /* POLLED_MODE */
pmac_low_i2c_unlock(np);
dev_set_drvdata(dev, iface); dev_set_drvdata(dev, iface);
for (i=0; i<nchan; i++) { for (i=0; i<nchan; i++) {
...@@ -645,7 +646,6 @@ create_iface(struct device_node *np, struct device *dev) ...@@ -645,7 +646,6 @@ create_iface(struct device_node *np, struct device *dev)
printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n",
np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps);
pmac_low_i2c_unlock(np);
return 0; return 0;
} }
......
This diff is collapsed.
/* $Id: capifunc.h,v 1.10 2003/08/25 10:06:37 schindler Exp $ /* $Id: capifunc.h,v 1.11 2004/03/20 17:19:58 armin Exp $
* *
* ISDN interface module for Eicon active cards DIVA. * ISDN interface module for Eicon active cards DIVA.
* CAPI Interface common functions * CAPI Interface common functions
...@@ -24,8 +24,9 @@ ...@@ -24,8 +24,9 @@
extern char DRIVERRELEASE_CAPI[]; extern char DRIVERRELEASE_CAPI[];
typedef struct _diva_card { typedef struct _diva_card {
struct list_head list;
int remove_in_progress;
int Id; int Id;
struct _diva_card *next;
struct capi_ctr capi_ctrl; struct capi_ctr capi_ctrl;
DIVA_CAPI_ADAPTER *adapter; DIVA_CAPI_ADAPTER *adapter;
DESCRIPTOR d; DESCRIPTOR d;
......
/* $Id: divasmain.c,v 1.48 2004/02/24 17:46:28 armin Exp $ /* $Id: divasmain.c,v 1.51 2004/03/20 20:47:08 armin Exp $
* *
* Low level driver for Eicon DIVA Server ISDN cards. * Low level driver for Eicon DIVA Server ISDN cards.
* *
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "diva_dma.h" #include "diva_dma.h"
#include "diva_pci.h" #include "diva_pci.h"
static char *main_revision = "$Revision: 1.48 $"; static char *main_revision = "$Revision: 1.51 $";
static int major; static int major;
...@@ -69,7 +69,7 @@ extern int divasfunc_init(int dbgmask); ...@@ -69,7 +69,7 @@ extern int divasfunc_init(int dbgmask);
extern void divasfunc_exit(void); extern void divasfunc_exit(void);
typedef struct _diva_os_thread_dpc { typedef struct _diva_os_thread_dpc {
struct work_struct divas_task; struct tasklet_struct divas_task;
struct work_struct trap_script_task; struct work_struct trap_script_task;
diva_os_soft_isr_t *psoft_isr; diva_os_soft_isr_t *psoft_isr;
int card_failed; int card_failed;
...@@ -552,7 +552,7 @@ void diva_os_remove_irq(void *context, byte irq) ...@@ -552,7 +552,7 @@ void diva_os_remove_irq(void *context, byte irq)
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
DPC framework implementation DPC framework implementation
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
static void diva_os_dpc_proc(void *context) static void diva_os_dpc_proc(unsigned long context)
{ {
diva_os_thread_dpc_t *psoft_isr = (diva_os_thread_dpc_t *) context; diva_os_thread_dpc_t *psoft_isr = (diva_os_thread_dpc_t *) context;
diva_os_soft_isr_t *pisr = psoft_isr->psoft_isr; diva_os_soft_isr_t *pisr = psoft_isr->psoft_isr;
...@@ -575,7 +575,7 @@ int diva_os_initialize_soft_isr(diva_os_soft_isr_t * psoft_isr, ...@@ -575,7 +575,7 @@ int diva_os_initialize_soft_isr(diva_os_soft_isr_t * psoft_isr,
psoft_isr->callback_context = callback_context; psoft_isr->callback_context = callback_context;
pdpc->psoft_isr = psoft_isr; pdpc->psoft_isr = psoft_isr;
INIT_WORK(&pdpc->trap_script_task, diva_adapter_trapped, pdpc); INIT_WORK(&pdpc->trap_script_task, diva_adapter_trapped, pdpc);
INIT_WORK(&pdpc->divas_task, diva_os_dpc_proc, pdpc); tasklet_init(&pdpc->divas_task, diva_os_dpc_proc, (unsigned long)pdpc);
return (0); return (0);
} }
...@@ -586,7 +586,7 @@ int diva_os_schedule_soft_isr(diva_os_soft_isr_t * psoft_isr) ...@@ -586,7 +586,7 @@ int diva_os_schedule_soft_isr(diva_os_soft_isr_t * psoft_isr)
diva_os_thread_dpc_t *pdpc = diva_os_thread_dpc_t *pdpc =
(diva_os_thread_dpc_t *) psoft_isr->object; (diva_os_thread_dpc_t *) psoft_isr->object;
schedule_work(&pdpc->divas_task); tasklet_schedule(&pdpc->divas_task);
} }
return (1); return (1);
...@@ -594,14 +594,22 @@ int diva_os_schedule_soft_isr(diva_os_soft_isr_t * psoft_isr) ...@@ -594,14 +594,22 @@ int diva_os_schedule_soft_isr(diva_os_soft_isr_t * psoft_isr)
int diva_os_cancel_soft_isr(diva_os_soft_isr_t * psoft_isr) int diva_os_cancel_soft_isr(diva_os_soft_isr_t * psoft_isr)
{ {
if (psoft_isr && psoft_isr->object) {
diva_os_thread_dpc_t *pdpc =
(diva_os_thread_dpc_t *) psoft_isr->object;
tasklet_kill(&pdpc->divas_task);
}
return (0); return (0);
} }
void diva_os_remove_soft_isr(diva_os_soft_isr_t * psoft_isr) void diva_os_remove_soft_isr(diva_os_soft_isr_t * psoft_isr)
{ {
if (psoft_isr && psoft_isr->object) { if (psoft_isr && psoft_isr->object) {
diva_os_thread_dpc_t *pdpc =
(diva_os_thread_dpc_t *) psoft_isr->object;
void *mem; void *mem;
tasklet_kill(&pdpc->divas_task);
flush_scheduled_work(); flush_scheduled_work();
mem = psoft_isr->object; mem = psoft_isr->object;
psoft_isr->object = 0; psoft_isr->object = 0;
......
/* $Id: platform.h,v 1.35 2003/12/05 18:45:05 armin Exp $ /* $Id: platform.h,v 1.37 2004/03/20 17:44:29 armin Exp $
* *
* platform.h * platform.h
* *
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/list.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -332,7 +333,6 @@ diva_os_atomic_decrement(diva_os_atomic_t* pv) ...@@ -332,7 +333,6 @@ diva_os_atomic_decrement(diva_os_atomic_t* pv)
*/ */
#define NO_CORNETN #define NO_CORNETN
#define IMPLEMENT_DTMF 1 #define IMPLEMENT_DTMF 1
#define IMPLEMENT_LINE_INTERCONNECT2 1
#define IMPLEMENT_ECHO_CANCELLER 1 #define IMPLEMENT_ECHO_CANCELLER 1
#define IMPLEMENT_RTP 1 #define IMPLEMENT_RTP 1
#define IMPLEMENT_T38 1 #define IMPLEMENT_T38 1
...@@ -346,7 +346,6 @@ diva_os_atomic_decrement(diva_os_atomic_t* pv) ...@@ -346,7 +346,6 @@ diva_os_atomic_decrement(diva_os_atomic_t* pv)
#define IMPLEMENT_FAX_NONSTANDARD 1 #define IMPLEMENT_FAX_NONSTANDARD 1
#define VSWITCH_SUPPORT 1 #define VSWITCH_SUPPORT 1
#define IMPLEMENT_LINE_INTERCONNECT 0
#define IMPLEMENT_MARKED_OK_AFTER_FC 1 #define IMPLEMENT_MARKED_OK_AFTER_FC 1
#define DIVA_IDI_RX_DMA 1 #define DIVA_IDI_RX_DMA 1
......
This diff is collapsed.
...@@ -1280,12 +1280,17 @@ mptbase_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1280,12 +1280,17 @@ mptbase_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return r; return r;
} }
#if 0
/* broken because some code assumes that multiple calls
to pci_alloc_consistent return data in the same 4GB segment.
This cannot work on machines with enough memory. */
if (!pci_set_consistent_dma_mask(pdev, mask)) if (!pci_set_consistent_dma_mask(pdev, mask))
dprintk((KERN_INFO MYNAM dprintk((KERN_INFO MYNAM
": Using 64 bit consistent mask\n")); ": Using 64 bit consistent mask\n"));
else else
dprintk((KERN_INFO MYNAM dprintk((KERN_INFO MYNAM
": Not using 64 bit consistent mask\n")); ": Not using 64 bit consistent mask\n"));
#endif
ioc = kmalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC); ioc = kmalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC);
if (ioc == NULL) { if (ioc == NULL) {
......
...@@ -1256,7 +1256,6 @@ sg_cmd_done(Scsi_Cmnd * SCpnt) ...@@ -1256,7 +1256,6 @@ sg_cmd_done(Scsi_Cmnd * SCpnt)
SRpnt->sr_request->rq_disk = NULL; /* "sg" _disowns_ request blk */ SRpnt->sr_request->rq_disk = NULL; /* "sg" _disowns_ request blk */
srp->my_cmdp = NULL; srp->my_cmdp = NULL;
srp->done = 1;
SCSI_LOG_TIMEOUT(4, printk("sg_cmd_done: %s, pack_id=%d, res=0x%x\n", SCSI_LOG_TIMEOUT(4, printk("sg_cmd_done: %s, pack_id=%d, res=0x%x\n",
sdp->disk->disk_name, srp->header.pack_id, (int) SRpnt->sr_result)); sdp->disk->disk_name, srp->header.pack_id, (int) SRpnt->sr_result));
...@@ -1312,8 +1311,9 @@ sg_cmd_done(Scsi_Cmnd * SCpnt) ...@@ -1312,8 +1311,9 @@ sg_cmd_done(Scsi_Cmnd * SCpnt)
} }
if (sfp && srp) { if (sfp && srp) {
/* Now wake up any sg_read() that is waiting for this packet. */ /* Now wake up any sg_read() that is waiting for this packet. */
wake_up_interruptible(&sfp->read_wait);
kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
srp->done = 1;
wake_up_interruptible(&sfp->read_wait);
} }
} }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
*/ */
static char *verstr = "20040226"; static char *verstr = "20040318";
#include <linux/module.h> #include <linux/module.h>
...@@ -4193,20 +4193,25 @@ CLASS_DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL); ...@@ -4193,20 +4193,25 @@ CLASS_DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL);
static void do_create_class_files(Scsi_Tape *STp, int dev_num, int mode) static void do_create_class_files(Scsi_Tape *STp, int dev_num, int mode)
{ {
int rew, error; int i, rew, error;
char name[10];
struct class_device *st_class_member; struct class_device *st_class_member;
if (!st_sysfs_class) if (!st_sysfs_class)
return; return;
for (rew=0; rew < 2; rew++) { for (rew=0; rew < 2; rew++) {
/* Make sure that the minor numbers corresponding to the four
first modes always get the same names */
i = mode << (4 - ST_NBR_MODE_BITS);
snprintf(name, 10, "%s%s%s", rew ? "n" : "",
STp->disk->disk_name, st_formats[i]);
st_class_member = st_class_member =
class_simple_device_add(st_sysfs_class, class_simple_device_add(st_sysfs_class,
MKDEV(SCSI_TAPE_MAJOR, MKDEV(SCSI_TAPE_MAJOR,
TAPE_MINOR(dev_num, mode, rew)), TAPE_MINOR(dev_num, mode, rew)),
&STp->device->sdev_gendev, "%s", &STp->device->sdev_gendev, "%s", name);
STp->modes[mode].cdevs[rew]->kobj.name); if (IS_ERR(st_class_member)) {
if (!st_class_member) {
printk(KERN_WARNING "st%d: class_simple_device_add failed\n", printk(KERN_WARNING "st%d: class_simple_device_add failed\n",
dev_num); dev_num);
goto out; goto out;
......
...@@ -550,7 +550,7 @@ static int do_open(struct block_device *bdev, struct file *file) ...@@ -550,7 +550,7 @@ static int do_open(struct block_device *bdev, struct file *file)
{ {
struct module *owner = NULL; struct module *owner = NULL;
struct gendisk *disk; struct gendisk *disk;
int ret = -ENXIO; int ret = -ENODEV;
int part; int part;
file->f_mapping = bdev->bd_inode->i_mapping; file->f_mapping = bdev->bd_inode->i_mapping;
...@@ -563,6 +563,7 @@ static int do_open(struct block_device *bdev, struct file *file) ...@@ -563,6 +563,7 @@ static int do_open(struct block_device *bdev, struct file *file)
} }
owner = disk->fops->owner; owner = disk->fops->owner;
ret = -ENXIO;
down(&bdev->bd_sem); down(&bdev->bd_sem);
if (!bdev->bd_openers) { if (!bdev->bd_openers) {
bdev->bd_disk = disk; bdev->bd_disk = disk;
......
...@@ -1004,7 +1004,8 @@ int do_sysctl_strategy (ctl_table *table, ...@@ -1004,7 +1004,8 @@ int do_sysctl_strategy (ctl_table *table,
* zero, proceed with automatic r/w */ * zero, proceed with automatic r/w */
if (table->data && table->maxlen) { if (table->data && table->maxlen) {
if (oldval && oldlenp) { if (oldval && oldlenp) {
get_user(len, oldlenp); if (get_user(len, oldlenp))
return -EFAULT;
if (len) { if (len) {
if (len > table->maxlen) if (len > table->maxlen)
len = table->maxlen; len = table->maxlen;
...@@ -1303,7 +1304,7 @@ int proc_dostring(ctl_table *table, int write, struct file *filp, ...@@ -1303,7 +1304,7 @@ int proc_dostring(ctl_table *table, int write, struct file *filp,
len = 0; len = 0;
p = buffer; p = buffer;
while (len < *lenp) { while (len < *lenp) {
if(get_user(c, p++)) if (get_user(c, p++))
return -EFAULT; return -EFAULT;
if (c == 0 || c == '\n') if (c == 0 || c == '\n')
break; break;
...@@ -1470,7 +1471,7 @@ static int do_proc_dointvec(ctl_table *table, int write, struct file *filp, ...@@ -1470,7 +1471,7 @@ static int do_proc_dointvec(ctl_table *table, int write, struct file *filp,
p = (char *) buffer; p = (char *) buffer;
while (left) { while (left) {
char c; char c;
if(get_user(c, p++)) if (get_user(c, p++))
return -EFAULT; return -EFAULT;
if (!isspace(c)) if (!isspace(c))
break; break;
...@@ -1705,7 +1706,7 @@ static int do_proc_doulongvec_minmax(ctl_table *table, int write, ...@@ -1705,7 +1706,7 @@ static int do_proc_doulongvec_minmax(ctl_table *table, int write,
p = (char *) buffer; p = (char *) buffer;
while (left) { while (left) {
char c; char c;
if(get_user(c, p++)) if (get_user(c, p++))
return -EFAULT; return -EFAULT;
if (!isspace(c)) if (!isspace(c))
break; break;
...@@ -1930,7 +1931,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen, ...@@ -1930,7 +1931,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen,
return -ENOTDIR; return -ENOTDIR;
if (oldval && oldlenp) { if (oldval && oldlenp) {
if(get_user(len, oldlenp)) if (get_user(len, oldlenp))
return -EFAULT; return -EFAULT;
if (len) { if (len) {
l = strlen(table->data); l = strlen(table->data);
...@@ -1987,7 +1988,8 @@ int sysctl_intvec(ctl_table *table, int __user *name, int nlen, ...@@ -1987,7 +1988,8 @@ int sysctl_intvec(ctl_table *table, int __user *name, int nlen,
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
int value; int value;
get_user(value, vec + i); if (get_user(value, vec + i))
return -EFAULT;
if (min && value < min[i]) if (min && value < min[i])
return -EINVAL; return -EINVAL;
if (max && value > max[i]) if (max && value > max[i])
......
...@@ -685,8 +685,10 @@ DEBG("<stor"); ...@@ -685,8 +685,10 @@ DEBG("<stor");
} }
/*
STATIC int inflate_fixed(void) * We use `noinline' here to prevent gcc-3.5 from using too much stack space
*/
STATIC int noinline inflate_fixed(void)
/* decompress an inflated type 1 (fixed Huffman codes) block. We should /* decompress an inflated type 1 (fixed Huffman codes) block. We should
either replace this with a custom decoder, or at least precompute the either replace this with a custom decoder, or at least precompute the
Huffman tables. */ Huffman tables. */
...@@ -739,8 +741,10 @@ DEBG("<fix"); ...@@ -739,8 +741,10 @@ DEBG("<fix");
} }
/*
STATIC int inflate_dynamic(void) * We use `noinline' here to prevent gcc-3.5 from using too much stack space
*/
STATIC int noinline inflate_dynamic(void)
/* decompress an inflated type 2 (dynamic Huffman codes) block. */ /* decompress an inflated type 2 (dynamic Huffman codes) block. */
{ {
int i; /* temporary variables */ int i; /* temporary variables */
......
...@@ -237,7 +237,7 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot) ...@@ -237,7 +237,7 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
len = PAGE_ALIGN(len); len = PAGE_ALIGN(len);
end = start + len; end = start + len;
if (end < start) if (end < start)
return -EINVAL; return -ENOMEM;
if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM)) if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM))
return -EINVAL; return -EINVAL;
if (end == start) if (end == start)
......
...@@ -576,7 +576,7 @@ static void __slab_error(const char *function, kmem_cache_t *cachep, char *msg) ...@@ -576,7 +576,7 @@ static void __slab_error(const char *function, kmem_cache_t *cachep, char *msg)
* Add the CPU number into the expiry time to minimize the possibility of the * Add the CPU number into the expiry time to minimize the possibility of the
* CPUs getting into lockstep and contending for the global cache chain lock. * CPUs getting into lockstep and contending for the global cache chain lock.
*/ */
static void __init start_cpu_timer(int cpu) static void __devinit start_cpu_timer(int cpu)
{ {
struct timer_list *rt = &per_cpu(reap_timers, cpu); struct timer_list *rt = &per_cpu(reap_timers, cpu);
......
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