Merge linux-stable 3.0.28 into android-3.0
authorTodd Poynor <toddpoynor@google.com>
Thu, 19 Apr 2012 22:15:48 +0000 (15:15 -0700)
committerTodd Poynor <toddpoynor@google.com>
Thu, 19 Apr 2012 22:20:03 +0000 (15:20 -0700)
Change-Id: Iee820738e53627f5d0447a87ceff34443aa72786
Signed-off-by: Todd Poynor <toddpoynor@google.com>
38 files changed:
1  2 
Documentation/power/runtime_pm.txt
arch/arm/Kconfig
arch/arm/kernel/process.c
arch/x86/kernel/process_64.c
block/genhd.c
drivers/base/power/runtime.c
drivers/hid/hid-multitouch.c
drivers/misc/Kconfig
drivers/mmc/card/block.c
drivers/mmc/core/core.c
drivers/mmc/core/sd.c
drivers/mmc/core/sdio.c
drivers/mmc/host/sdhci.c
drivers/mtd/nand/nand_base.c
drivers/tty/serial/serial_core.c
drivers/usb/host/ehci-q.c
drivers/usb/host/ehci.h
fs/fuse/dev.c
fs/partitions/check.c
fs/proc/base.c
include/linux/kernel.h
include/linux/mm.h
kernel/cgroup.c
kernel/cpu.c
kernel/fork.c
kernel/futex.c
kernel/irq/pm.c
kernel/panic.c
kernel/power/suspend.c
kernel/printk.c
kernel/sysctl.c
kernel/time/timekeeping.c
mm/page_alloc.c
net/bridge/br_device.c
net/ipv4/devinet.c
net/ipv6/addrconf.c
net/wireless/nl80211.c
net/wireless/reg.c

Simple merge
Simple merge
Simple merge
Simple merge
diff --cc block/genhd.c
index cbf7b880e9d4701cf4745fad3fc1ec4b4d5e44b6,f6ecddb79952b9a132fd0380b8732102db0c641e..026d0700adc5e4443f5382aa2ddccadbead31573
@@@ -1103,24 -1112,10 +1112,26 @@@ static void disk_release(struct device 
        disk_replace_part_tbl(disk, NULL);
        free_part_stats(&disk->part0);
        free_part_info(&disk->part0);
+       if (disk->queue)
+               blk_put_queue(disk->queue);
        kfree(disk);
  }
 +
 +static int disk_uevent(struct device *dev, struct kobj_uevent_env *env)
 +{
 +      struct gendisk *disk = dev_to_disk(dev);
 +      struct disk_part_iter piter;
 +      struct hd_struct *part;
 +      int cnt = 0;
 +
 +      disk_part_iter_init(&piter, disk, 0);
 +      while((part = disk_part_iter_next(&piter)))
 +              cnt++;
 +      disk_part_iter_exit(&piter);
 +      add_uevent_var(env, "NPARTS=%u", cnt);
 +      return 0;
 +}
 +
  struct class block_class = {
        .name           = "block",
  };
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 9706c2b64a947b7fee05df62ced3bfb8594082ce,3ffb27f472c2e49ee619b8e493d0267c8cfb59b5..db0d14e47e382a96dac820afd6164c592169e25c
@@@ -736,25 -737,24 +737,41 @@@ static inline u32 hc32_to_cpup (const s
  
  #endif
  
 +/*
 + * Writing to dma coherent memory on ARM may be delayed via L2
 + * writing buffer, so introduce the helper which can flush L2 writing
 + * buffer into memory immediately, especially used to flush ehci
 + * descriptor to memory.
 + * */
 +#ifdef        CONFIG_ARM_DMA_MEM_BUFFERABLE
 +static inline void ehci_sync_mem()
 +{
 +      mb();
 +}
 +#else
 +static inline void ehci_sync_mem()
 +{
 +}
 +#endif
 +
  /*-------------------------------------------------------------------------*/
  
+ #ifdef CONFIG_PCI
+ /* For working around the MosChip frame-index-register bug */
+ static unsigned ehci_read_frame_index(struct ehci_hcd *ehci);
+ #else
+ static inline unsigned ehci_read_frame_index(struct ehci_hcd *ehci)
+ {
+       return ehci_readl(ehci, &ehci->regs->frame_index);
+ }
+ #endif
+ /*-------------------------------------------------------------------------*/
  #ifndef DEBUG
  #define STUB_DEBUG_FILES
  #endif        /* DEBUG */
diff --cc fs/fuse/dev.c
Simple merge
Simple merge
diff --cc fs/proc/base.c
index 1a8d756021f20fdda3bae0dadb9a2bff1c993601,22794e8ab996d7760176b9395e9acd2eb18e698b..6a938aa9e29429179ccfef84f76ff881a2a80314
@@@ -269,8 -205,7 +211,8 @@@ static struct mm_struct *mm_access(stru
  
        mm = get_task_mm(task);
        if (mm && mm != current->mm &&
-                       !ptrace_may_access(task, PTRACE_MODE_READ) &&
 -                      !ptrace_may_access(task, mode)) {
++                      !ptrace_may_access(task, mode) &&
 +                      !capable(CAP_SYS_RESOURCE)) {
                mmput(mm);
                mm = ERR_PTR(-EACCES);
        }
@@@ -937,23 -822,36 +829,41 @@@ static ssize_t mem_rw(struct file *file
                                copied = -EIO;
                        break;
                }
-               copied += retval;
-               buf += retval;
-               dst += retval;
-               count -= retval;                        
+               if (!write && copy_to_user(buf, page, this_len)) {
+                       copied = -EFAULT;
+                       break;
+               }
+               buf += this_len;
+               addr += this_len;
+               copied += this_len;
+               count -= this_len;
        }
-       *ppos = dst;
+       *ppos = addr;
  
- out_mm:
        mmput(mm);
out_free:
+ free:
        free_page((unsigned long) page);
- out_task:
-       put_task_struct(task);
- out_no_task:
        return copied;
  }
+ static ssize_t mem_read(struct file *file, char __user *buf,
+                       size_t count, loff_t *ppos)
+ {
+       return mem_rw(file, buf, count, ppos, 0);
+ }
++#define mem_write NULL
++
++#ifndef mem_write
++/* This is a security hazard */
+ static ssize_t mem_write(struct file *file, const char __user *buf,
+                        size_t count, loff_t *ppos)
+ {
+       return mem_rw(file, (char __user*)buf, count, ppos, 1);
+ }
 +#endif
  
  loff_t mem_lseek(struct file *file, loff_t offset, int orig)
  {
Simple merge
Simple merge
diff --cc kernel/cgroup.c
Simple merge
diff --cc kernel/cpu.c
Simple merge
diff --cc kernel/fork.c
Simple merge
diff --cc kernel/futex.c
Simple merge
diff --cc kernel/irq/pm.c
Simple merge
diff --cc kernel/panic.c
Simple merge
Simple merge
diff --cc kernel/printk.c
Simple merge
diff --cc kernel/sysctl.c
Simple merge
Simple merge
diff --cc mm/page_alloc.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge