Skip to content
Permalink
Browse files

merge upstream 3.4.111

  • Loading branch information...
nisenbeck committed Mar 25, 2016
1 parent c6ec500 commit 82c7ca4c8a3b2cf13489b6bc51a2ddfd057a237e
Showing with 1,390 additions and 731 deletions.
  1. +1 −1 Makefile
  2. +31 −0 arch/mips/include/asm/pgtable.h
  3. +3 −2 arch/mips/kernel/mips-mt-fpaff.c
  4. +1 −1 arch/s390/kernel/process.c
  5. +4 −0 arch/s390/kernel/sclp.S
  6. +1 −1 arch/tile/kernel/setup.c
  7. +0 −15 arch/x86/include/asm/desc.h
  8. +1 −0 arch/x86/include/asm/kvm_host.h
  9. +1 −2 arch/x86/include/asm/mmu.h
  10. +47 −2 arch/x86/include/asm/mmu_context.h
  11. +2 −2 arch/x86/kernel/cpu/common.c
  12. +147 −120 arch/x86/kernel/ldt.c
  13. +3 −3 arch/x86/kernel/process_64.c
  14. +5 −3 arch/x86/kernel/step.c
  15. +11 −11 arch/x86/kvm/svm.c
  16. +1 −0 arch/x86/kvm/trace.h
  17. +4 −1 arch/x86/kvm/vmx.c
  18. +2 −7 arch/x86/kvm/x86.c
  19. +1 −2 arch/x86/math-emu/fpu_entry.c
  20. +18 −3 arch/x86/math-emu/fpu_system.h
  21. +1 −2 arch/x86/math-emu/get_address.c
  22. +2 −1 arch/x86/power/cpu.c
  23. +40 −0 arch/x86/xen/enlighten.c
  24. +7 −2 drivers/ata/libata-core.c
  25. +7 −0 drivers/ata/libata-pmp.c
  26. +2 −1 drivers/ata/libata-scsi.c
  27. +0 −1 drivers/crypto/ixp4xx_crypto.c
  28. +1 −1 drivers/edac/ppc4xx_edac.c
  29. +5 −2 drivers/gpu/drm/drm_crtc.c
  30. +6 −1 drivers/gpu/drm/radeon/radeon_combios.c
  31. +3 −0 drivers/input/touchscreen/usbtouchscreen.c
  32. +8 −4 drivers/isdn/i4l/isdn_ppp.c
  33. +10 −4 drivers/md/dm-thin.c
  34. +16 −2 drivers/md/md.c
  35. +6 −0 drivers/md/persistent-data/dm-btree-internal.h
  36. +17 −18 drivers/md/persistent-data/dm-btree-remove.c
  37. +37 −0 drivers/md/persistent-data/dm-btree-spine.c
  38. +2 −7 drivers/md/persistent-data/dm-btree.c
  39. +7 −2 drivers/md/raid1.c
  40. +2 −0 drivers/mmc/card/block.c
  41. +7 −8 drivers/net/can/mcp251x.c
  42. +1 −3 drivers/net/ethernet/sun/niu.c
  43. +2 −4 drivers/net/ppp/ppp_generic.c
  44. +6 −0 drivers/net/ppp/pptp.c
  45. +8 −4 drivers/net/slip/slhc.c
  46. +1 −1 drivers/net/slip/slip.c
  47. +2 −2 drivers/net/virtio_net.c
  48. +17 −2 drivers/scsi/libfc/fc_fcp.c
  49. +2 −23 drivers/scsi/libiscsi.c
  50. +3 −0 drivers/scsi/sg.c
  51. +1 −1 drivers/scsi/st.c
  52. +9 −5 drivers/target/iscsi/iscsi_target.c
  53. +0 −1 drivers/usb/dwc3/core.h
  54. +0 −5 drivers/usb/dwc3/ep0.c
  55. +52 −18 drivers/usb/dwc3/gadget.c
  56. +8 −5 drivers/usb/host/xhci-hub.c
  57. +1 −1 drivers/usb/host/xhci-mem.c
  58. +4 −1 drivers/usb/host/xhci-ring.c
  59. +3 −0 drivers/usb/host/xhci.c
  60. +1 −0 drivers/usb/host/xhci.h
  61. +1 −0 drivers/usb/serial/cp210x.c
  62. +1 −0 drivers/usb/serial/option.c
  63. +1 −0 drivers/usb/serial/sierra.c
  64. +31 −0 drivers/usb/serial/whiteheat.c
  65. +12 −0 drivers/usb/storage/unusual_devs.h
  66. +1 −0 drivers/vhost/vhost.c
  67. +1 −2 fs/9p/vfs_inode.c
  68. +1 −2 fs/9p/vfs_inode_dotl.c
  69. +1 −1 fs/btrfs/inode-map.c
  70. +25 −18 fs/buffer.c
  71. +4 −3 fs/ext4/extents.c
  72. +5 −11 fs/ext4/mballoc.c
  73. +0 −130 fs/file_table.c
  74. +13 −6 fs/hpfs/super.c
  75. +0 −3 fs/internal.h
  76. +7 −3 fs/ocfs2/dlmglue.c
  77. +0 −2 fs/open.c
  78. +2 −19 fs/super.c
  79. +49 −5 include/linux/buffer_head.h
  80. +0 −13 include/linux/fs.h
  81. +2 −0 include/linux/libata.h
  82. +1 −0 include/net/af_unix.h
  83. +1 −1 include/net/ip6_fib.h
  84. +1 −0 include/net/sock.h
  85. +16 −8 include/sound/tlv.h
  86. +9 −9 ipc/msg.c
  87. +17 −6 ipc/sem.c
  88. +7 −6 ipc/shm.c
  89. +4 −4 ipc/util.c
  90. +10 −2 kernel/events/core.c
  91. +8 −8 kernel/watchdog.c
  92. +13 −4 mm/memory.c
  93. +3 −0 net/atm/clip.c
  94. +3 −0 net/ax25/af_ax25.c
  95. +38 −3 net/core/datagram.c
  96. +14 −12 net/core/dev.c
  97. +52 −54 net/core/rtnetlink.c
  98. +10 −4 net/core/sysctl_net_core.c
  99. +3 −0 net/decnet/af_decnet.c
  100. +3 −0 net/ipv4/af_inet.c
  101. +4 −2 net/ipv4/ip_fragment.c
  102. +7 −4 net/ipv4/sysctl_net_ipv4.c
  103. +16 −1 net/ipv6/addrconf.c
  104. +3 −0 net/ipv6/af_inet6.c
  105. +8 −11 net/ipv6/ip6_fib.c
  106. +2 −2 net/ipv6/ndisc.c
  107. +33 −8 net/ipv6/route.c
  108. +3 −0 net/irda/af_irda.c
  109. +23 −23 net/key/af_key.c
  110. +1 −0 net/mac80211/debugfs_netdev.c
  111. +17 −4 net/netfilter/nf_conntrack_core.c
  112. +2 −1 net/netfilter/nf_conntrack_expect.c
  113. +3 −1 net/rds/ib_rdma.c
  114. +1 −1 net/rds/info.c
  115. +3 −1 net/rds/send.c
  116. +1 −1 net/sctp/sm_sideeffect.c
  117. +3 −0 net/sunrpc/xprt.c
  118. +169 −19 net/unix/af_unix.c
  119. +1 −1 scripts/kconfig/streamline_config.pl
  120. +6 −4 security/keys/gc.c
  121. +2 −0 sound/usb/mixer.c
  122. +12 −0 sound/usb/mixer_maps.c
  123. +37 −0 sound/usb/mixer_quirks.c
  124. +4 −0 sound/usb/mixer_quirks.h
  125. +68 −0 sound/usb/quirks-table.h
