commit:     85e809cf8d53f398f9f5cc0882736d5fb9b5a2d9
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Thu May 12 00:12:12 2016 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Thu May 12 00:12:12 2016 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=85e809cf

Linux patch 4.1.24

 0000_README             |   4 +
 1023_linux-4.1.24.patch | 646 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 650 insertions(+)

diff --git a/0000_README b/0000_README
index a797069..6700cd7 100644
--- a/0000_README
+++ b/0000_README
@@ -135,6 +135,10 @@ Patch:  1022_linux-4.1.23.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.1.23
 
+Patch:  1023_linux-4.1.24.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.1.24
+
 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/1023_linux-4.1.24.patch b/1023_linux-4.1.24.patch
new file mode 100644
index 0000000..0ac83c9
--- /dev/null
+++ b/1023_linux-4.1.24.patch
@@ -0,0 +1,646 @@
+diff --git a/Makefile b/Makefile
+index 9956129bb106..df1d8b1448ae 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 1
+-SUBLEVEL = 23
++SUBLEVEL = 24
+ EXTRAVERSION =
+ NAME = Series 4800
+ 
+diff --git a/arch/powerpc/include/uapi/asm/cputable.h 
b/arch/powerpc/include/uapi/asm/cputable.h
+index de2c0e4ee1aa..67de80a8e178 100644
+--- a/arch/powerpc/include/uapi/asm/cputable.h
++++ b/arch/powerpc/include/uapi/asm/cputable.h
+@@ -31,6 +31,7 @@
+ #define PPC_FEATURE_PSERIES_PERFMON_COMPAT \
+                                       0x00000040
+ 
++/* Reserved - do not use              0x00000004 */
+ #define PPC_FEATURE_TRUE_LE           0x00000002
+ #define PPC_FEATURE_PPC_LE            0x00000001
+ 
+diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
+index 308c5e15676b..abe9cdc390a5 100644
+--- a/arch/powerpc/kernel/prom.c
++++ b/arch/powerpc/kernel/prom.c
+@@ -149,23 +149,24 @@ static struct ibm_pa_feature {
+       unsigned long   cpu_features;   /* CPU_FTR_xxx bit */
+       unsigned long   mmu_features;   /* MMU_FTR_xxx bit */
+       unsigned int    cpu_user_ftrs;  /* PPC_FEATURE_xxx bit */
++      unsigned int    cpu_user_ftrs2; /* PPC_FEATURE2_xxx bit */
+       unsigned char   pabyte;         /* byte number in ibm,pa-features */
+       unsigned char   pabit;          /* bit number (big-endian) */
+       unsigned char   invert;         /* if 1, pa bit set => clear feature */
+ } ibm_pa_features[] __initdata = {
+-      {0, 0, PPC_FEATURE_HAS_MMU,     0, 0, 0},
+-      {0, 0, PPC_FEATURE_HAS_FPU,     0, 1, 0},
+-      {CPU_FTR_CTRL, 0, 0,            0, 3, 0},
+-      {CPU_FTR_NOEXECUTE, 0, 0,       0, 6, 0},
+-      {CPU_FTR_NODSISRALIGN, 0, 0,    1, 1, 1},
+-      {0, MMU_FTR_CI_LARGE_PAGE, 0,   1, 2, 0},
+-      {CPU_FTR_REAL_LE, PPC_FEATURE_TRUE_LE, 5, 0, 0},
++      {0, 0, PPC_FEATURE_HAS_MMU, 0,          0, 0, 0},
++      {0, 0, PPC_FEATURE_HAS_FPU, 0,          0, 1, 0},
++      {CPU_FTR_CTRL, 0, 0, 0,                 0, 3, 0},
++      {CPU_FTR_NOEXECUTE, 0, 0, 0,            0, 6, 0},
++      {CPU_FTR_NODSISRALIGN, 0, 0, 0,         1, 1, 1},
++      {0, MMU_FTR_CI_LARGE_PAGE, 0, 0,                1, 2, 0},
++      {CPU_FTR_REAL_LE, 0, PPC_FEATURE_TRUE_LE, 0, 5, 0, 0},
+       /*
+        * If the kernel doesn't support TM (ie. 
CONFIG_PPC_TRANSACTIONAL_MEM=n),
+        * we don't want to turn on CPU_FTR_TM here, so we use CPU_FTR_TM_COMP
+        * which is 0 if the kernel doesn't support TM.
+        */
+-      {CPU_FTR_TM_COMP, 0, 0,         22, 0, 0},
++      {CPU_FTR_TM_COMP, 0, 0, 0,              22, 0, 0},
+ };
+ 
+ static void __init scan_features(unsigned long node, const unsigned char 
*ftrs,
+@@ -196,10 +197,12 @@ static void __init scan_features(unsigned long node, 
const unsigned char *ftrs,
+               if (bit ^ fp->invert) {
+                       cur_cpu_spec->cpu_features |= fp->cpu_features;
+                       cur_cpu_spec->cpu_user_features |= fp->cpu_user_ftrs;
++                      cur_cpu_spec->cpu_user_features2 |= fp->cpu_user_ftrs2;
+                       cur_cpu_spec->mmu_features |= fp->mmu_features;
+               } else {
+                       cur_cpu_spec->cpu_features &= ~fp->cpu_features;
+                       cur_cpu_spec->cpu_user_features &= ~fp->cpu_user_ftrs;
++                      cur_cpu_spec->cpu_user_features2 &= ~fp->cpu_user_ftrs2;
+                       cur_cpu_spec->mmu_features &= ~fp->mmu_features;
+               }
+       }
+diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h
+index 11eae5f55b70..9787b61e0758 100644
+--- a/arch/s390/include/asm/hugetlb.h
++++ b/arch/s390/include/asm/hugetlb.h
+@@ -14,6 +14,7 @@
+ 
+ #define is_hugepage_only_range(mm, addr, len) 0
+ #define hugetlb_free_pgd_range                        free_pgd_range
++#define hugepages_supported()                 (MACHINE_HAS_HPAGE)
+ 
+ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
+                    pte_t *ptep, pte_t pte);
+diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
+index 4e33fe339b3d..5b7153b34361 100644
+--- a/arch/s390/include/asm/pci.h
++++ b/arch/s390/include/asm/pci.h
+@@ -45,7 +45,8 @@ struct zpci_fmb {
+       u64 rpcit_ops;
+       u64 dma_rbytes;
+       u64 dma_wbytes;
+-} __packed __aligned(64);
++      u64 pad[2];
++} __packed __aligned(128);
+ 
+ enum zpci_state {
+       ZPCI_FN_STATE_RESERVED,
+diff --git a/arch/x86/crypto/sha-mb/sha1_mb.c 
b/arch/x86/crypto/sha-mb/sha1_mb.c
+index e510b1c5d690..e5b79c1bb191 100644
+--- a/arch/x86/crypto/sha-mb/sha1_mb.c
++++ b/arch/x86/crypto/sha-mb/sha1_mb.c
+@@ -456,10 +456,10 @@ static int sha_complete_job(struct 
mcryptd_hash_request_ctx *rctx,
+ 
+                       req = cast_mcryptd_ctx_to_req(req_ctx);
+                       if (irqs_disabled())
+-                              rctx->complete(&req->base, ret);
++                              req_ctx->complete(&req->base, ret);
+                       else {
+                               local_bh_disable();
+-                              rctx->complete(&req->base, ret);
++                              req_ctx->complete(&req->base, ret);
+                               local_bh_enable();
+                       }
+               }
+diff --git a/arch/x86/include/asm/hugetlb.h b/arch/x86/include/asm/hugetlb.h
+index 68c05398bba9..7aadd3cea843 100644
+--- a/arch/x86/include/asm/hugetlb.h
++++ b/arch/x86/include/asm/hugetlb.h
+@@ -4,6 +4,7 @@
+ #include <asm/page.h>
+ #include <asm-generic/hugetlb.h>
+ 
++#define hugepages_supported() cpu_has_pse
+ 
+ static inline int is_hugepage_only_range(struct mm_struct *mm,
+                                        unsigned long addr,
+diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c 
b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
+index 0a4973b47c99..a2ca3c757712 100644
+--- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
++++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
+@@ -207,6 +207,9 @@ static int ccp_aes_cmac_export(struct ahash_request *req, 
void *out)
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_aes_cmac_exp_ctx state;
+ 
++      /* Don't let anything leak to 'out' */
++      memset(&state, 0, sizeof(state));
++
+       state.null_msg = rctx->null_msg;
+       memcpy(state.iv, rctx->iv, sizeof(state.iv));
+       state.buf_count = rctx->buf_count;
+diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c 
b/drivers/crypto/ccp/ccp-crypto-sha.c
+index 9711b6d29162..895c0d1316e5 100644
+--- a/drivers/crypto/ccp/ccp-crypto-sha.c
++++ b/drivers/crypto/ccp/ccp-crypto-sha.c
+@@ -199,6 +199,9 @@ static int ccp_sha_export(struct ahash_request *req, void 
*out)
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_sha_exp_ctx state;
+ 
++      /* Don't let anything leak to 'out' */
++      memset(&state, 0, sizeof(state));
++
+       state.type = rctx->type;
+       state.msg_bits = rctx->msg_bits;
+       state.first = rctx->first;
+diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
+index adcc628b1f93..5d87111fdc87 100644
+--- a/drivers/edac/sb_edac.c
++++ b/drivers/edac/sb_edac.c
+@@ -1316,7 +1316,7 @@ static int get_memory_error_data(struct mem_ctl_info 
*mci,
+       }
+ 
+       ch_way = TAD_CH(reg) + 1;
+-      sck_way = 1 << TAD_SOCK(reg);
++      sck_way = TAD_SOCK(reg);
+ 
+       if (ch_way == 3)
+               idx = addr >> 6;
+@@ -1355,7 +1355,7 @@ static int get_memory_error_data(struct mem_ctl_info 
*mci,
+               switch(ch_way) {
+               case 2:
+               case 4:
+-                      sck_xch = 1 << sck_way * (ch_way >> 1);
++                      sck_xch = (1 << sck_way) * (ch_way >> 1);
+                       break;
+               default:
+                       sprintf(msg, "Invalid mirror set. Can't decode addr");
+@@ -1391,7 +1391,7 @@ static int get_memory_error_data(struct mem_ctl_info 
*mci,
+ 
+       ch_addr = addr - offset;
+       ch_addr >>= (6 + shiftup);
+-      ch_addr /= ch_way * sck_way;
++      ch_addr /= sck_xch;
+       ch_addr <<= (6 + shiftup);
+       ch_addr |= addr & ((1 << (6 + shiftup)) - 1);
+ 
+diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c 
b/drivers/gpu/drm/drm_dp_mst_topology.c
+index 9e33705d4d0e..2c04c59022f3 100644
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -1663,13 +1663,19 @@ static int drm_dp_payload_send_msg(struct 
drm_dp_mst_topology_mgr *mgr,
+       struct drm_dp_mst_branch *mstb;
+       int len, ret, port_num;
+ 
++      port = drm_dp_get_validated_port_ref(mgr, port);
++      if (!port)
++              return -EINVAL;
++
+       port_num = port->port_num;
+       mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent);
+       if (!mstb) {
+               mstb = drm_dp_get_last_connected_port_and_mstb(mgr, 
port->parent, &port_num);
+ 
+-              if (!mstb)
++              if (!mstb) {
++                      drm_dp_put_port(port);
+                       return -EINVAL;
++              }
+       }
+ 
+       txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+@@ -1695,6 +1701,7 @@ static int drm_dp_payload_send_msg(struct 
drm_dp_mst_topology_mgr *mgr,
+       kfree(txmsg);
+ fail_put:
+       drm_dp_put_mst_branch_device(mstb);
++      drm_dp_put_port(port);
+       return ret;
+ }
+ 
+diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
b/drivers/gpu/drm/i915/intel_uncore.c
+index a18807ec8371..71a0ebae7bfb 100644
+--- a/drivers/gpu/drm/i915/intel_uncore.c
++++ b/drivers/gpu/drm/i915/intel_uncore.c
+@@ -1074,7 +1074,11 @@ static void intel_uncore_fw_domains_init(struct 
drm_device *dev)
+       } else if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
+               dev_priv->uncore.funcs.force_wake_get =
+                       fw_domains_get_with_thread_status;
+-              dev_priv->uncore.funcs.force_wake_put = fw_domains_put;
++              if (IS_HASWELL(dev))
++                      dev_priv->uncore.funcs.force_wake_put =
++                              fw_domains_put_with_fifo;
++              else
++                      dev_priv->uncore.funcs.force_wake_put = fw_domains_put;
+               fw_domain_init(dev_priv, FW_DOMAIN_ID_RENDER,
+                              FORCEWAKE_MT, FORCEWAKE_ACK_HSW);
+       } else if (IS_IVYBRIDGE(dev)) {
+diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c 
b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
+index 1523cf94bcdc..8bc7d0bbd3c8 100644
+--- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
++++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
+@@ -62,10 +62,6 @@ bool radeon_has_atpx(void) {
+       return radeon_atpx_priv.atpx_detected;
+ }
+ 
+-bool radeon_has_atpx_dgpu_power_cntl(void) {
+-      return radeon_atpx_priv.atpx.functions.power_cntl;
+-}
+-
+ /**
+  * radeon_atpx_call - call an ATPX method
+  *
+@@ -145,6 +141,10 @@ static void radeon_atpx_parse_functions(struct 
radeon_atpx_functions *f, u32 mas
+  */
+ static int radeon_atpx_validate(struct radeon_atpx *atpx)
+ {
++      /* make sure required functions are enabled */
++      /* dGPU power control is required */
++      atpx->functions.power_cntl = true;
++
+       if (atpx->functions.px_params) {
+               union acpi_object *info;
+               struct atpx_px_params output;
+diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c 
b/drivers/gpu/drm/radeon/radeon_connectors.c
+index 5a2cafb4f1bc..f5c96fb7e8d0 100644
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -1977,10 +1977,12 @@ radeon_add_atom_connector(struct drm_device *dev,
+                                                  
rdev->mode_info.dither_property,
+                                                  RADEON_FMT_DITHER_DISABLE);
+ 
+-                      if (radeon_audio != 0)
++                      if (radeon_audio != 0) {
+                               
drm_object_attach_property(&radeon_connector->base.base,
+                                                          
rdev->mode_info.audio_property,
+                                                          RADEON_AUDIO_AUTO);
++                              radeon_connector->audio = RADEON_AUDIO_AUTO;
++                      }
+                       if (ASIC_IS_DCE5(rdev))
+                               
drm_object_attach_property(&radeon_connector->base.base,
+                                                          
rdev->mode_info.output_csc_property,
+@@ -2105,6 +2107,7 @@ radeon_add_atom_connector(struct drm_device *dev,
+                               
drm_object_attach_property(&radeon_connector->base.base,
+                                                          
rdev->mode_info.audio_property,
+                                                          RADEON_AUDIO_AUTO);
++                              radeon_connector->audio = RADEON_AUDIO_AUTO;
+                       }
+                       if (connector_type == DRM_MODE_CONNECTOR_DVII) {
+                               radeon_connector->dac_load_detect = true;
+@@ -2160,6 +2163,7 @@ radeon_add_atom_connector(struct drm_device *dev,
+                               
drm_object_attach_property(&radeon_connector->base.base,
+                                                          
rdev->mode_info.audio_property,
+                                                          RADEON_AUDIO_AUTO);
++                              radeon_connector->audio = RADEON_AUDIO_AUTO;
+                       }
+                       if (ASIC_IS_DCE5(rdev))
+                               
drm_object_attach_property(&radeon_connector->base.base,
+@@ -2212,6 +2216,7 @@ radeon_add_atom_connector(struct drm_device *dev,
+                               
drm_object_attach_property(&radeon_connector->base.base,
+                                                          
rdev->mode_info.audio_property,
+                                                          RADEON_AUDIO_AUTO);
++                              radeon_connector->audio = RADEON_AUDIO_AUTO;
+                       }
+                       if (ASIC_IS_DCE5(rdev))
+                               
drm_object_attach_property(&radeon_connector->base.base,
+diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
+index 9cbdd8aac28f..604c44d88e7a 100644
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
+@@ -103,12 +103,6 @@ static const char radeon_family_name[][16] = {
+       "LAST",
+ };
+ 
+-#if defined(CONFIG_VGA_SWITCHEROO)
+-bool radeon_has_atpx_dgpu_power_cntl(void);
+-#else
+-static inline bool radeon_has_atpx_dgpu_power_cntl(void) { return false; }
+-#endif
+-
+ #define RADEON_PX_QUIRK_DISABLE_PX  (1 << 0)
+ #define RADEON_PX_QUIRK_LONG_WAKEUP (1 << 1)
+ 
+@@ -1433,7 +1427,7 @@ int radeon_device_init(struct radeon_device *rdev,
+        * ignore it */
+       vga_client_register(rdev->pdev, rdev, NULL, radeon_vga_set_decode);
+ 
+-      if ((rdev->flags & RADEON_IS_PX) && radeon_has_atpx_dgpu_power_cntl())
++      if (rdev->flags & RADEON_IS_PX)
+               runtime = true;
+       vga_switcheroo_register_client(rdev->pdev, &radeon_switcheroo_ops, 
runtime);
+       if (runtime)
+diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c 
b/drivers/gpu/drm/radeon/radeon_ttm.c
+index f5c0590bbf73..50ce26a3b314 100644
+--- a/drivers/gpu/drm/radeon/radeon_ttm.c
++++ b/drivers/gpu/drm/radeon/radeon_ttm.c
+@@ -235,6 +235,8 @@ static int radeon_verify_access(struct ttm_buffer_object 
*bo, struct file *filp)
+ {
+       struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo);
+ 
++      if (radeon_ttm_tt_has_userptr(bo->ttm))
++              return -EPERM;
+       return drm_vma_node_verify_access(&rbo->gem_base.vma_node, filp);
+ }
+ 
+diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
+index 9dfcedec05a6..c4e0e69b688d 100644
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -2926,6 +2926,10 @@ static struct si_dpm_quirk si_dpm_quirk_list[] = {
+       { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 },
+       { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0xe271, 0, 120000 },
+       { PCI_VENDOR_ID_ATI, 0x6810, 0x174b, 0xe271, 85000, 90000 },
++      { PCI_VENDOR_ID_ATI, 0x6811, 0x1762, 0x2015, 0, 120000 },
++      { PCI_VENDOR_ID_ATI, 0x6811, 0x1043, 0x2015, 0, 120000 },
++      { PCI_VENDOR_ID_ATI, 0x6811, 0x148c, 0x2015, 0, 120000 },
++      { PCI_VENDOR_ID_ATI, 0x6810, 0x1682, 0x9275, 0, 120000 },
+       { 0, 0, 0, 0 },
+ };
+ 
+diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
+index 3a7f3a4a4396..7c18249d6c8e 100644
+--- a/drivers/input/tablet/gtco.c
++++ b/drivers/input/tablet/gtco.c
+@@ -858,6 +858,14 @@ static int gtco_probe(struct usb_interface *usbinterface,
+               goto err_free_buf;
+       }
+ 
++      /* Sanity check that a device has an endpoint */
++      if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
++              dev_err(&usbinterface->dev,
++                      "Invalid number of endpoints\n");
++              error = -EINVAL;
++              goto err_free_urb;
++      }
++
+       /*
+        * The endpoint is always altsetting 0, we know this since we know
+        * this device only has one interrupt endpoint
+@@ -879,7 +887,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
+        * HID report descriptor
+        */
+       if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
+-                                   HID_DEVICE_TYPE, &hid_desc) != 0){
++                                   HID_DEVICE_TYPE, &hid_desc) != 0) {
+               dev_err(&usbinterface->dev,
+                       "Can't retrieve exta USB descriptor to get hid report 
descriptor length\n");
+               error = -EIO;
+diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
+index 883ba74fbc1e..4cf38c39878a 100644
+--- a/drivers/misc/mei/bus.c
++++ b/drivers/misc/mei/bus.c
+@@ -238,11 +238,6 @@ static ssize_t ___mei_cl_send(struct mei_cl *cl, u8 *buf, 
size_t length,
+       dev = cl->dev;
+ 
+       mutex_lock(&dev->device_lock);
+-      if (dev->dev_state != MEI_DEV_ENABLED) {
+-              rets = -ENODEV;
+-              goto out;
+-      }
+-
+       if (!mei_cl_is_connected(cl)) {
+               rets = -ENODEV;
+               goto out;
+@@ -292,10 +287,6 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t 
length)
+       dev = cl->dev;
+ 
+       mutex_lock(&dev->device_lock);
+-      if (dev->dev_state != MEI_DEV_ENABLED) {
+-              rets = -ENODEV;
+-              goto out;
+-      }
+ 
+       cb = mei_cl_read_cb(cl, NULL);
+       if (cb)
+diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c 
b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+index d60a467a983c..80cab4ec0522 100644
+--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
++++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+@@ -731,8 +731,8 @@ static int iwl_pcie_rsa_race_bug_wa(struct iwl_trans 
*trans)
+        */
+       val = iwl_read_prph(trans, PREG_AUX_BUS_WPROT_0);
+       if (val & (BIT(1) | BIT(17))) {
+-              IWL_INFO(trans,
+-                       "can't access the RSA semaphore it is write 
protected\n");
++              IWL_DEBUG_INFO(trans,
++                             "can't access the RSA semaphore it is write 
protected\n");
+               return 0;
+       }
+ 
+diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c 
b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+index 474812e2b0cb..de08175aef0a 100644
+--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
++++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+@@ -852,7 +852,8 @@ static int mtk_gpio_set_debounce(struct gpio_chip *chip, 
unsigned offset,
+       struct mtk_pinctrl *pctl = dev_get_drvdata(chip->dev);
+       int eint_num, virq, eint_offset;
+       unsigned int set_offset, bit, clr_bit, clr_offset, rst, i, unmask, dbnc;
+-      static const unsigned int dbnc_arr[] = {0 , 1, 16, 32, 64, 128, 256};
++      static const unsigned int debounce_time[] = {500, 1000, 16000, 32000, 
64000,
++                                              128000, 256000};
+       const struct mtk_desc_pin *pin;
+       struct irq_data *d;
+ 
+@@ -870,9 +871,9 @@ static int mtk_gpio_set_debounce(struct gpio_chip *chip, 
unsigned offset,
+       if (!mtk_eint_can_en_debounce(pctl, eint_num))
+               return -ENOSYS;
+ 
+-      dbnc = ARRAY_SIZE(dbnc_arr);
+-      for (i = 0; i < ARRAY_SIZE(dbnc_arr); i++) {
+-              if (debounce <= dbnc_arr[i]) {
++      dbnc = ARRAY_SIZE(debounce_time);
++      for (i = 0; i < ARRAY_SIZE(debounce_time); i++) {
++              if (debounce <= debounce_time[i]) {
+                       dbnc = i;
+                       break;
+               }
+diff --git a/drivers/usb/gadget/function/f_fs.c 
b/drivers/usb/gadget/function/f_fs.c
+index 6e7be91e6097..82240dbdf6dd 100644
+--- a/drivers/usb/gadget/function/f_fs.c
++++ b/drivers/usb/gadget/function/f_fs.c
+@@ -646,6 +646,7 @@ static void ffs_user_copy_worker(struct work_struct *work)
+                                                  work);
+       int ret = io_data->req->status ? io_data->req->status :
+                                        io_data->req->actual;
++      bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD;
+ 
+       if (io_data->read && ret > 0) {
+               use_mm(io_data->mm);
+@@ -657,13 +658,11 @@ static void ffs_user_copy_worker(struct work_struct 
*work)
+ 
+       io_data->kiocb->ki_complete(io_data->kiocb, ret, ret);
+ 
+-      if (io_data->ffs->ffs_eventfd &&
+-          !(io_data->kiocb->ki_flags & IOCB_EVENTFD))
++      if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd)
+               eventfd_signal(io_data->ffs->ffs_eventfd, 1);
+ 
+       usb_ep_free_request(io_data->ep, io_data->req);
+ 
+-      io_data->kiocb->private = NULL;
+       if (io_data->read)
+               kfree(io_data->to_free);
+       kfree(io_data->buf);
+diff --git a/include/drm/drm_cache.h b/include/drm/drm_cache.h
+index 461a0558bca4..cebecff536a3 100644
+--- a/include/drm/drm_cache.h
++++ b/include/drm/drm_cache.h
+@@ -39,6 +39,8 @@ static inline bool drm_arch_can_wc_memory(void)
+ {
+ #if defined(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
+       return false;
++#elif defined(CONFIG_MIPS) && defined(CONFIG_CPU_LOONGSON3)
++      return false;
+ #else
+       return true;
+ #endif
+diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
+index 205026175c42..d891f949466a 100644
+--- a/include/linux/hugetlb.h
++++ b/include/linux/hugetlb.h
+@@ -460,15 +460,14 @@ static inline spinlock_t *huge_pte_lockptr(struct hstate 
*h,
+       return &mm->page_table_lock;
+ }
+ 
+-static inline bool hugepages_supported(void)
+-{
+-      /*
+-       * Some platform decide whether they support huge pages at boot
+-       * time. On these, such as powerpc, HPAGE_SHIFT is set to 0 when
+-       * there is no such support
+-       */
+-      return HPAGE_SHIFT != 0;
+-}
++#ifndef hugepages_supported
++/*
++ * Some platform decide whether they support huge pages at boot
++ * time. Some of them, such as powerpc, set HPAGE_SHIFT to 0
++ * when there is no such support
++ */
++#define hugepages_supported() (HPAGE_SHIFT != 0)
++#endif
+ 
+ #else /* CONFIG_HUGETLB_PAGE */
+ struct hstate {};
+diff --git a/kernel/futex.c b/kernel/futex.c
+index b75fbddacf0e..46b168e19c98 100644
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1157,10 +1157,20 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, 
struct futex_q *this)
+        */
+       newval = FUTEX_WAITERS | task_pid_vnr(new_owner);
+ 
+-      if (cmpxchg_futex_value_locked(&curval, uaddr, uval, newval))
++      if (cmpxchg_futex_value_locked(&curval, uaddr, uval, newval)) {
+               ret = -EFAULT;
+-      else if (curval != uval)
+-              ret = -EINVAL;
++      } else if (curval != uval) {
++              /*
++               * If a unconditional UNLOCK_PI operation (user space did not
++               * try the TID->0 transition) raced with a waiter setting the
++               * FUTEX_WAITERS flag between get_user() and locking the hash
++               * bucket lock, retry the operation.
++               */
++              if ((FUTEX_TID_MASK & curval) == uval)
++                      ret = -EAGAIN;
++              else
++                      ret = -EINVAL;
++      }
+       if (ret) {
+               raw_spin_unlock(&pi_state->pi_mutex.wait_lock);
+               return ret;
+@@ -2419,6 +2429,15 @@ retry:
+                */
+               if (ret == -EFAULT)
+                       goto pi_faulted;
++              /*
++               * A unconditional UNLOCK_PI op raced against a waiter
++               * setting the FUTEX_WAITERS bit. Try again.
++               */
++              if (ret == -EAGAIN) {
++                      spin_unlock(&hb->lock);
++                      put_futex_key(&key);
++                      goto retry;
++              }
+               goto out_unlock;
+       }
+ 
+diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
+index 0d6038c87bef..0c29986ecd87 100644
+--- a/net/netlink/af_netlink.c
++++ b/net/netlink/af_netlink.c
+@@ -1290,7 +1290,7 @@ static int netlink_release(struct socket *sock)
+ 
+       skb_queue_purge(&sk->sk_write_queue);
+ 
+-      if (nlk->portid) {
++      if (nlk->portid && nlk->bound) {
+               struct netlink_notify n = {
+                                               .net = sock_net(sk),
+                                               .protocol = sk->sk_protocol,
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index 04b6f3f6ee0b..f24138681b80 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -12777,7 +12777,7 @@ static int nl80211_netlink_notify(struct 
notifier_block * nb,
+       struct wireless_dev *wdev;
+       struct cfg80211_beacon_registration *reg, *tmp;
+ 
+-      if (state != NETLINK_URELEASE)
++      if (state != NETLINK_URELEASE || notify->protocol != NETLINK_GENERIC)
+               return NOTIFY_DONE;
+ 
+       rcu_read_lock();
+diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
+index 69093ce34231..9e113bc3b02d 100644
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -307,6 +307,10 @@ enum {
+       (AZX_DCAPS_INTEL_PCH | AZX_DCAPS_SEPARATE_STREAM_TAG |\
+        AZX_DCAPS_I915_POWERWELL)
+ 
++#define AZX_DCAPS_INTEL_BROXTON \
++      (AZX_DCAPS_INTEL_PCH | AZX_DCAPS_SEPARATE_STREAM_TAG |\
++       AZX_DCAPS_I915_POWERWELL)
++
+ /* quirks for ATI SB / AMD Hudson */
+ #define AZX_DCAPS_PRESET_ATI_SB \
+       (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB |\
+@@ -2039,6 +2043,12 @@ static const struct pci_device_id azx_ids[] = {
+       /* Sunrise Point-LP */
+       { PCI_DEVICE(0x8086, 0x9d70),
+         .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
++      /* Broxton-P(Apollolake) */
++      { PCI_DEVICE(0x8086, 0x5a98),
++        .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
++      /* Broxton-T */
++      { PCI_DEVICE(0x8086, 0x1a98),
++        .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
+       /* Haswell */
+       { PCI_DEVICE(0x8086, 0x0a0c),
+         .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index cc1a7a4a7cbd..86b83f521613 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5318,6 +5318,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+       SND_PCI_QUIRK(0x1028, 0x064a, "Dell", 
ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x064b, "Dell", 
ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x0665, "Dell XPS 13", ALC288_FIXUP_DELL_XPS_13),
++      SND_PCI_QUIRK(0x1028, 0x0669, "Dell Optiplex 9020m", 
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x069a, "Dell Vostro 5480", 
ALC290_FIXUP_SUBWOOFER_HSJACK),
+       SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", 
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", 
ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+diff --git a/sound/pci/pcxhr/pcxhr_core.c b/sound/pci/pcxhr/pcxhr_core.c
+index c5194f5b150a..d7e71f309299 100644
+--- a/sound/pci/pcxhr/pcxhr_core.c
++++ b/sound/pci/pcxhr/pcxhr_core.c
+@@ -1341,5 +1341,6 @@ irqreturn_t pcxhr_threaded_irq(int irq, void *dev_id)
+       }
+ 
+       pcxhr_msg_thread(mgr);
++      mutex_unlock(&mgr->lock);
+       return IRQ_HANDLED;
+ }

Reply via email to