commit:     b441dda5fa50d4b8c51ccf0641501d3574851296
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Jul  1 15:33:29 2015 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Jul  1 15:33:29 2015 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=b441dda5

Add the 4.1.1 patchset. For real this time.

 0000_README            |   4 +
 1000_linux-4.1.1.patch | 388 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 392 insertions(+)

diff --git a/0000_README b/0000_README
index dd82b40..8bf61f5 100644
--- a/0000_README
+++ b/0000_README
@@ -43,6 +43,10 @@ EXPERIMENTAL
 Individual Patch Descriptions:
 --------------------------------------------------------------------------
 
+Patch:  1000_linux-4.1.1.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.1.1
+
 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/1000_linux-4.1.1.patch b/1000_linux-4.1.1.patch
new file mode 100644
index 0000000..658aefa
--- /dev/null
+++ b/1000_linux-4.1.1.patch
@@ -0,0 +1,388 @@
+diff --git a/Makefile b/Makefile
+index f5c8983aeeb7..1caf4ad3eb8a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,8 +1,8 @@
+ VERSION = 4
+ PATCHLEVEL = 1
+-SUBLEVEL = 0
++SUBLEVEL = 1
+ EXTRAVERSION =
+-NAME = Hurr durr I'ma sheep
++NAME = Series 4800
+ 
+ # *DOCUMENTATION*
+ # To see a list of typical targets execute "make help"
+diff --git a/arch/x86/kernel/cpu/perf_event.c 
b/arch/x86/kernel/cpu/perf_event.c
+index 4f7001f28936..aa4e3a74e541 100644
+--- a/arch/x86/kernel/cpu/perf_event.c
++++ b/arch/x86/kernel/cpu/perf_event.c
+@@ -270,11 +270,7 @@ msr_fail:
+ 
+ static void hw_perf_event_destroy(struct perf_event *event)
+ {
+-      if (atomic_dec_and_mutex_lock(&active_events, &pmc_reserve_mutex)) {
+-              release_pmc_hardware();
+-              release_ds_buffers();
+-              mutex_unlock(&pmc_reserve_mutex);
+-      }
++      x86_release_hardware();
+ }
+ 
+ void hw_perf_lbr_event_destroy(struct perf_event *event)
+@@ -324,6 +320,35 @@ set_ext_hw_attr(struct hw_perf_event *hwc, struct 
perf_event *event)
+       return x86_pmu_extra_regs(val, event);
+ }
+ 
++int x86_reserve_hardware(void)
++{
++      int err = 0;
++
++      if (!atomic_inc_not_zero(&active_events)) {
++              mutex_lock(&pmc_reserve_mutex);
++              if (atomic_read(&active_events) == 0) {
++                      if (!reserve_pmc_hardware())
++                              err = -EBUSY;
++                      else
++                              reserve_ds_buffers();
++              }
++              if (!err)
++                      atomic_inc(&active_events);
++              mutex_unlock(&pmc_reserve_mutex);
++      }
++
++      return err;
++}
++
++void x86_release_hardware(void)
++{
++      if (atomic_dec_and_mutex_lock(&active_events, &pmc_reserve_mutex)) {
++              release_pmc_hardware();
++              release_ds_buffers();
++              mutex_unlock(&pmc_reserve_mutex);
++      }
++}
++
+ /*
+  * Check if we can create event of a certain type (that no conflicting events
+  * are present).
+@@ -336,9 +361,10 @@ int x86_add_exclusive(unsigned int what)
+               return 0;
+ 
+       mutex_lock(&pmc_reserve_mutex);
+-      for (i = 0; i < ARRAY_SIZE(x86_pmu.lbr_exclusive); i++)
++      for (i = 0; i < ARRAY_SIZE(x86_pmu.lbr_exclusive); i++) {
+               if (i != what && atomic_read(&x86_pmu.lbr_exclusive[i]))
+                       goto out;
++      }
+ 
+       atomic_inc(&x86_pmu.lbr_exclusive[what]);
+       ret = 0;
+@@ -527,19 +553,7 @@ static int __x86_pmu_event_init(struct perf_event *event)
+       if (!x86_pmu_initialized())
+               return -ENODEV;
+ 
+-      err = 0;
+-      if (!atomic_inc_not_zero(&active_events)) {
+-              mutex_lock(&pmc_reserve_mutex);
+-              if (atomic_read(&active_events) == 0) {
+-                      if (!reserve_pmc_hardware())
+-                              err = -EBUSY;
+-                      else
+-                              reserve_ds_buffers();
+-              }
+-              if (!err)
+-                      atomic_inc(&active_events);
+-              mutex_unlock(&pmc_reserve_mutex);
+-      }
++      err = x86_reserve_hardware();
+       if (err)
+               return err;
+ 
+diff --git a/arch/x86/kernel/cpu/perf_event.h 
b/arch/x86/kernel/cpu/perf_event.h
+index ef78516850fb..f068695eaca0 100644
+--- a/arch/x86/kernel/cpu/perf_event.h
++++ b/arch/x86/kernel/cpu/perf_event.h
+@@ -703,6 +703,10 @@ int x86_add_exclusive(unsigned int what);
+ 
+ void x86_del_exclusive(unsigned int what);
+ 
++int x86_reserve_hardware(void);
++
++void x86_release_hardware(void);
++
+ void hw_perf_lbr_event_destroy(struct perf_event *event);
+ 
+ int x86_setup_perfctr(struct perf_event *event);
+diff --git a/arch/x86/kernel/cpu/perf_event_intel.c 
b/arch/x86/kernel/cpu/perf_event_intel.c
+index a1e35c9f06b9..2813ea0f142e 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel.c
++++ b/arch/x86/kernel/cpu/perf_event_intel.c
+@@ -3253,6 +3253,8 @@ __init int intel_pmu_init(void)
+ 
+       case 61: /* 14nm Broadwell Core-M */
+       case 86: /* 14nm Broadwell Xeon D */
++      case 71: /* 14nm Broadwell + GT3e (Intel Iris Pro graphics) */
++      case 79: /* 14nm Broadwell Server */
+               x86_pmu.late_ack = true;
+               memcpy(hw_cache_event_ids, hsw_hw_cache_event_ids, 
sizeof(hw_cache_event_ids));
+               memcpy(hw_cache_extra_regs, hsw_hw_cache_extra_regs, 
sizeof(hw_cache_extra_regs));
+@@ -3322,13 +3324,13 @@ __init int intel_pmu_init(void)
+                * counter, so do not extend mask to generic counters
+                */
+               for_each_event_constraint(c, x86_pmu.event_constraints) {
+-                      if (c->cmask != FIXED_EVENT_FLAGS
+-                          || c->idxmsk64 == INTEL_PMC_MSK_FIXED_REF_CYCLES) {
+-                              continue;
++                      if (c->cmask == FIXED_EVENT_FLAGS
++                          && c->idxmsk64 != INTEL_PMC_MSK_FIXED_REF_CYCLES) {
++                              c->idxmsk64 |= (1ULL << x86_pmu.num_counters) - 
1;
+                       }
+-
+-                      c->idxmsk64 |= (1ULL << x86_pmu.num_counters) - 1;
+-                      c->weight += x86_pmu.num_counters;
++                      c->idxmsk64 &=
++                              ~(~0UL << (INTEL_PMC_IDX_FIXED + 
x86_pmu.num_counters_fixed));
++                      c->weight = hweight64(c->idxmsk64);
+               }
+       }
+ 
+diff --git a/arch/x86/kernel/cpu/perf_event_intel_bts.c 
b/arch/x86/kernel/cpu/perf_event_intel_bts.c
+index ac1f0c55f379..7795f3f8b1d5 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel_bts.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_bts.c
+@@ -483,17 +483,26 @@ static int bts_event_add(struct perf_event *event, int 
mode)
+ 
+ static void bts_event_destroy(struct perf_event *event)
+ {
++      x86_release_hardware();
+       x86_del_exclusive(x86_lbr_exclusive_bts);
+ }
+ 
+ static int bts_event_init(struct perf_event *event)
+ {
++      int ret;
++
+       if (event->attr.type != bts_pmu.type)
+               return -ENOENT;
+ 
+       if (x86_add_exclusive(x86_lbr_exclusive_bts))
+               return -EBUSY;
+ 
++      ret = x86_reserve_hardware();
++      if (ret) {
++              x86_del_exclusive(x86_lbr_exclusive_bts);
++              return ret;
++      }
++
+       event->destroy = bts_event_destroy;
+ 
+       return 0;
+diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
+index 53eeb226657c..7e429c99c728 100644
+--- a/arch/x86/kernel/head_32.S
++++ b/arch/x86/kernel/head_32.S
+@@ -62,9 +62,16 @@
+ #define PAGE_TABLE_SIZE(pages) ((pages) / PTRS_PER_PGD)
+ #endif
+ 
+-/* Number of possible pages in the lowmem region */
+-LOWMEM_PAGES = (((1<<32) - __PAGE_OFFSET) >> PAGE_SHIFT)
+-      
++/*
++ * Number of possible pages in the lowmem region.
++ *
++ * We shift 2 by 31 instead of 1 by 32 to the left in order to avoid a
++ * gas warning about overflowing shift count when gas has been compiled
++ * with only a host target support using a 32-bit type for internal
++ * representation.
++ */
++LOWMEM_PAGES = (((2<<31) - __PAGE_OFFSET) >> PAGE_SHIFT)
++
+ /* Enough space to fit pagetables for the low memory linear map */
+ MAPPING_BEYOND_END = PAGE_TABLE_SIZE(LOWMEM_PAGES) << PAGE_SHIFT
+ 
+diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
+index 8c81af6dbe06..e527a3e13939 100644
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -80,6 +80,7 @@ static const struct usb_device_id ath3k_table[] = {
+       { USB_DEVICE(0x0489, 0xe057) },
+       { USB_DEVICE(0x0489, 0xe056) },
+       { USB_DEVICE(0x0489, 0xe05f) },
++      { USB_DEVICE(0x0489, 0xe076) },
+       { USB_DEVICE(0x0489, 0xe078) },
+       { USB_DEVICE(0x04c5, 0x1330) },
+       { USB_DEVICE(0x04CA, 0x3004) },
+@@ -88,6 +89,7 @@ static const struct usb_device_id ath3k_table[] = {
+       { USB_DEVICE(0x04CA, 0x3007) },
+       { USB_DEVICE(0x04CA, 0x3008) },
+       { USB_DEVICE(0x04CA, 0x300b) },
++      { USB_DEVICE(0x04CA, 0x300d) },
+       { USB_DEVICE(0x04CA, 0x300f) },
+       { USB_DEVICE(0x04CA, 0x3010) },
+       { USB_DEVICE(0x0930, 0x0219) },
+@@ -113,6 +115,7 @@ static const struct usb_device_id ath3k_table[] = {
+       { USB_DEVICE(0x13d3, 0x3408) },
+       { USB_DEVICE(0x13d3, 0x3423) },
+       { USB_DEVICE(0x13d3, 0x3432) },
++      { USB_DEVICE(0x13d3, 0x3474) },
+ 
+       /* Atheros AR5BBU12 with sflash firmware */
+       { USB_DEVICE(0x0489, 0xE02C) },
+@@ -137,6 +140,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
+       { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
+@@ -145,6 +149,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
+       { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
+@@ -170,6 +175,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
+       { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
+ 
+       /* Atheros AR5BBU22 with sflash firmware */
+       { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 },
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 3c10d4dfe9a7..420cc9f3eb76 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -178,6 +178,7 @@ static const struct usb_device_id blacklist_table[] = {
+       { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
+@@ -186,6 +187,7 @@ static const struct usb_device_id blacklist_table[] = {
+       { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
+@@ -211,6 +213,7 @@ static const struct usb_device_id blacklist_table[] = {
+       { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
+ 
+       /* Atheros AR5BBU12 with sflash firmware */
+       { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
+diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
+index b2f9521fe551..4cdac7801c8b 100644
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -5365,6 +5365,10 @@ static void b43_supported_bands(struct b43_wldev *dev, 
bool *have_2ghz_phy,
+               *have_5ghz_phy = true;
+               return;
+       case 0x4321: /* BCM4306 */
++              /* There are 14e4:4321 PCI devs with 2.4 GHz BCM4321 (N-PHY) */
++              if (dev->phy.type != B43_PHYTYPE_G)
++                      break;
++              /* fall through */
+       case 0x4313: /* BCM4311 */
+       case 0x431a: /* BCM4318 */
+       case 0x432a: /* BCM4321 */
+diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
+index 5c8f58114677..a086e1d69bc7 100644
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -1477,6 +1477,11 @@ skip_countries:
+               goto alloc_fail8;
+       }
+ 
++      if (quirks & CLEAR_HALT_CONDITIONS) {
++              usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, 
epread->bEndpointAddress));
++              usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, 
epwrite->bEndpointAddress));
++      }
++
+       return 0;
+ alloc_fail8:
+       if (acm->country_codes) {
+@@ -1756,6 +1761,10 @@ static const struct usb_device_id acm_ids[] = {
+       .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
+       },
+ 
++      { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
++      .driver_info = CLEAR_HALT_CONDITIONS,
++      },
++
+       /* Nokia S60 phones expose two ACM channels. The first is
+        * a modem and is picked up by the standard AT-command
+        * information below. The second is 'vendor-specific' but
+diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
+index ffeb3c83941f..b3b6c9db6fe5 100644
+--- a/drivers/usb/class/cdc-acm.h
++++ b/drivers/usb/class/cdc-acm.h
+@@ -133,3 +133,4 @@ struct acm {
+ #define NO_DATA_INTERFACE             BIT(4)
+ #define IGNORE_DEVICE                 BIT(5)
+ #define QUIRK_CONTROL_LINE_STATE      BIT(6)
++#define CLEAR_HALT_CONDITIONS         BIT(7)
+diff --git a/kernel/events/core.c b/kernel/events/core.c
+index eddf1ed4155e..0ceb386777ae 100644
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -4331,20 +4331,20 @@ static void ring_buffer_attach(struct perf_event 
*event,
+               WARN_ON_ONCE(event->rcu_pending);
+ 
+               old_rb = event->rb;
+-              event->rcu_batches = get_state_synchronize_rcu();
+-              event->rcu_pending = 1;
+-
+               spin_lock_irqsave(&old_rb->event_lock, flags);
+               list_del_rcu(&event->rb_entry);
+               spin_unlock_irqrestore(&old_rb->event_lock, flags);
+-      }
+ 
+-      if (event->rcu_pending && rb) {
+-              cond_synchronize_rcu(event->rcu_batches);
+-              event->rcu_pending = 0;
++              event->rcu_batches = get_state_synchronize_rcu();
++              event->rcu_pending = 1;
+       }
+ 
+       if (rb) {
++              if (event->rcu_pending) {
++                      cond_synchronize_rcu(event->rcu_batches);
++                      event->rcu_pending = 0;
++              }
++
+               spin_lock_irqsave(&rb->event_lock, flags);
+               list_add_rcu(&event->rb_entry, &rb->event_list);
+               spin_unlock_irqrestore(&rb->event_lock, flags);
+diff --git a/tools/build/Makefile.build b/tools/build/Makefile.build
+index 10df57237a66..98cfc388ea33 100644
+--- a/tools/build/Makefile.build
++++ b/tools/build/Makefile.build
+@@ -94,12 +94,12 @@ obj-y        := $(patsubst %/, %/$(obj)-in.o, $(obj-y))
+ subdir-obj-y := $(filter %/$(obj)-in.o, $(obj-y))
+ 
+ # '$(OUTPUT)/dir' prefix to all objects
+-prefix       := $(subst ./,,$(OUTPUT)$(dir)/)
+-obj-y        := $(addprefix $(prefix),$(obj-y))
+-subdir-obj-y := $(addprefix $(prefix),$(subdir-obj-y))
++objprefix    := $(subst ./,,$(OUTPUT)$(dir)/)
++obj-y        := $(addprefix $(objprefix),$(obj-y))
++subdir-obj-y := $(addprefix $(objprefix),$(subdir-obj-y))
+ 
+ # Final '$(obj)-in.o' object
+-in-target := $(prefix)$(obj)-in.o
++in-target := $(objprefix)$(obj)-in.o
+ 
+ PHONY += $(subdir-y)
+ 

Reply via email to