@@ -1,6 +1,6 @@
VERSION = 3
PATCHLEVEL = 4
SUBLEVEL = 110
SUBLEVEL = 111
EXTRAVERSION =
NAME = Saber-toothed Squirrel

@@ -153,8 +153,39 @@ static inline void set_pte(pte_t *ptep, pte_t pteval)
* Make sure the buddy is global too (if it's !none,
* it better already be global)
*/
#ifdef CONFIG_SMP
/*
* For SMP, multiple CPUs can race, so we need to do
* this atomically.
*/
#ifdef CONFIG_64BIT
#define LL_INSN "lld"
#define SC_INSN "scd"
#else /* CONFIG_32BIT */
#define LL_INSN "ll"
#define SC_INSN "sc"
#endif
unsigned long page_global = _PAGE_GLOBAL;
unsigned long tmp;

__asm__ __volatile__ (
" .set push\n"
" .set noreorder\n"
"1: " LL_INSN " %[tmp], %[buddy]\n"
" bnez %[tmp], 2f\n"
" or %[tmp], %[tmp], %[global]\n"
" " SC_INSN " %[tmp], %[buddy]\n"
" beqz %[tmp], 1b\n"
" nop\n"
"2:\n"
" .set pop"
: [buddy] "+m" (buddy->pte),
[tmp] "=&r" (tmp)
: [global] "r" (page_global));
#else /* !CONFIG_SMP */
if (pte_none(*buddy))
pte_val(*buddy) = pte_val(*buddy) | _PAGE_GLOBAL;
#endif /* CONFIG_SMP */
}
#endif
}
@@ -154,7 +154,7 @@ asmlinkage long mipsmt_sys_sched_getaffinity(pid_t pid, unsigned int len,
unsigned long __user *user_mask_ptr)
{
unsigned int real_len;
cpumask_t mask;
cpumask_t allowed, mask;
int retval;
struct task_struct *p;

@@ -173,7 +173,8 @@ asmlinkage long mipsmt_sys_sched_getaffinity(pid_t pid, unsigned int len,
if (retval)
goto out_unlock;

cpumask_and(&mask, &p->thread.user_cpus_allowed, cpu_possible_mask);
cpumask_or(&allowed, &p->thread.user_cpus_allowed, &p->cpus_allowed);
cpumask_and(&mask, &allowed, cpu_active_mask);

out_unlock:
read_unlock(&tasklist_lock);
@@ -246,7 +246,7 @@ asmlinkage void execve_tail(void)
{
current->thread.fp_regs.fpc = 0;
if (MACHINE_HAS_IEEE)
asm volatile("sfpc %0,%0" : : "d" (0));
asm volatile("sfpc %0" : : "d" (0));
}

/*
@@ -270,6 +270,8 @@ ENTRY(_sclp_print_early)
jno .Lesa2
ahi %r15,-80
stmh %r6,%r15,96(%r15) # store upper register halves
basr %r13,0
lmh %r0,%r15,.Lzeroes-.(%r13) # clear upper register halves
.Lesa2:
#endif
lr %r10,%r2 # save string pointer
@@ -293,6 +295,8 @@ ENTRY(_sclp_print_early)
#endif
lm %r6,%r15,120(%r15) # restore registers
br %r14
.Lzeroes:
.fill 64,4,0

.LwritedataS4:
.long 0x00760005 # SCLP command for write data
@@ -972,7 +972,7 @@ static void __init load_hv_initrd(void)

void __init free_initrd_mem(unsigned long begin, unsigned long end)
{
free_bootmem(__pa(begin), end - begin);
free_bootmem_late(__pa(begin), end - begin);
}

#else
@@ -279,21 +279,6 @@ static inline void clear_LDT(void)
set_ldt(NULL, 0);
}

/*
* load one particular LDT into the current CPU
*/
static inline void load_LDT_nolock(mm_context_t *pc)
{
set_ldt(pc->ldt, pc->size);
}

static inline void load_LDT(mm_context_t *pc)
{
preempt_disable();
load_LDT_nolock(pc);
preempt_enable();
}

static inline unsigned long get_desc_base(const struct desc_struct *desc)
{
return (unsigned)(desc->base0 | ((desc->base1) << 16) | ((desc->base2) << 24));
@@ -87,6 +87,7 @@
#define GP_VECTOR 13
#define PF_VECTOR 14
#define MF_VECTOR 16
#define AC_VECTOR 17
#define MC_VECTOR 18

#define SELECTOR_TI_MASK (1 << 2)
@@ -9,8 +9,7 @@
* we put the segment information here.
*/
typedef struct {
void *ldt;
int size;
struct ldt_struct *ldt;

#ifdef CONFIG_X86_64
/* True if mm supports a task running in 32 bit compatibility mode. */
@@ -15,6 +15,51 @@ static inline void paravirt_activate_mm(struct mm_struct *prev,
}
#endif /* !CONFIG_PARAVIRT */

/*
* ldt_structs can be allocated, used, and freed, but they are never
* modified while live.
*/
struct ldt_struct {
/*
* Xen requires page-aligned LDTs with special permissions. This is
* needed to prevent us from installing evil descriptors such as
* call gates. On native, we could merge the ldt_struct and LDT
* allocations, but it's not worth trying to optimize.
*/
struct desc_struct *entries;
int size;
};

static inline void load_mm_ldt(struct mm_struct *mm)
{
struct ldt_struct *ldt;

/* smp_read_barrier_depends synchronizes with barrier in install_ldt */
ldt = ACCESS_ONCE(mm->context.ldt);
smp_read_barrier_depends();

/*
* Any change to mm->context.ldt is followed by an IPI to all
* CPUs with the mm active. The LDT will not be freed until
* after the IPI is handled by all such CPUs. This means that,
* if the ldt_struct changes before we return, the values we see
* will be safe, and the new values will be loaded before we run
* any user code.
*
* NB: don't try to convert this to use RCU without extreme care.
* We would still need IRQs off, because we don't want to change
* the local LDT after an IPI loaded a newer value than the one
* that we can see.
*/

if (unlikely(ldt))
set_ldt(ldt->entries, ldt->size);
else
clear_LDT();

DEBUG_LOCKS_WARN_ON(preemptible());
}

/*
* Used for LDT copy/destruction.
*/
@@ -52,7 +97,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
* load the LDT, if the LDT is different:
*/
if (unlikely(prev->context.ldt != next->context.ldt))
load_LDT_nolock(&next->context);
load_mm_ldt(next);
}
#ifdef CONFIG_SMP
else {
@@ -65,7 +110,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
* to make sure to use no freed page tables.
*/
load_cr3(next->pgd);
load_LDT_nolock(&next->context);
load_mm_ldt(next);
}
}
#endif
@@ -1254,7 +1254,7 @@ void __cpuinit cpu_init(void)
load_sp0(t, &current->thread);
set_tss_desc(cpu, t);
load_TR_desc();
load_LDT(&init_mm.context);
load_mm_ldt(&init_mm);

clear_all_debug_regs();
dbg_restore_debug_regs();
@@ -1302,7 +1302,7 @@ void __cpuinit cpu_init(void)
load_sp0(t, thread);
set_tss_desc(cpu, t);
load_TR_desc();
load_LDT(&init_mm.context);
load_mm_ldt(&init_mm);

t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap);

0 comments on commit 82c7ca4

Please sign in to comment.
You can’t perform that action at this time.