Pull linus into release branch
authorLen Brown <len.brown@intel.com>
Tue, 3 Jan 2006 21:03:07 +0000 (16:03 -0500)
committerLen Brown <len.brown@intel.com>
Tue, 3 Jan 2006 21:03:07 +0000 (16:03 -0500)
12 files changed:
Makefile
arch/i386/kernel/process.c
drivers/input/joystick/warrior.c
drivers/macintosh/therm_pm72.c
drivers/serial/pxa.c
drivers/usb/input/kbtab.c
drivers/usb/input/wacom.c
fs/proc/generic.c
include/asm-i386/param.h
include/asm-x86_64/param.h
kernel/sysctl.c
mm/mempolicy.c

index f937f1f4595e84b8397f74c3ceaf493b46f80f79..497884d3d556d93961b440da31dca97de4dc1dd9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 15
-EXTRAVERSION =-rc7
+EXTRAVERSION =
 NAME=Sliding Snow Leopard
 
 # *DOCUMENTATION*
index df6c2bcde0672af1c7d5f084810e874d82a95e04..2333aead0563a829b4bf7a4f26326657d2b19428 100644 (file)
@@ -554,7 +554,9 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
        struct pt_regs ptregs;
        
        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.xds &= 0xffff;
        ptregs.xes &= 0xffff;
index 99a642d2a1feb145c18bbf0afb55966a8b964cee..1849b176cf1871263171be8d5311cb8470f8784e 100644 (file)
@@ -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_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_HAT0Y, -1, 1, 0, 0);
 
        serio_set_drvdata(serio, warrior);
 
index 5bb36274a5c6cd474ed97fe0b0e095a023d5a986..190878eef9903e1ec8a4c2e938772ab06ae8a0d9 100644 (file)
@@ -923,7 +923,7 @@ static void do_monitor_cpu_combined(void)
        if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) {
                printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n",
                       temp_combi >> 16);
-               state0->overtemp = CPU_MAX_OVERTEMP;
+               state0->overtemp += CPU_MAX_OVERTEMP / 4;
        } else if (temp_combi > (state0->mpu.tmax << 16))
                state0->overtemp++;
        else
@@ -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"
                       " (%d) !\n",
                       state->index, temp >> 16);
-               state->overtemp = CPU_MAX_OVERTEMP;
+               state->overtemp += CPU_MAX_OVERTEMP / 4;
        } else if (temp > (state->mpu.tmax << 16))
                state->overtemp++;
        else
@@ -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"
                       " (%d) !\n",
                       state->index, temp >> 16);
-               state->overtemp = CPU_MAX_OVERTEMP;
+               state->overtemp = CPU_MAX_OVERTEMP / 4;
        } else if (temp > (state->mpu.tmax << 16))
                state->overtemp++;
        else
index ff5e6309d682c132a455b5b285bfcd96af1b3cc2..cc998b99a19f816e4aae59295ee7e3c40ce7c502 100644 (file)
@@ -361,7 +361,7 @@ static int serial_pxa_startup(struct uart_port *port)
        if (port->line == 3) /* HWUART */
                up->mcr |= UART_MCR_AFE;
        else
-       up->mcr = 0;
+               up->mcr = 0;
 
        /*
         * Allocate the IRQ
@@ -641,7 +641,7 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
        int i;
 
        /*
-        *      First save the UER then disable the interrupts
+        *      First save the IER then disable the interrupts
         */
        ier = serial_in(up, UART_IER);
        serial_out(up, UART_IER, UART_IER_UUE);
index a248664b5d1d011549ad140d573cccb9ddad96a4..fd48e74e78ed362bc158c2561bbb3dec07cd4b14 100644 (file)
@@ -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->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, 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);
 
        endpoint = &intf->cur_altsetting->endpoint[0].desc;
index aea1cfae34ccce71c1f3345e80eb18c5f759a9da..dc099bbe12bf2529281a4217eafebbdd8a8d99c3 100644 (file)
@@ -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->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_PRESSURE, 0, wacom->features->pressure_max, 0, 0);
 
index b638fb500743406a55d3e24c0671882ddec68261..72b431d0a0a4124d0dbbc52fae842d622bffc3fc 100644 (file)
@@ -54,6 +54,18 @@ proc_file_read(struct file *file, char __user *buf, size_t nbytes,
        ssize_t n, count;
        char    *start;
        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);
        if (!(page = (char*) __get_free_page(GFP_KERNEL)))
