commit:     2b48b7b43d1573379b1a4293175da9b5b8a2d3e6
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Aug  2 00:19:42 2014 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Aug  2 00:19:42 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/linux-patches.git;a=commit;h=2b48b7b4

Linux patch 3.14.15

---
 0000_README              |   4 +
 1014_linux-3.14.15.patch | 893 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 897 insertions(+)

diff --git a/0000_README b/0000_README
index d44b3d0..70e968d 100644
--- a/0000_README
+++ b/0000_README
@@ -98,6 +98,10 @@ Patch:  1013_linux-3.14.14.patch
 From:   http://www.kernel.org
 Desc:   Linux 3.14.14
 
+Patch:  1014_linux-3.14.15.patch
+From:   http://www.kernel.org
+Desc:   Linux 3.14.15
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1014_linux-3.14.15.patch b/1014_linux-3.14.15.patch
new file mode 100644
index 0000000..f173027
--- /dev/null
+++ b/1014_linux-3.14.15.patch
@@ -0,0 +1,893 @@
+diff --git a/Makefile b/Makefile
+index 230c7f694ab7..188523e9e880 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 14
+-SUBLEVEL = 14
++SUBLEVEL = 15
+ EXTRAVERSION =
+ NAME = Remembering Coco
+ 
+@@ -639,6 +639,8 @@ KBUILD_CFLAGS      += -fomit-frame-pointer
+ endif
+ endif
+ 
++KBUILD_CFLAGS   += $(call cc-option, -fno-var-tracking-assignments)
++
+ ifdef CONFIG_DEBUG_INFO
+ KBUILD_CFLAGS += -g
+ KBUILD_AFLAGS += -Wa,--gdwarf-2
+diff --git a/arch/parisc/include/uapi/asm/signal.h 
b/arch/parisc/include/uapi/asm/signal.h
+index a2fa297196bc..f5645d6a89f2 100644
+--- a/arch/parisc/include/uapi/asm/signal.h
++++ b/arch/parisc/include/uapi/asm/signal.h
+@@ -69,8 +69,6 @@
+ #define SA_NOMASK     SA_NODEFER
+ #define SA_ONESHOT    SA_RESETHAND
+ 
+-#define SA_RESTORER   0x04000000 /* obsolete -- ignored */
+-
+ #define MINSIGSTKSZ   2048
+ #define SIGSTKSZ      8192
+ 
+diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
+index a48bc79a111f..184d305af3e7 100644
+--- a/arch/s390/kernel/ptrace.c
++++ b/arch/s390/kernel/ptrace.c
+@@ -323,9 +323,14 @@ static int __poke_user(struct task_struct *child, addr_t 
addr, addr_t data)
+                       unsigned long mask = PSW_MASK_USER;
+ 
+                       mask |= is_ri_task(child) ? PSW_MASK_RI : 0;
+-                      if ((data & ~mask) != PSW_USER_BITS)
++                      if ((data ^ PSW_USER_BITS) & ~mask)
++                              /* Invalid psw mask. */
++                              return -EINVAL;
++                      if ((data & PSW_MASK_ASC) == PSW_ASC_HOME)
++                              /* Invalid address-space-control bits */
+                               return -EINVAL;
+                       if ((data & PSW_MASK_EA) && !(data & PSW_MASK_BA))
++                              /* Invalid addressing mode bits */
+                               return -EINVAL;
+               }
+               *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
+@@ -661,9 +666,12 @@ static int __poke_user_compat(struct task_struct *child,
+ 
+                       mask |= is_ri_task(child) ? PSW32_MASK_RI : 0;
+                       /* Build a 64 bit psw mask from 31 bit mask. */
+-                      if ((tmp & ~mask) != PSW32_USER_BITS)
++                      if ((tmp ^ PSW32_USER_BITS) & ~mask)
+                               /* Invalid psw mask. */
+                               return -EINVAL;
++                      if ((data & PSW32_MASK_ASC) == PSW32_ASC_HOME)
++                              /* Invalid address-space-control bits */
++                              return -EINVAL;
+                       regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
+                               (regs->psw.mask & PSW_MASK_BA) |
+                               (__u64)(tmp & mask) << 32;
+diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
+index ec3b8ba68096..04da6c2194ba 100644
+--- a/arch/x86/boot/header.S
++++ b/arch/x86/boot/header.S
+@@ -91,10 +91,9 @@ bs_die:
+ 
+       .section ".bsdata", "a"
+ bugger_off_msg:
+-      .ascii  "Direct floppy boot is not supported. "
+-      .ascii  "Use a boot loader program instead.\r\n"
++      .ascii  "Use a boot loader.\r\n"
+       .ascii  "\n"
+-      .ascii  "Remove disk and press any key to reboot ...\r\n"
++      .ascii  "Remove disk and press any key to reboot...\r\n"
+       .byte   0
+ 
+ #ifdef CONFIG_EFI_STUB
+@@ -108,7 +107,7 @@ coff_header:
+ #else
+       .word   0x8664                          # x86-64
+ #endif
+-      .word   3                               # nr_sections
++      .word   4                               # nr_sections
+       .long   0                               # TimeDateStamp
+       .long   0                               # PointerToSymbolTable
+       .long   1                               # NumberOfSymbols
+@@ -250,6 +249,25 @@ section_table:
+       .word   0                               # NumberOfLineNumbers
+       .long   0x60500020                      # Characteristics (section 
flags)
+ 
++      #
++      # The offset & size fields are filled in by build.c.
++      #
++      .ascii  ".bss"
++      .byte   0
++      .byte   0
++      .byte   0
++      .byte   0
++      .long   0
++      .long   0x0
++      .long   0                               # Size of initialized data
++                                              # on disk
++      .long   0x0
++      .long   0                               # PointerToRelocations
++      .long   0                               # PointerToLineNumbers
++      .word   0                               # NumberOfRelocations
++      .word   0                               # NumberOfLineNumbers
++      .long   0xc8000080                      # Characteristics (section 
flags)
++
+ #endif /* CONFIG_EFI_STUB */
+ 
+       # Kernel attributes; used by setup.  This is part 1 of the
+diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
+index 8e15b22391fc..3dafaeb9f549 100644
+--- a/arch/x86/boot/tools/build.c
++++ b/arch/x86/boot/tools/build.c
+@@ -142,7 +142,7 @@ static void usage(void)
+ 
+ #ifdef CONFIG_EFI_STUB
+ 
+-static void update_pecoff_section_header(char *section_name, u32 offset, u32 
size)
++static void update_pecoff_section_header_fields(char *section_name, u32 vma, 
u32 size, u32 datasz, u32 offset)
+ {
+       unsigned int pe_header;
+       unsigned short num_sections;
+@@ -163,10 +163,10 @@ static void update_pecoff_section_header(char 
*section_name, u32 offset, u32 siz
+                       put_unaligned_le32(size, section + 0x8);
+ 
+                       /* section header vma field */
+-                      put_unaligned_le32(offset, section + 0xc);
++                      put_unaligned_le32(vma, section + 0xc);
+ 
+                       /* section header 'size of initialised data' field */
+-                      put_unaligned_le32(size, section + 0x10);
++                      put_unaligned_le32(datasz, section + 0x10);
+ 
+                       /* section header 'file offset' field */
+                       put_unaligned_le32(offset, section + 0x14);
+@@ -178,6 +178,11 @@ static void update_pecoff_section_header(char 
*section_name, u32 offset, u32 siz
+       }
+ }
+ 
++static void update_pecoff_section_header(char *section_name, u32 offset, u32 
size)
++{
++      update_pecoff_section_header_fields(section_name, offset, size, size, 
offset);
++}
++
+ static void update_pecoff_setup_and_reloc(unsigned int size)
+ {
+       u32 setup_offset = 0x200;
+@@ -202,9 +207,6 @@ static void update_pecoff_text(unsigned int text_start, 
unsigned int file_sz)
+ 
+       pe_header = get_unaligned_le32(&buf[0x3c]);
+ 
+-      /* Size of image */
+-      put_unaligned_le32(file_sz, &buf[pe_header + 0x50]);
+-
+       /*
+        * Size of code: Subtract the size of the first sector (512 bytes)
+        * which includes the header.
+@@ -219,6 +221,22 @@ static void update_pecoff_text(unsigned int text_start, 
unsigned int file_sz)
+       update_pecoff_section_header(".text", text_start, text_sz);
+ }
+ 
++static void update_pecoff_bss(unsigned int file_sz, unsigned int init_sz)
++{
++      unsigned int pe_header;
++      unsigned int bss_sz = init_sz - file_sz;
++
++      pe_header = get_unaligned_le32(&buf[0x3c]);
++
++      /* Size of uninitialized data */
++      put_unaligned_le32(bss_sz, &buf[pe_header + 0x24]);
++
++      /* Size of image */
++      put_unaligned_le32(init_sz, &buf[pe_header + 0x50]);
++
++      update_pecoff_section_header_fields(".bss", file_sz, bss_sz, 0, 0);
++}
++
+ #endif /* CONFIG_EFI_STUB */
+ 
+ 
+@@ -270,6 +288,9 @@ int main(int argc, char ** argv)
+       int fd;
+       void *kernel;
+       u32 crc = 0xffffffffUL;
++#ifdef CONFIG_EFI_STUB
++      unsigned int init_sz;
++#endif
+ 
+       /* Defaults for old kernel */
+ #ifdef CONFIG_X86_32
+@@ -343,7 +364,9 @@ int main(int argc, char ** argv)
+       put_unaligned_le32(sys_size, &buf[0x1f4]);
+ 
+ #ifdef CONFIG_EFI_STUB
+-      update_pecoff_text(setup_sectors * 512, sz + i + ((sys_size * 16) - 
sz));
++      update_pecoff_text(setup_sectors * 512, i + (sys_size * 16));
++      init_sz = get_unaligned_le32(&buf[0x260]);
++      update_pecoff_bss(i + (sys_size * 16), init_sz);
+ 
+ #ifdef CONFIG_X86_64 /* Yes, this is really how we defined it :( */
+       efi_stub_entry -= 0x200;
+diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
+index 6491353cc9aa..c87810b1b557 100644
+--- a/arch/x86/kernel/entry_32.S
++++ b/arch/x86/kernel/entry_32.S
+@@ -433,8 +433,8 @@ sysenter_do_call:
+       cmpl $(NR_syscalls), %eax
+       jae sysenter_badsys
+       call *sys_call_table(,%eax,4)
+-      movl %eax,PT_EAX(%esp)
+ sysenter_after_call:
++      movl %eax,PT_EAX(%esp)
+       LOCKDEP_SYS_EXIT
+       DISABLE_INTERRUPTS(CLBR_ANY)
+       TRACE_IRQS_OFF
+@@ -514,6 +514,7 @@ ENTRY(system_call)
+       jae syscall_badsys
+ syscall_call:
+       call *sys_call_table(,%eax,4)
++syscall_after_call:
+       movl %eax,PT_EAX(%esp)          # store the return value
+ syscall_exit:
+       LOCKDEP_SYS_EXIT
+@@ -683,12 +684,12 @@ syscall_fault:
+ END(syscall_fault)
+ 
+ syscall_badsys:
+-      movl $-ENOSYS,PT_EAX(%esp)
+-      jmp syscall_exit
++      movl $-ENOSYS,%eax
++      jmp syscall_after_call
+ END(syscall_badsys)
+ 
+ sysenter_badsys:
+-      movl $-ENOSYS,PT_EAX(%esp)
++      movl $-ENOSYS,%eax
+       jmp sysenter_after_call
+ END(syscall_badsys)
+       CFI_ENDPROC
+diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
+index dd0dd2d4ceca..d8f80e733cf8 100644
+--- a/block/blk-cgroup.c
++++ b/block/blk-cgroup.c
+@@ -859,6 +859,13 @@ void blkcg_drain_queue(struct request_queue *q)
+ {
+       lockdep_assert_held(q->queue_lock);
+ 
++      /*
++       * @q could be exiting and already have destroyed all blkgs as
++       * indicated by NULL root_blkg.  If so, don't confuse policies.
++       */
++      if (!q->root_blkg)
++              return;
++
+       blk_throtl_drain(q);
+ }
+ 
+diff --git a/block/blk-tag.c b/block/blk-tag.c
+index 3f33d8672268..a185b86741e5 100644
+--- a/block/blk-tag.c
++++ b/block/blk-tag.c
+@@ -27,18 +27,15 @@ struct request *blk_queue_find_tag(struct request_queue 
*q, int tag)
+ EXPORT_SYMBOL(blk_queue_find_tag);
+ 
+ /**
+- * __blk_free_tags - release a given set of tag maintenance info
++ * blk_free_tags - release a given set of tag maintenance info
+  * @bqt:      the tag map to free
+  *
+- * Tries to free the specified @bqt.  Returns true if it was
+- * actually freed and false if there are still references using it
++ * Drop the reference count on @bqt and frees it when the last reference
++ * is dropped.
+  */
+-static int __blk_free_tags(struct blk_queue_tag *bqt)
++void blk_free_tags(struct blk_queue_tag *bqt)
+ {
+-      int retval;
+-
+-      retval = atomic_dec_and_test(&bqt->refcnt);
+-      if (retval) {
++      if (atomic_dec_and_test(&bqt->refcnt)) {
+               BUG_ON(find_first_bit(bqt->tag_map, bqt->max_depth) <
+                                                       bqt->max_depth);
+ 
+@@ -50,9 +47,8 @@ static int __blk_free_tags(struct blk_queue_tag *bqt)
+ 
+               kfree(bqt);
+       }
+-
+-      return retval;
+ }
++EXPORT_SYMBOL(blk_free_tags);
+ 
+ /**
+  * __blk_queue_free_tags - release tag maintenance info
+@@ -69,28 +65,13 @@ void __blk_queue_free_tags(struct request_queue *q)
+       if (!bqt)
+               return;
+ 
+-      __blk_free_tags(bqt);
++      blk_free_tags(bqt);
+ 
+       q->queue_tags = NULL;
+       queue_flag_clear_unlocked(QUEUE_FLAG_QUEUED, q);
+ }
+ 
+ /**
+- * blk_free_tags - release a given set of tag maintenance info
+- * @bqt:      the tag map to free
+- *
+- * For externally managed @bqt frees the map.  Callers of this
+- * function must guarantee to have released all the queues that
+- * might have been using this tag map.
+- */
+-void blk_free_tags(struct blk_queue_tag *bqt)
+-{
+-      if (unlikely(!__blk_free_tags(bqt)))
+-              BUG();
+-}
+-EXPORT_SYMBOL(blk_free_tags);
+-
+-/**
+  * blk_queue_free_tags - release tag maintenance info
+  * @q:  the request queue for the device
+  *
+diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
+index fbd5a67cb773..a0926a6094b2 100644
+--- a/block/compat_ioctl.c
++++ b/block/compat_ioctl.c
+@@ -690,6 +690,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, 
unsigned long arg)
+       case BLKROSET:
+       case BLKDISCARD:
+       case BLKSECDISCARD:
++      case BLKZEROOUT:
+       /*
+        * the ones below are implemented in blkdev_locked_ioctl,
+        * but we call blkdev_ioctl, which gets the lock for us
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index 9aa42998d757..b54f8b3c7924 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -457,6 +457,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ 
+       /* Promise */
+       { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },   /* PDC42819 */
++      { PCI_VDEVICE(PROMISE, 0x3781), board_ahci },   /* FastTrak TX8660 
ahci-mode */
+ 
+       /* Asmedia */
+       { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci },   /* ASM1060 */
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index 62fda16c8377..f7616036663b 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -4787,6 +4787,10 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
+  *    ata_qc_new - Request an available ATA command, for queueing
+  *    @ap: target port
+  *
++ *    Some ATA host controllers may implement a queue depth which is less
++ *    than ATA_MAX_QUEUE. So we shouldn't allocate a tag which is beyond
++ *    the hardware limitation.
++ *
+  *    LOCKING:
+  *    None.
+  */
+@@ -4794,14 +4798,15 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
+ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
+ {
+       struct ata_queued_cmd *qc = NULL;
++      unsigned int max_queue = ap->host->n_tags;
+       unsigned int i, tag;
+ 
+       /* no command while frozen */
+       if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
+               return NULL;
+ 
+-      for (i = 0; i < ATA_MAX_QUEUE; i++) {
+-              tag = (i + ap->last_tag + 1) % ATA_MAX_QUEUE;
++      for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) {
++              tag = tag < max_queue ? tag : 0;
+ 
+               /* the last tag is reserved for internal command. */
+               if (tag == ATA_TAG_INTERNAL)
+@@ -6103,6 +6108,7 @@ void ata_host_init(struct ata_host *host, struct device 
*dev,
+ {
+       spin_lock_init(&host->lock);
+       mutex_init(&host->eh_mutex);
++      host->n_tags = ATA_MAX_QUEUE - 1;
+       host->dev = dev;
+       host->ops = ops;
+ }
+@@ -6184,6 +6190,8 @@ int ata_host_register(struct ata_host *host, struct 
scsi_host_template *sht)
+ {
+       int i, rc;
+ 
++      host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1);
++
+       /* host must have been started */
+       if (!(host->flags & ATA_HOST_STARTED)) {
+               dev_err(host->dev, "BUG: trying to register unstarted host\n");
+diff --git a/drivers/base/platform.c b/drivers/base/platform.c
+index 3c51eb0bd659..9dbf4ef2b2a3 100644
+--- a/drivers/base/platform.c
++++ b/drivers/base/platform.c
+@@ -89,8 +89,13 @@ int platform_get_irq(struct platform_device *dev, unsigned 
int num)
+       return dev->archdata.irqs[num];
+ #else
+       struct resource *r;
+-      if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node)
+-              return of_irq_get(dev->dev.of_node, num);
++      if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) {
++              int ret;
++
++              ret = of_irq_get(dev->dev.of_node, num);
++              if (ret >= 0 || ret == -EPROBE_DEFER)
++                      return ret;
++      }
+ 
+       r = platform_get_resource(dev, IORESOURCE_IRQ, num);
+ 
+diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
+index 270f68a6b724..7164045c06e4 100644
+--- a/drivers/gpu/drm/radeon/cik.c
++++ b/drivers/gpu/drm/radeon/cik.c
+@@ -2219,6 +2219,7 @@ static void cik_tiling_mode_table_init(struct 
radeon_device *rdev)
+                               gb_tile_moden = 0;
+                               break;
+                       }
++                      rdev->config.cik.macrotile_mode_array[reg_offset] = 
gb_tile_moden;
+                       WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
gb_tile_moden);
+               }
+       } else if (num_pipe_configs == 8) {
+@@ -7270,6 +7271,7 @@ static inline u32 cik_get_ih_wptr(struct radeon_device 
*rdev)
+               tmp = RREG32(IH_RB_CNTL);
+               tmp |= IH_WPTR_OVERFLOW_CLEAR;
+               WREG32(IH_RB_CNTL, tmp);
++              wptr &= ~RB_OVERFLOW;
+       }
+       return (wptr & rdev->ih.ptr_mask);
+ }
+diff --git a/drivers/gpu/drm/radeon/evergreen.c 
b/drivers/gpu/drm/radeon/evergreen.c
+index 64108dbc7d45..4b3c5f7ae63b 100644
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -4763,6 +4763,7 @@ static u32 evergreen_get_ih_wptr(struct radeon_device 
*rdev)
+               tmp = RREG32(IH_RB_CNTL);
+               tmp |= IH_WPTR_OVERFLOW_CLEAR;
+               WREG32(IH_RB_CNTL, tmp);
++              wptr &= ~RB_OVERFLOW;
+       }
+       return (wptr & rdev->ih.ptr_mask);
+ }
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index f28ab840cc23..788f602e8989 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -3795,6 +3795,7 @@ static u32 r600_get_ih_wptr(struct radeon_device *rdev)
+               tmp = RREG32(IH_RB_CNTL);
+               tmp |= IH_WPTR_OVERFLOW_CLEAR;
+               WREG32(IH_RB_CNTL, tmp);
++              wptr &= ~RB_OVERFLOW;
+       }
+       return (wptr & rdev->ih.ptr_mask);
+ }
+diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
+index cb7508dc94f3..ea93393374df 100644
+--- a/drivers/gpu/drm/radeon/si.c
++++ b/drivers/gpu/drm/radeon/si.c
+@@ -6098,6 +6098,7 @@ static inline u32 si_get_ih_wptr(struct radeon_device 
*rdev)
+               tmp = RREG32(IH_RB_CNTL);
+               tmp |= IH_WPTR_OVERFLOW_CLEAR;
+               WREG32(IH_RB_CNTL, tmp);
++              wptr &= ~RB_OVERFLOW;
+       }
+       return (wptr & rdev->ih.ptr_mask);
+ }
+diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
+index efee4c59239f..34b9a601ad07 100644
+--- a/drivers/hwmon/smsc47m192.c
++++ b/drivers/hwmon/smsc47m192.c
+@@ -86,7 +86,7 @@ static inline u8 IN_TO_REG(unsigned long val, int n)
+  */
+ static inline s8 TEMP_TO_REG(int val)
+ {
+-      return clamp_val(SCALE(val, 1, 1000), -128000, 127000);
++      return SCALE(clamp_val(val, -128000, 127000), 1, 1000);
+ }
+ 
+ static inline int TEMP_FROM_REG(s8 val)
+@@ -384,6 +384,8 @@ static ssize_t set_vrm(struct device *dev, struct 
device_attribute *attr,
+       err = kstrtoul(buf, 10, &val);
+       if (err)
+               return err;
++      if (val > 255)
++              return -EINVAL;
+ 
+       data->vrm = val;
+       return count;
+diff --git a/drivers/input/input.c b/drivers/input/input.c
+index 1c4c0db05550..29ca0bb4f561 100644
+--- a/drivers/input/input.c
++++ b/drivers/input/input.c
+@@ -257,9 +257,10 @@ static int input_handle_abs_event(struct input_dev *dev,
+ }
+ 
+ static int input_get_disposition(struct input_dev *dev,
+-                        unsigned int type, unsigned int code, int value)
++                        unsigned int type, unsigned int code, int *pval)
+ {
+       int disposition = INPUT_IGNORE_EVENT;
++      int value = *pval;
+ 
+       switch (type) {
+ 
+@@ -357,6 +358,7 @@ static int input_get_disposition(struct input_dev *dev,
+               break;
+       }
+ 
++      *pval = value;
+       return disposition;
+ }
+ 
+@@ -365,7 +367,7 @@ static void input_handle_event(struct input_dev *dev,
+ {
+       int disposition;
+ 
+-      disposition = input_get_disposition(dev, type, code, value);
++      disposition = input_get_disposition(dev, type, code, &value);
+ 
+       if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event)
+               dev->event(dev, type, code, value);
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index ec772d962f06..ef9e0b8a9aa7 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -132,7 +132,8 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
+               1232, 5710, 1156, 4696
+       },
+       {
+-              (const char * const []){"LEN0034", "LEN0036", "LEN2004", NULL},
++              (const char * const []){"LEN0034", "LEN0036", "LEN2002",
++                                      "LEN2004", NULL},
+               1024, 5112, 2024, 4832
+       },
+       {
+@@ -168,7 +169,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
+       "LEN0049",
+       "LEN2000",
+       "LEN2001", /* Edge E431 */
+-      "LEN2002",
++      "LEN2002", /* Edge E531 */
+       "LEN2003",
+       "LEN2004", /* L440 */
+       "LEN2005",
+diff --git a/drivers/media/dvb-frontends/tda10071.c 
b/drivers/media/dvb-frontends/tda10071.c
+index 8ad3a57cf640..287b977862e2 100644
+--- a/drivers/media/dvb-frontends/tda10071.c
++++ b/drivers/media/dvb-frontends/tda10071.c
+@@ -667,6 +667,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+       int ret, i;
+       u8 mode, rolloff, pilot, inversion, div;
++      fe_modulation_t modulation;
+ 
+       dev_dbg(&priv->i2c->dev, "%s: delivery_system=%d modulation=%d " \
+               "frequency=%d symbol_rate=%d inversion=%d pilot=%d " \
+@@ -701,10 +702,13 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
+ 
+       switch (c->delivery_system) {
+       case SYS_DVBS:
++              modulation = QPSK;
+               rolloff = 0;
+               pilot = 2;
+               break;
+       case SYS_DVBS2:
++              modulation = c->modulation;
++
+               switch (c->rolloff) {
+               case ROLLOFF_20:
+                       rolloff = 2;
+@@ -749,7 +753,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
+ 
+       for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
+               if (c->delivery_system == TDA10071_MODCOD[i].delivery_system &&
+-                      c->modulation == TDA10071_MODCOD[i].modulation &&
++                      modulation == TDA10071_MODCOD[i].modulation &&
+                       c->fec_inner == TDA10071_MODCOD[i].fec) {
+                       mode = TDA10071_MODCOD[i].val;
+                       dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n",
+diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c 
b/drivers/media/usb/hdpvr/hdpvr-video.c
+index 0500c4175d5f..6bce01a674f9 100644
+--- a/drivers/media/usb/hdpvr/hdpvr-video.c
++++ b/drivers/media/usb/hdpvr/hdpvr-video.c
+@@ -82,7 +82,7 @@ static void hdpvr_read_bulk_callback(struct urb *urb)
+ }
+ 
+ /*=========================================================================*/
+-/* bufffer bits */
++/* buffer bits */
+ 
+ /* function expects dev->io_mutex to be hold by caller */
+ int hdpvr_cancel_queue(struct hdpvr_device *dev)
+@@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl)
+       case V4L2_CID_MPEG_AUDIO_ENCODING:
+               if (dev->flags & HDPVR_FLAG_AC3_CAP) {
+                       opt->audio_codec = ctrl->val;
+-                      return hdpvr_set_audio(dev, opt->audio_input,
++                      return hdpvr_set_audio(dev, opt->audio_input + 1,
+                                             opt->audio_codec);
+               }
+               return 0;
+@@ -1198,7 +1198,7 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, 
struct device *parent,
+       v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
+               V4L2_CID_MPEG_AUDIO_ENCODING,
+               ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : 
V4L2_MPEG_AUDIO_ENCODING_AAC,
+-              0x7, V4L2_MPEG_AUDIO_ENCODING_AAC);
++              0x7, ac3 ? dev->options.audio_codec : 
V4L2_MPEG_AUDIO_ENCODING_AAC);
+       v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
+               V4L2_CID_MPEG_VIDEO_ENCODING,
+               V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3,
+diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c 
b/drivers/media/v4l2-core/v4l2-dv-timings.c
+index a2e257970fec..78d99b137d91 100644
+--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
++++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
+@@ -595,10 +595,10 @@ struct v4l2_fract v4l2_calc_aspect_ratio(u8 
hor_landscape, u8 vert_portrait)
+               aspect.denominator = 9;
+       } else if (ratio == 34) {
+               aspect.numerator = 4;
+-              aspect.numerator = 3;
++              aspect.denominator = 3;
+       } else if (ratio == 68) {
+               aspect.numerator = 15;
+-              aspect.numerator = 9;
++              aspect.denominator = 9;
+       } else {
+               aspect.numerator = hor_landscape + 99;
+               aspect.denominator = 100;
+diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig
+index 2872ece81f35..44333bd8f908 100644
+--- a/drivers/parport/Kconfig
++++ b/drivers/parport/Kconfig
+@@ -5,6 +5,12 @@
+ # Parport configuration.
+ #
+ 
++config ARCH_MIGHT_HAVE_PC_PARPORT
++      bool
++      help
++        Select this config option from the architecture Kconfig if
++        the architecture might have PC parallel port hardware.
++
+ menuconfig PARPORT
+       tristate "Parallel port support"
+       depends on HAS_IOMEM
+@@ -31,12 +37,6 @@ menuconfig PARPORT
+ 
+         If unsure, say Y.
+ 
+-config ARCH_MIGHT_HAVE_PC_PARPORT
+-      bool
+-      help
+-        Select this config option from the architecture Kconfig if
+-        the architecture might have PC parallel port hardware.
+-
+ if PARPORT
+ 
+ config PARPORT_PC
+diff --git a/drivers/staging/media/omap4iss/Kconfig 
b/drivers/staging/media/omap4iss/Kconfig
+index b9fe753969bd..15940f8fdd24 100644
+--- a/drivers/staging/media/omap4iss/Kconfig
++++ b/drivers/staging/media/omap4iss/Kconfig
+@@ -1,6 +1,6 @@
+ config VIDEO_OMAP4
+       bool "OMAP 4 Camera support"
+-      depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && I2C && ARCH_OMAP4
++      depends on VIDEO_V4L2=y && VIDEO_V4L2_SUBDEV_API && I2C=y && ARCH_OMAP4
+       select VIDEOBUF2_DMA_CONTIG
+       ---help---
+         Driver for an OMAP 4 ISS controller.
+diff --git a/fs/coredump.c b/fs/coredump.c
+index 0b2528fb640e..a93f7e6ea4cf 100644
+--- a/fs/coredump.c
++++ b/fs/coredump.c
+@@ -306,7 +306,7 @@ static int zap_threads(struct task_struct *tsk, struct 
mm_struct *mm,
+       if (unlikely(nr < 0))
+               return nr;
+ 
+-      tsk->flags = PF_DUMPCORE;
++      tsk->flags |= PF_DUMPCORE;
+       if (atomic_read(&mm->mm_users) == nr + 1)
+               goto done;
+       /*
+diff --git a/fs/namei.c b/fs/namei.c
+index 8274c8d39b03..bdea10963aa5 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -2247,9 +2247,10 @@ done:
+               goto out;
+       }
+       path->dentry = dentry;
+-      path->mnt = mntget(nd->path.mnt);
++      path->mnt = nd->path.mnt;
+       if (should_follow_link(dentry, nd->flags & LOOKUP_FOLLOW))
+               return 1;
++      mntget(path->mnt);
+       follow_mount(path);
+       error = 0;
+ out:
+diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
+index 871d6eda8dba..8f854dde4150 100644
+--- a/fs/nfs/nfs3acl.c
++++ b/fs/nfs/nfs3acl.c
+@@ -247,3 +247,46 @@ const struct xattr_handler *nfs3_xattr_handlers[] = {
+       &posix_acl_default_xattr_handler,
+       NULL,
+ };
++
++static int
++nfs3_list_one_acl(struct inode *inode, int type, const char *name, void *data,
++              size_t size, ssize_t *result)
++{
++      struct posix_acl *acl;
++      char *p = data + *result;
++
++      acl = get_acl(inode, type);
++      if (!acl)
++              return 0;
++
++      posix_acl_release(acl);
++
++      *result += strlen(name);
++      *result += 1;
++      if (!size)
++              return 0;
++      if (*result > size)
++              return -ERANGE;
++
++      strcpy(p, name);
++      return 0;
++}
++
++ssize_t
++nfs3_listxattr(struct dentry *dentry, char *data, size_t size)
++{
++      struct inode *inode = dentry->d_inode;
++      ssize_t result = 0;
++      int error;
++
++      error = nfs3_list_one_acl(inode, ACL_TYPE_ACCESS,
++                      POSIX_ACL_XATTR_ACCESS, data, size, &result);
++      if (error)
++              return error;
++
++      error = nfs3_list_one_acl(inode, ACL_TYPE_DEFAULT,
++                      POSIX_ACL_XATTR_DEFAULT, data, size, &result);
++      if (error)
++              return error;
++      return result;
++}
+diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
+index a462ef0fb5d6..8a18b4a0a4ee 100644
+--- a/fs/nfs/nfs3proc.c
++++ b/fs/nfs/nfs3proc.c
+@@ -926,7 +926,7 @@ static const struct inode_operations 
nfs3_dir_inode_operations = {
+       .getattr        = nfs_getattr,
+       .setattr        = nfs_setattr,
+ #ifdef CONFIG_NFS_V3_ACL
+-      .listxattr      = generic_listxattr,
++      .listxattr      = nfs3_listxattr,
+       .getxattr       = generic_getxattr,
+       .setxattr       = generic_setxattr,
+       .removexattr    = generic_removexattr,
+@@ -940,7 +940,7 @@ static const struct inode_operations 
nfs3_file_inode_operations = {
+       .getattr        = nfs_getattr,
+       .setattr        = nfs_setattr,
+ #ifdef CONFIG_NFS_V3_ACL
+-      .listxattr      = generic_listxattr,
++      .listxattr      = nfs3_listxattr,
+       .getxattr       = generic_getxattr,
+       .setxattr       = generic_setxattr,
+       .removexattr    = generic_removexattr,
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index 3fee55e73e5e..e13b3aef0b0c 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -593,6 +593,7 @@ struct ata_host {
+       struct device           *dev;
+       void __iomem * const    *iomap;
+       unsigned int            n_ports;
++      unsigned int            n_tags;                 /* nr of NCQ tags */
+       void                    *private_data;
+       struct ata_port_operations *ops;
+       unsigned long           flags;
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 7e259b2bdf44..71136720ffa1 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -811,7 +811,7 @@ static struct {
+       { trace_clock_local,    "local",        1 },
+       { trace_clock_global,   "global",       1 },
+       { trace_clock_counter,  "counter",      0 },
+-      { trace_clock_jiffies,  "uptime",       1 },
++      { trace_clock_jiffies,  "uptime",       0 },
+       { trace_clock,          "perf",         1 },
+       ARCH_TRACE_CLOCKS
+ };
+diff --git a/kernel/trace/trace_clock.c b/kernel/trace/trace_clock.c
+index 26dc348332b7..57b67b1f24d1 100644
+--- a/kernel/trace/trace_clock.c
++++ b/kernel/trace/trace_clock.c
+@@ -59,13 +59,14 @@ u64 notrace trace_clock(void)
+ 
+ /*
+  * trace_jiffy_clock(): Simply use jiffies as a clock counter.
++ * Note that this use of jiffies_64 is not completely safe on
++ * 32-bit systems. But the window is tiny, and the effect if
++ * we are affected is that we will have an obviously bogus
++ * timestamp on a trace event - i.e. not life threatening.
+  */
+ u64 notrace trace_clock_jiffies(void)
+ {
+-      u64 jiffy = jiffies - INITIAL_JIFFIES;
+-
+-      /* Return nsecs */
+-      return (u64)jiffies_to_usecs(jiffy) * 1000ULL;
++      return jiffies_64_to_clock_t(jiffies_64 - INITIAL_JIFFIES);
+ }
+ 
+ /*
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index 30dd6265a141..923f38e62bcf 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -2422,6 +2422,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, 
struct mm_struct *src,
+               } else {
+                       if (cow)
+                               huge_ptep_set_wrprotect(src, addr, src_pte);
++                      entry = huge_ptep_get(src_pte);
+                       ptepage = pte_page(entry);
+                       get_page(ptepage);
+                       page_dup_rmap(ptepage);
+diff --git a/mm/slab_common.c b/mm/slab_common.c
+index 1ec3c619ba04..f149e6724411 100644
+--- a/mm/slab_common.c
++++ b/mm/slab_common.c
+@@ -56,7 +56,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, 
const char *name,
+                       continue;
+               }
+ 
+-#if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON)
++#if !defined(CONFIG_SLUB)
+               /*
+                * For simplicity, we won't check this in the list of memcg
+                * caches. We have control over memcg naming, and if there
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index 4fe2e6e2bc76..e6283464a8e6 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -1450,18 +1450,17 @@ static int nl80211_send_wiphy(struct 
cfg80211_registered_device *dev,
+               }
+               CMD(start_p2p_device, START_P2P_DEVICE);
+               CMD(set_mcast_rate, SET_MCAST_RATE);
++#ifdef CONFIG_NL80211_TESTMODE
++              CMD(testmode_cmd, TESTMODE);
++#endif
+               if (state->split) {
+                       CMD(crit_proto_start, CRIT_PROTOCOL_START);
+                       CMD(crit_proto_stop, CRIT_PROTOCOL_STOP);
+                       if (dev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)
+                               CMD(channel_switch, CHANNEL_SWITCH);
++                      CMD(set_qos_map, SET_QOS_MAP);
+               }
+-              CMD(set_qos_map, SET_QOS_MAP);
+-
+-#ifdef CONFIG_NL80211_TESTMODE
+-              CMD(testmode_cmd, TESTMODE);
+-#endif
+-
++              /* add into the if now */
+ #undef CMD
+ 
+               if (dev->ops->connect || dev->ops->auth) {

Reply via email to