Commit d78fef14 authored by Len Brown's avatar Len Brown

Pull linus into release branch

parents 04348e69 88026842
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 15 SUBLEVEL = 15
EXTRAVERSION =-rc7 EXTRAVERSION =
NAME=Sliding Snow Leopard NAME=Sliding Snow Leopard
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -554,7 +554,9 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) ...@@ -554,7 +554,9 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
struct pt_regs ptregs; struct pt_regs ptregs;
ptregs = *(struct pt_regs *) ptregs = *(struct pt_regs *)
((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs)); ((unsigned long)tsk->thread_info +
/* see comments in copy_thread() about -8 */
THREAD_SIZE - sizeof(ptregs) - 8);
ptregs.xcs &= 0xffff; ptregs.xcs &= 0xffff;
ptregs.xds &= 0xffff; ptregs.xds &= 0xffff;
ptregs.xes &= 0xffff; ptregs.xes &= 0xffff;
......
...@@ -172,7 +172,7 @@ static int warrior_connect(struct serio *serio, struct serio_driver *drv) ...@@ -172,7 +172,7 @@ static int warrior_connect(struct serio *serio, struct serio_driver *drv)
input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8); input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8);
input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0); input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0); input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0); input_set_abs_params(input_dev, ABS_HAT0Y, -1, 1, 0, 0);
serio_set_drvdata(serio, warrior); serio_set_drvdata(serio, warrior);
......
...@@ -923,7 +923,7 @@ static void do_monitor_cpu_combined(void) ...@@ -923,7 +923,7 @@ static void do_monitor_cpu_combined(void)
if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) { if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) {
printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n", printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n",
temp_combi >> 16); temp_combi >> 16);
state0->overtemp = CPU_MAX_OVERTEMP; state0->overtemp += CPU_MAX_OVERTEMP / 4;
} else if (temp_combi > (state0->mpu.tmax << 16)) } else if (temp_combi > (state0->mpu.tmax << 16))
state0->overtemp++; state0->overtemp++;
else else
...@@ -998,7 +998,7 @@ static void do_monitor_cpu_split(struct cpu_pid_state *state) ...@@ -998,7 +998,7 @@ static void do_monitor_cpu_split(struct cpu_pid_state *state)
printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum"
" (%d) !\n", " (%d) !\n",
state->index, temp >> 16); state->index, temp >> 16);
state->overtemp = CPU_MAX_OVERTEMP; state->overtemp += CPU_MAX_OVERTEMP / 4;
} else if (temp > (state->mpu.tmax << 16)) } else if (temp > (state->mpu.tmax << 16))
state->overtemp++; state->overtemp++;
else else
...@@ -1060,7 +1060,7 @@ static void do_monitor_cpu_rack(struct cpu_pid_state *state) ...@@ -1060,7 +1060,7 @@ static void do_monitor_cpu_rack(struct cpu_pid_state *state)
printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum"
" (%d) !\n", " (%d) !\n",
state->index, temp >> 16); state->index, temp >> 16);
state->overtemp = CPU_MAX_OVERTEMP; state->overtemp = CPU_MAX_OVERTEMP / 4;
} else if (temp > (state->mpu.tmax << 16)) } else if (temp > (state->mpu.tmax << 16))
state->overtemp++; state->overtemp++;
else else
......
...@@ -361,7 +361,7 @@ static int serial_pxa_startup(struct uart_port *port) ...@@ -361,7 +361,7 @@ static int serial_pxa_startup(struct uart_port *port)
if (port->line == 3) /* HWUART */ if (port->line == 3) /* HWUART */
up->mcr |= UART_MCR_AFE; up->mcr |= UART_MCR_AFE;
else else
up->mcr = 0; up->mcr = 0;
/* /*
* Allocate the IRQ * Allocate the IRQ
...@@ -641,7 +641,7 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count) ...@@ -641,7 +641,7 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
int i; int i;
/* /*
* First save the UER then disable the interrupts * First save the IER then disable the interrupts
*/ */
ier = serial_in(up, UART_IER); ier = serial_in(up, UART_IER);
serial_out(up, UART_IER, UART_IER_UUE); serial_out(up, UART_IER, UART_IER_UUE);
......
...@@ -159,7 +159,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i ...@@ -159,7 +159,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH); input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH);
input_dev->mscbit[0] |= BIT(MSC_SERIAL); input_dev->mscbit[0] |= BIT(MSC_SERIAL);
input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0); input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0);
input_set_abs_params(input_dev, ABS_X, 0, 0x1750, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0);
endpoint = &intf->cur_altsetting->endpoint[0].desc; endpoint = &intf->cur_altsetting->endpoint[0].desc;
......
...@@ -854,7 +854,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i ...@@ -854,7 +854,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS); input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS);
input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH) | BIT(BTN_STYLUS); input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH) | BIT(BTN_STYLUS);
input_set_abs_params(input_dev, ABS_X, 0, wacom->features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_X, 0, wacom->features->x_max, 4, 0);
input_set_abs_params(input_dev, ABS_Y, 0, wacom->features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, wacom->features->y_max, 4, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0);
......
...@@ -54,6 +54,18 @@ proc_file_read(struct file *file, char __user *buf, size_t nbytes, ...@@ -54,6 +54,18 @@ proc_file_read(struct file *file, char __user *buf, size_t nbytes,
ssize_t n, count; ssize_t n, count;
char *start; char *start;
struct proc_dir_entry * dp; struct proc_dir_entry * dp;
unsigned long long pos;
/*
* Gaah, please just use "seq_file" instead. The legacy /proc
* interfaces cut loff_t down to off_t for reads, and ignore
* the offset entirely for writes..
*/
pos = *ppos;
if (pos > MAX_NON_LFS)
return 0;
if (nbytes > MAX_NON_LFS - pos)
nbytes = MAX_NON_LFS - pos;
dp = PDE(inode); dp = PDE(inode);
if (!(page = (char*) __get_free_page(GFP_KERNEL))) if (!(page = (char*) __get_free_page(GFP_KERNEL)))
...@@ -202,30 +214,17 @@ proc_file_write(struct file *file, const char __user *buffer, ...@@ -202,30 +214,17 @@ proc_file_write(struct file *file, const char __user *buffer,
static loff_t static loff_t
proc_file_lseek(struct file *file, loff_t offset, int orig) proc_file_lseek(struct file *file, loff_t offset, int orig)
{ {
lock_kernel(); loff_t retval = -EINVAL;
switch (orig) {
switch (orig) { case 1:
case 0: offset += file->f_pos;
if (offset < 0) /* fallthrough */
goto out; case 0:
file->f_pos = offset; if (offset < 0 || offset > MAX_NON_LFS)
unlock_kernel(); break;
return(file->f_pos); file->f_pos = retval = offset;
case 1: }
if (offset + file->f_pos < 0) return retval;
goto out;
file->f_pos += offset;
unlock_kernel();
return(file->f_pos);
case 2:
goto out;
default:
goto out;
}
out:
unlock_kernel();
return -EINVAL;
} }
static int proc_notify_change(struct dentry *dentry, struct iattr *iattr) static int proc_notify_change(struct dentry *dentry, struct iattr *iattr)
......
#include <linux/config.h>
#ifndef _ASMi386_PARAM_H #ifndef _ASMi386_PARAM_H
#define _ASMi386_PARAM_H #define _ASMi386_PARAM_H
#ifdef __KERNEL__ #ifdef __KERNEL__
# include <linux/config.h>
# define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */ # define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */ # define CLOCKS_PER_SEC (USER_HZ) /* like times() */
......
#include <linux/config.h>
#ifndef _ASMx86_64_PARAM_H #ifndef _ASMx86_64_PARAM_H
#define _ASMx86_64_PARAM_H #define _ASMx86_64_PARAM_H
#ifdef __KERNEL__ #ifdef __KERNEL__
# include <linux/config.h>
# define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks */ # define USER_HZ 100 /* .. some user interfaces are in "ticks */
#define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #define CLOCKS_PER_SEC (USER_HZ) /* like times() */
......
...@@ -2192,29 +2192,32 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen, ...@@ -2192,29 +2192,32 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen,
void __user *oldval, size_t __user *oldlenp, void __user *oldval, size_t __user *oldlenp,
void __user *newval, size_t newlen, void **context) void __user *newval, size_t newlen, void **context)
{ {
size_t l, len;
if (!table->data || !table->maxlen) if (!table->data || !table->maxlen)
return -ENOTDIR; return -ENOTDIR;
if (oldval && oldlenp) { if (oldval && oldlenp) {
if (get_user(len, oldlenp)) size_t bufsize;
if (get_user(bufsize, oldlenp))
return -EFAULT; return -EFAULT;
if (len) { if (bufsize) {
l = strlen(table->data); size_t len = strlen(table->data), copied;
if (len > l) len = l;
if (len >= table->maxlen) /* This shouldn't trigger for a well-formed sysctl */
if (len > table->maxlen)
len = table->maxlen; len = table->maxlen;
if(copy_to_user(oldval, table->data, len))
return -EFAULT; /* Copy up to a max of bufsize-1 bytes of the string */
if(put_user(0, ((char __user *) oldval) + len)) copied = (len >= bufsize) ? bufsize - 1 : len;
if (copy_to_user(oldval, table->data, copied) ||
put_user(0, (char __user *)(oldval + copied)))
return -EFAULT; return -EFAULT;
if(put_user(len, oldlenp)) if (put_user(len, oldlenp))
return -EFAULT; return -EFAULT;
} }
} }
if (newval && newlen) { if (newval && newlen) {
len = newlen; size_t len = newlen;
if (len > table->maxlen) if (len > table->maxlen)
len = table->maxlen; len = table->maxlen;
if(copy_from_user(table->data, newval, len)) if(copy_from_user(table->data, newval, len))
...@@ -2223,7 +2226,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen, ...@@ -2223,7 +2226,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen,
len--; len--;
((char *) table->data)[len] = 0; ((char *) table->data)[len] = 0;
} }
return 0; return 1;
} }
/* /*
......
...@@ -161,6 +161,10 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes) ...@@ -161,6 +161,10 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
switch (mode) { switch (mode) {
case MPOL_INTERLEAVE: case MPOL_INTERLEAVE:
policy->v.nodes = *nodes; policy->v.nodes = *nodes;
if (nodes_weight(*nodes) == 0) {
kmem_cache_free(policy_cache, policy);
return ERR_PTR(-EINVAL);
}
break; break;
case MPOL_PREFERRED: case MPOL_PREFERRED:
policy->v.preferred_node = first_node(*nodes); policy->v.preferred_node = first_node(*nodes);
......
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