@@ -202,30 +214,17 @@ proc_file_write(struct file *file, const char __user *buffer,
 static loff_t
 proc_file_lseek(struct file *file, loff_t offset, int orig)
 {
-    lock_kernel();
-
-    switch (orig) {
-    case 0:
-       if (offset < 0)
-           goto out;
-       file->f_pos = offset;
-       unlock_kernel();
-       return(file->f_pos);
-    case 1:
-       if (offset + file->f_pos < 0)
-           goto out;
-       file->f_pos += offset;
-       unlock_kernel();
-       return(file->f_pos);
-    case 2:
-       goto out;
-    default:
-       goto out;
-    }
-
-out:
-    unlock_kernel();
-    return -EINVAL;
+       loff_t retval = -EINVAL;
+       switch (orig) {
+       case 1:
+               offset += file->f_pos;
+       /* fallthrough */
+       case 0:
+               if (offset < 0 || offset > MAX_NON_LFS)
+                       break;
+               file->f_pos = retval = offset;
+       }
+       return retval;
 }
 
 static int proc_notify_change(struct dentry *dentry, struct iattr *iattr)
index fa02e67ea86b7ba58f06e53032ac2aff7279c987..095580f3a45cfb4d556427e84c65a9fad15c690f 100644 (file)
@@ -1,9 +1,8 @@
-#include <linux/config.h>
-
 #ifndef _ASMi386_PARAM_H
 #define _ASMi386_PARAM_H
 
 #ifdef __KERNEL__
+# include <linux/config.h>
 # define HZ            CONFIG_HZ       /* Internal kernel timer frequency */
 # define USER_HZ       100             /* .. some user interfaces are in "ticks" */
 # define CLOCKS_PER_SEC                (USER_HZ)       /* like times() */
index 40b11937180d37afc8bd32034bba45dafd6891ec..5956b23b57c247d6a18a911469a54e312007429b 100644 (file)
@@ -1,9 +1,8 @@
-#include <linux/config.h>
-
 #ifndef _ASMx86_64_PARAM_H
 #define _ASMx86_64_PARAM_H
 
 #ifdef __KERNEL__
+# include <linux/config.h>
 # define HZ            CONFIG_HZ       /* Internal kernel timer frequency */
 # define USER_HZ       100             /* .. some user interfaces are in "ticks */
 #define CLOCKS_PER_SEC        (USER_HZ)       /* like times() */
index 9990e10192e8e645c62d1e640b67b48edefe762d..b53115b882e1d55b9b78a9d807ad12f7610db009 100644 (file)
@@ -2192,29 +2192,32 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen,
                  void __user *oldval, size_t __user *oldlenp,
                  void __user *newval, size_t newlen, void **context)
 {
-       size_t l, len;
-       
        if (!table->data || !table->maxlen) 
                return -ENOTDIR;
        
        if (oldval && oldlenp) {
-               if (get_user(len, oldlenp))
+               size_t bufsize;
+               if (get_user(bufsize, oldlenp))
                        return -EFAULT;
-               if (len) {
-                       l = strlen(table->data);
-                       if (len > l) len = l;
-                       if (len >= table->maxlen)
+               if (bufsize) {
+                       size_t len = strlen(table->data), copied;
+
+                       /* This shouldn't trigger for a well-formed sysctl */
+                       if (len > table->maxlen)
                                len = table->maxlen;
-                       if(copy_to_user(oldval, table->data, len))
-                               return -EFAULT;
-                       if(put_user(0, ((char __user *) oldval) + len))
+
+                       /* Copy up to a max of bufsize-1 bytes of the string */
+                       copied = (len >= bufsize) ? bufsize - 1 : len;
+
+                       if (copy_to_user(oldval, table->data, copied) ||
+                           put_user(0, (char __user *)(oldval + copied)))
                                return -EFAULT;
-                       if(put_user(len, oldlenp))
+                       if (put_user(len, oldlenp))
                                return -EFAULT;
                }
        }
        if (newval && newlen) {
-               len = newlen;
+               size_t len = newlen;
                if (len > table->maxlen)
                        len = table->maxlen;
                if(copy_from_user(table->data, newval, len))
@@ -2223,7 +2226,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen,
                        len--;
                ((char *) table->data)[len] = 0;
        }
-       return 0;
+       return 1;
 }
 
 /*
index bec88c81244e0d4f9541f4098f5f8c8409ba455b..72f402cc9c9af77f6d6c765c166e35d0bb4764ae 100644 (file)
@@ -161,6 +161,10 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
        switch (mode) {
        case MPOL_INTERLEAVE:
                policy->v.nodes = *nodes;
+               if (nodes_weight(*nodes) == 0) {
+                       kmem_cache_free(policy_cache, policy);
+                       return ERR_PTR(-EINVAL);
+               }
                break;
        case MPOL_PREFERRED:
                policy->v.preferred_node = first_node(*nodes);