summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2012-08-02 07:40:28 -0400
committerAnthony G. Basile <blueness@gentoo.org>2012-08-02 07:40:28 -0400
commit5c6012a4fec4d07de27741ea0a49592a673720c7 (patch)
tree62bc83a5f6fd1e1f1b3cdc00fa2b0e6ca276ef2f
parentGrsec/PaX: 2.9.1-{2.6.32.59,3.2.24,3.4.6}-201208011848 (diff)
downloadhardened-patchset-5c6012a4fec4d07de27741ea0a49592a673720c7.tar.gz
hardened-patchset-5c6012a4fec4d07de27741ea0a49592a673720c7.tar.bz2
hardened-patchset-5c6012a4fec4d07de27741ea0a49592a673720c7.zip
Grsec/PaX: 2.9.1-3.4.7-201208011848 - fixed20120801
-rw-r--r--3.4.6/1005_linux-3.4.6.patch1459
-rw-r--r--3.4.7/0000_README (renamed from 3.4.6/0000_README)4
-rw-r--r--3.4.7/4420_grsecurity-2.9.1-3.4.7-201208011850.patch (renamed from 3.4.6/4420_grsecurity-2.9.1-3.4.7-201208011850.patch)0
-rw-r--r--3.4.7/4430_grsec-remove-localversion-grsec.patch (renamed from 3.4.6/4430_grsec-remove-localversion-grsec.patch)0
-rw-r--r--3.4.7/4435_grsec-mute-warnings.patch (renamed from 3.4.6/4435_grsec-mute-warnings.patch)0
-rw-r--r--3.4.7/4440_grsec-remove-protected-paths.patch (renamed from 3.4.6/4440_grsec-remove-protected-paths.patch)0
-rw-r--r--3.4.7/4450_grsec-kconfig-default-gids.patch (renamed from 3.4.6/4450_grsec-kconfig-default-gids.patch)0
-rw-r--r--3.4.7/4465_selinux-avc_audit-log-curr_ip.patch (renamed from 3.4.6/4465_selinux-avc_audit-log-curr_ip.patch)0
-rw-r--r--3.4.7/4470_disable-compat_vdso.patch (renamed from 3.4.6/4470_disable-compat_vdso.patch)0
-rw-r--r--3.4.7/4480_fix-scsi-lpfc-Werror.patch (renamed from 3.4.6/4480_fix-scsi-lpfc-Werror.patch)0
10 files changed, 0 insertions, 1463 deletions
diff --git a/3.4.6/1005_linux-3.4.6.patch b/3.4.6/1005_linux-3.4.6.patch
deleted file mode 100644
index e5c2aa1..0000000
--- a/3.4.6/1005_linux-3.4.6.patch
+++ /dev/null
@@ -1,1459 +0,0 @@
-diff --git a/Makefile b/Makefile
-index a2e69a0..5d0edcb 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
- VERSION = 3
- PATCHLEVEL = 4
--SUBLEVEL = 5
-+SUBLEVEL = 6
- EXTRAVERSION =
- NAME = Saber-toothed Squirrel
-
-diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c
-index 33ecd0c..b1e05cc 100644
---- a/arch/arm/plat-samsung/adc.c
-+++ b/arch/arm/plat-samsung/adc.c
-@@ -157,11 +157,13 @@ int s3c_adc_start(struct s3c_adc_client *client,
- return -EINVAL;
- }
-
-- if (client->is_ts && adc->ts_pend)
-- return -EAGAIN;
--
- spin_lock_irqsave(&adc->lock, flags);
-
-+ if (client->is_ts && adc->ts_pend) {
-+ spin_unlock_irqrestore(&adc->lock, flags);
-+ return -EAGAIN;
-+ }
-+
- client->channel = channel;
- client->nr_samples = nr_samples;
-
-diff --git a/drivers/acpi/acpica/nspredef.c b/drivers/acpi/acpica/nspredef.c
-index 23ce096..fe66260 100644
---- a/drivers/acpi/acpica/nspredef.c
-+++ b/drivers/acpi/acpica/nspredef.c
-@@ -638,7 +638,7 @@ acpi_ns_check_package(struct acpi_predefined_data *data,
- /* Create the new outer package and populate it */
-
- status =
-- acpi_ns_wrap_with_package(data, *elements,
-+ acpi_ns_wrap_with_package(data, return_object,
- return_object_ptr);
- if (ACPI_FAILURE(status)) {
- return (status);
-diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
-index c850de4..eff7222 100644
---- a/drivers/acpi/processor_core.c
-+++ b/drivers/acpi/processor_core.c
-@@ -189,10 +189,12 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)
- * Processor (CPU3, 0x03, 0x00000410, 0x06) {}
- * }
- *
-- * Ignores apic_id and always return 0 for CPU0's handle.
-+ * Ignores apic_id and always returns 0 for the processor
-+ * handle with acpi id 0 if nr_cpu_ids is 1.
-+ * This should be the case if SMP tables are not found.
- * Return -1 for other CPU's handle.
- */
-- if (acpi_id == 0)
-+ if (nr_cpu_ids <= 1 && acpi_id == 0)
- return acpi_id;
- else
- return apic_id;
-diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
-index 2da025e..7f1ea56 100644
---- a/drivers/clk/clk.c
-+++ b/drivers/clk/clk.c
-@@ -834,18 +834,21 @@ static void clk_change_rate(struct clk *clk)
- {
- struct clk *child;
- unsigned long old_rate;
-+ unsigned long best_parent_rate = 0;
- struct hlist_node *tmp;
-
- old_rate = clk->rate;
-
-+ if (clk->parent)
-+ best_parent_rate = clk->parent->rate;
-+
- if (clk->ops->set_rate)
- clk->ops->set_rate(clk->hw, clk->new_rate);
-
- if (clk->ops->recalc_rate)
-- clk->rate = clk->ops->recalc_rate(clk->hw,
-- clk->parent->rate);
-+ clk->rate = clk->ops->recalc_rate(clk->hw, best_parent_rate);
- else
-- clk->rate = clk->parent->rate;
-+ clk->rate = best_parent_rate;
-
- if (clk->notifier_count && old_rate != clk->rate)
- __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);
-diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
-index 299d238..899c712 100644
---- a/drivers/hid/hid-apple.c
-+++ b/drivers/hid/hid-apple.c
-@@ -514,6 +514,12 @@ static const struct hid_device_id apple_devices[] = {
- .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS),
- .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
-+ .driver_data = APPLE_HAS_FN },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
-+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
-+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
- .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 4da66b4..054677b 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -1379,6 +1379,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
-@@ -1914,6 +1917,7 @@ static const struct hid_device_id hid_ignore_list[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) },
- { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
- { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
-@@ -2008,6 +2012,9 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
- { }
-diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index e39aecb..dfd4098 100644
---- a/drivers/hid/hid-ids.h
-+++ b/drivers/hid/hid-ids.h
-@@ -125,6 +125,9 @@
- #define USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI 0x024c
- #define USB_DEVICE_ID_APPLE_WELLSPRING6_ISO 0x024d
- #define USB_DEVICE_ID_APPLE_WELLSPRING6_JIS 0x024e
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
-@@ -509,6 +512,9 @@
- #define USB_DEVICE_ID_CRYSTALTOUCH 0x0006
- #define USB_DEVICE_ID_CRYSTALTOUCH_DUAL 0x0007
-
-+#define USB_VENDOR_ID_MADCATZ 0x0738
-+#define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540
-+
- #define USB_VENDOR_ID_MCC 0x09db
- #define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
- #define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
-diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
-index 0b204e4..f524882 100644
---- a/drivers/hwmon/it87.c
-+++ b/drivers/hwmon/it87.c
-@@ -2157,7 +2157,7 @@ static void __devinit it87_init_device(struct platform_device *pdev)
-
- /* Start monitoring */
- it87_write_value(data, IT87_REG_CONFIG,
-- (it87_read_value(data, IT87_REG_CONFIG) & 0x36)
-+ (it87_read_value(data, IT87_REG_CONFIG) & 0x3e)
- | (update_vbat ? 0x41 : 0x01));
- }
-
-diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
-index fd7a0d5..42f7b25 100644
---- a/drivers/input/joystick/xpad.c
-+++ b/drivers/input/joystick/xpad.c
-@@ -142,6 +142,7 @@ static const struct xpad_device {
- { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX },
- { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
- { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX },
-+ { 0x0d2f, 0x0002, "Andamiro Pump It Up pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
- { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX },
- { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX },
- { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX },
-@@ -164,6 +165,7 @@ static const struct xpad_device {
- { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
- { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
- { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
-+ { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
- { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
- { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
- };
-@@ -238,12 +240,14 @@ static struct usb_device_id xpad_table [] = {
- XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */
- XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */
- XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */
-+ { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */
- XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */
- XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */
- XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */
- XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */
- XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */
-- XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
-+ XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
-+ XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */
- { }
- };
-
-diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
-index f9e2758..e410b98 100644
---- a/drivers/input/mouse/bcm5974.c
-+++ b/drivers/input/mouse/bcm5974.c
-@@ -79,6 +79,10 @@
- #define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252
- #define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253
- #define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254
-+/* MacbookPro10,1 (unibody, June 2012) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
-+#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
-
- #define BCM5974_DEVICE(prod) { \
- .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
-@@ -128,6 +132,10 @@ static const struct usb_device_id bcm5974_table[] = {
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS),
-+ /* MacbookPro10,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
- /* Terminating entry */
- {}
- };
-@@ -354,6 +362,18 @@ static const struct bcm5974_config bcm5974_config_table[] = {
- { DIM_X, DIM_X / SN_COORD, -4620, 5140 },
- { DIM_Y, DIM_Y / SN_COORD, -150, 6600 }
- },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI,
-+ USB_DEVICE_ID_APPLE_WELLSPRING7_ISO,
-+ USB_DEVICE_ID_APPLE_WELLSPRING7_JIS,
-+ HAS_INTEGRATED_BUTTON,
-+ 0x84, sizeof(struct bt_data),
-+ 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
-+ { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
-+ { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
-+ { DIM_X, DIM_X / SN_COORD, -4750, 5280 },
-+ { DIM_Y, DIM_Y / SN_COORD, -150, 6730 }
-+ },
- {}
- };
-
-diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index d7e9577..d1f74ab 100644
---- a/drivers/md/raid1.c
-+++ b/drivers/md/raid1.c
-@@ -2486,9 +2486,10 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
- */
- if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
- atomic_set(&r1_bio->remaining, read_targets);
-- for (i = 0; i < conf->raid_disks * 2; i++) {
-+ for (i = 0; i < conf->raid_disks * 2 && read_targets; i++) {
- bio = r1_bio->bios[i];
- if (bio->bi_end_io == end_sync_read) {
-+ read_targets--;
- md_sync_acct(bio->bi_bdev, nr_sectors);
- generic_make_request(bio);
- }
-diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c
-index 00a6732..39eab73 100644
---- a/drivers/media/dvb/dvb-core/dvbdev.c
-+++ b/drivers/media/dvb/dvb-core/dvbdev.c
-@@ -243,6 +243,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
- if (minor == MAX_DVB_MINORS) {
- kfree(dvbdevfops);
- kfree(dvbdev);
-+ up_write(&minor_rwsem);
- mutex_unlock(&dvbdev_register_lock);
- return -EINVAL;
- }
-diff --git a/drivers/media/video/cx231xx/cx231xx-audio.c b/drivers/media/video/cx231xx/cx231xx-audio.c
-index a2c2b7d..e5742a0 100644
---- a/drivers/media/video/cx231xx/cx231xx-audio.c
-+++ b/drivers/media/video/cx231xx/cx231xx-audio.c
-@@ -307,7 +307,7 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
- urb->context = dev;
- urb->pipe = usb_rcvisocpipe(dev->udev,
- dev->adev.end_point_addr);
-- urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
-+ urb->transfer_flags = URB_ISO_ASAP;
- urb->transfer_buffer = dev->adev.transfer_buffer[i];
- urb->interval = 1;
- urb->complete = cx231xx_audio_isocirq;
-@@ -368,7 +368,7 @@ static int cx231xx_init_audio_bulk(struct cx231xx *dev)
- urb->context = dev;
- urb->pipe = usb_rcvbulkpipe(dev->udev,
- dev->adev.end_point_addr);
-- urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
-+ urb->transfer_flags = 0;
- urb->transfer_buffer = dev->adev.transfer_buffer[i];
- urb->complete = cx231xx_audio_bulkirq;
- urb->transfer_buffer_length = sb_size;
-diff --git a/drivers/media/video/cx231xx/cx231xx-vbi.c b/drivers/media/video/cx231xx/cx231xx-vbi.c
-index 8cdee5f..9c5967e 100644
---- a/drivers/media/video/cx231xx/cx231xx-vbi.c
-+++ b/drivers/media/video/cx231xx/cx231xx-vbi.c
-@@ -452,7 +452,7 @@ int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,
- return -ENOMEM;
- }
- dev->vbi_mode.bulk_ctl.urb[i] = urb;
-- urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
-+ urb->transfer_flags = 0;
-
- dev->vbi_mode.bulk_ctl.transfer_buffer[i] =
- kzalloc(sb_size, GFP_KERNEL);
-diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
-index 261f478..c606b6a 100644
---- a/drivers/mtd/nand/nandsim.c
-+++ b/drivers/mtd/nand/nandsim.c
-@@ -28,7 +28,7 @@
- #include <linux/module.h>
- #include <linux/moduleparam.h>
- #include <linux/vmalloc.h>
--#include <asm/div64.h>
-+#include <linux/math64.h>
- #include <linux/slab.h>
- #include <linux/errno.h>
- #include <linux/string.h>
-@@ -547,12 +547,6 @@ static char *get_partition_name(int i)
- return kstrdup(buf, GFP_KERNEL);
- }
-
--static uint64_t divide(uint64_t n, uint32_t d)
--{
-- do_div(n, d);
-- return n;
--}
--
- /*
- * Initialize the nandsim structure.
- *
-@@ -581,7 +575,7 @@ static int init_nandsim(struct mtd_info *mtd)
- ns->geom.oobsz = mtd->oobsize;
- ns->geom.secsz = mtd->erasesize;
- ns->geom.pgszoob = ns->geom.pgsz + ns->geom.oobsz;
-- ns->geom.pgnum = divide(ns->geom.totsz, ns->geom.pgsz);
-+ ns->geom.pgnum = div_u64(ns->geom.totsz, ns->geom.pgsz);
- ns->geom.totszoob = ns->geom.totsz + (uint64_t)ns->geom.pgnum * ns->geom.oobsz;
- ns->geom.secshift = ffs(ns->geom.secsz) - 1;
- ns->geom.pgshift = chip->page_shift;
-@@ -924,7 +918,7 @@ static int setup_wear_reporting(struct mtd_info *mtd)
-
- if (!rptwear)
- return 0;
-- wear_eb_count = divide(mtd->size, mtd->erasesize);
-+ wear_eb_count = div_u64(mtd->size, mtd->erasesize);
- mem = wear_eb_count * sizeof(unsigned long);
- if (mem / sizeof(unsigned long) != wear_eb_count) {
- NS_ERR("Too many erase blocks for wear reporting\n");
-diff --git a/drivers/net/bonding/bond_debugfs.c b/drivers/net/bonding/bond_debugfs.c
-index 3680aa2..2cf084e 100644
---- a/drivers/net/bonding/bond_debugfs.c
-+++ b/drivers/net/bonding/bond_debugfs.c
-@@ -6,7 +6,7 @@
- #include "bonding.h"
- #include "bond_alb.h"
-
--#ifdef CONFIG_DEBUG_FS
-+#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_NET_NS)
-
- #include <linux/debugfs.h>
- #include <linux/seq_file.h>
-diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
-index a579a2f..318a62a 100644
---- a/drivers/net/bonding/bond_main.c
-+++ b/drivers/net/bonding/bond_main.c
-@@ -3218,6 +3218,12 @@ static int bond_master_netdev_event(unsigned long event,
- switch (event) {
- case NETDEV_CHANGENAME:
- return bond_event_changename(event_bond);
-+ case NETDEV_UNREGISTER:
-+ bond_remove_proc_entry(event_bond);
-+ break;
-+ case NETDEV_REGISTER:
-+ bond_create_proc_entry(event_bond);
-+ break;
- default:
- break;
- }
-@@ -4402,8 +4408,6 @@ static void bond_uninit(struct net_device *bond_dev)
-
- bond_work_cancel_all(bond);
-
-- bond_remove_proc_entry(bond);
--
- bond_debug_unregister(bond);
-
- __hw_addr_flush(&bond->mc_list);
-@@ -4805,7 +4809,6 @@ static int bond_init(struct net_device *bond_dev)
-
- bond_set_lockdep_class(bond_dev);
-
-- bond_create_proc_entry(bond);
- list_add_tail(&bond->bond_list, &bn->dev_list);
-
- bond_prepare_sysfs_group(bond);
-diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
-index c6d95f2..a9dd6a9 100644
---- a/drivers/net/ethernet/intel/e1000e/82571.c
-+++ b/drivers/net/ethernet/intel/e1000e/82571.c
-@@ -1553,6 +1553,9 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
- ctrl = er32(CTRL);
- status = er32(STATUS);
- rxcw = er32(RXCW);
-+ /* SYNCH bit and IV bit are sticky */
-+ udelay(10);
-+ rxcw = er32(RXCW);
-
- if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-index 48d56da..9bdfaba 100644
---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -1158,6 +1158,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
- priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion);
- wmb();
- priv->hw->desc->set_tx_owner(desc);
-+ wmb();
- }
-
- /* Interrupt on completition only for the latest segment */
-@@ -1173,6 +1174,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
-
- /* To avoid raise condition */
- priv->hw->desc->set_tx_owner(first);
-+ wmb();
-
- priv->cur_tx++;
-
-@@ -1236,6 +1238,7 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
- }
- wmb();
- priv->hw->desc->set_rx_owner(p + entry);
-+ wmb();
- }
- }
-
-diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
-index c46275a..9aa4807 100644
---- a/drivers/net/wireless/iwlegacy/4965-mac.c
-+++ b/drivers/net/wireless/iwlegacy/4965-mac.c
-@@ -3405,7 +3405,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
- return 0;
- }
-
-- if (il->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET) {
-+ if (il->stations[sta_id].sta.key.key_flags & STA_KEY_FLG_INVALID) {
- IL_WARN("Removing wrong key %d 0x%x\n", keyconf->keyidx,
- key_flags);
- spin_unlock_irqrestore(&il->sta_lock, flags);
-@@ -3420,7 +3420,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
- memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo));
- il->stations[sta_id].sta.key.key_flags =
- STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID;
-- il->stations[sta_id].sta.key.key_offset = WEP_INVALID_OFFSET;
-+ il->stations[sta_id].sta.key.key_offset = keyconf->hw_key_idx;
- il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
- il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
-
-diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
-index eaf24945..4bc2711 100644
---- a/drivers/net/wireless/iwlegacy/common.c
-+++ b/drivers/net/wireless/iwlegacy/common.c
-@@ -4767,14 +4767,12 @@ il_bg_watchdog(unsigned long data)
- return;
-
- /* monitor and check for other stuck queues */
-- if (il_is_any_associated(il)) {
-- for (cnt = 0; cnt < il->hw_params.max_txq_num; cnt++) {
-- /* skip as we already checked the command queue */
-- if (cnt == il->cmd_queue)
-- continue;
-- if (il_check_stuck_queue(il, cnt))
-- return;
-- }
-+ for (cnt = 0; cnt < il->hw_params.max_txq_num; cnt++) {
-+ /* skip as we already checked the command queue */
-+ if (cnt == il->cmd_queue)
-+ continue;
-+ if (il_check_stuck_queue(il, cnt))
-+ return;
- }
-
- mod_timer(&il->watchdog,
-diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
-index 66094eb..507085f 100644
---- a/drivers/net/wireless/rt2x00/rt2x00usb.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
-@@ -436,8 +436,8 @@ void rt2x00usb_kick_queue(struct data_queue *queue)
- case QID_RX:
- if (!rt2x00queue_full(queue))
- rt2x00queue_for_each_entry(queue,
-- Q_INDEX_DONE,
- Q_INDEX,
-+ Q_INDEX_DONE,
- NULL,
- rt2x00usb_kick_rx_entry);
- break;
-diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
-index 0ffdb3c..9af4257 100644
---- a/drivers/platform/x86/intel_ips.c
-+++ b/drivers/platform/x86/intel_ips.c
-@@ -72,6 +72,7 @@
- #include <linux/string.h>
- #include <linux/tick.h>
- #include <linux/timer.h>
-+#include <linux/dmi.h>
- #include <drm/i915_drm.h>
- #include <asm/msr.h>
- #include <asm/processor.h>
-@@ -1485,6 +1486,24 @@ static DEFINE_PCI_DEVICE_TABLE(ips_id_table) = {
-
- MODULE_DEVICE_TABLE(pci, ips_id_table);
-
-+static int ips_blacklist_callback(const struct dmi_system_id *id)
-+{
-+ pr_info("Blacklisted intel_ips for %s\n", id->ident);
-+ return 1;
-+}
-+
-+static const struct dmi_system_id ips_blacklist[] = {
-+ {
-+ .callback = ips_blacklist_callback,
-+ .ident = "HP ProBook",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "HP ProBook"),
-+ },
-+ },
-+ { } /* terminating entry */
-+};
-+
- static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
- {
- u64 platform_info;
-@@ -1494,6 +1513,9 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
- u16 htshi, trc, trc_required_mask;
- u8 tse;
-
-+ if (dmi_check_system(ips_blacklist))
-+ return -ENODEV;
-+
- ips = kzalloc(sizeof(struct ips_driver), GFP_KERNEL);
- if (!ips)
- return -ENOMEM;
-diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
-index 39d3aa4..f56c8ba 100644
---- a/drivers/rpmsg/virtio_rpmsg_bus.c
-+++ b/drivers/rpmsg/virtio_rpmsg_bus.c
-@@ -1085,7 +1085,7 @@ static int __init rpmsg_init(void)
-
- return ret;
- }
--module_init(rpmsg_init);
-+subsys_initcall(rpmsg_init);
-
- static void __exit rpmsg_fini(void)
- {
-diff --git a/fs/buffer.c b/fs/buffer.c
-index ad5938c..0bc1bed 100644
---- a/fs/buffer.c
-+++ b/fs/buffer.c
-@@ -1036,6 +1036,9 @@ grow_buffers(struct block_device *bdev, sector_t block, int size)
- static struct buffer_head *
- __getblk_slow(struct block_device *bdev, sector_t block, int size)
- {
-+ int ret;
-+ struct buffer_head *bh;
-+
- /* Size must be multiple of hard sectorsize */
- if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||
- (size < 512 || size > PAGE_SIZE))) {
-@@ -1048,20 +1051,21 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size)
- return NULL;
- }
-
-- for (;;) {
-- struct buffer_head * bh;
-- int ret;
-+retry:
-+ bh = __find_get_block(bdev, block, size);
-+ if (bh)
-+ return bh;
-
-+ ret = grow_buffers(bdev, block, size);
-+ if (ret == 0) {
-+ free_more_memory();
-+ goto retry;
-+ } else if (ret > 0) {
- bh = __find_get_block(bdev, block, size);
- if (bh)
- return bh;
--
-- ret = grow_buffers(bdev, block, size);
-- if (ret < 0)
-- return NULL;
-- if (ret == 0)
-- free_more_memory();
- }
-+ return NULL;
- }
-
- /*
-diff --git a/fs/fifo.c b/fs/fifo.c
-index b1a524d..cf6f434 100644
---- a/fs/fifo.c
-+++ b/fs/fifo.c
-@@ -14,7 +14,7 @@
- #include <linux/sched.h>
- #include <linux/pipe_fs_i.h>
-
--static void wait_for_partner(struct inode* inode, unsigned int *cnt)
-+static int wait_for_partner(struct inode* inode, unsigned int *cnt)
- {
- int cur = *cnt;
-
-@@ -23,6 +23,7 @@ static void wait_for_partner(struct inode* inode, unsigned int *cnt)
- if (signal_pending(current))
- break;
- }
-+ return cur == *cnt ? -ERESTARTSYS : 0;
- }
-
- static void wake_up_partner(struct inode* inode)
-@@ -67,8 +68,7 @@ static int fifo_open(struct inode *inode, struct file *filp)
- * seen a writer */
- filp->f_version = pipe->w_counter;
- } else {
-- wait_for_partner(inode, &pipe->w_counter);
-- if(signal_pending(current))
-+ if (wait_for_partner(inode, &pipe->w_counter))
- goto err_rd;
- }
- }
-@@ -90,8 +90,7 @@ static int fifo_open(struct inode *inode, struct file *filp)
- wake_up_partner(inode);
-
- if (!pipe->readers) {
-- wait_for_partner(inode, &pipe->r_counter);
-- if (signal_pending(current))
-+ if (wait_for_partner(inode, &pipe->r_counter))
- goto err_wr;
- }
- break;
-diff --git a/fs/locks.c b/fs/locks.c
-index 0d68f1f..6a64f15 100644
---- a/fs/locks.c
-+++ b/fs/locks.c
-@@ -1465,7 +1465,7 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp)
- case F_WRLCK:
- return generic_add_lease(filp, arg, flp);
- default:
-- BUG();
-+ return -EINVAL;
- }
- }
- EXPORT_SYMBOL(generic_setlease);
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 50f55c7..f2f73f9 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -272,6 +272,7 @@ header-y += netfilter_ipv4.h
- header-y += netfilter_ipv6.h
- header-y += netlink.h
- header-y += netrom.h
-+header-y += nfc.h
- header-y += nfs.h
- header-y += nfs2.h
- header-y += nfs3.h
-diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
-index fd0dc30..cc07d27 100644
---- a/include/linux/hrtimer.h
-+++ b/include/linux/hrtimer.h
-@@ -165,6 +165,7 @@ enum hrtimer_base_type {
- * @lock: lock protecting the base and associated clock bases
- * and timers
- * @active_bases: Bitfield to mark bases with active timers
-+ * @clock_was_set: Indicates that clock was set from irq context.
- * @expires_next: absolute time of the next event which was scheduled
- * via clock_set_next_event()
- * @hres_active: State of high resolution mode
-@@ -177,7 +178,8 @@ enum hrtimer_base_type {
- */
- struct hrtimer_cpu_base {
- raw_spinlock_t lock;
-- unsigned long active_bases;
-+ unsigned int active_bases;
-+ unsigned int clock_was_set;
- #ifdef CONFIG_HIGH_RES_TIMERS
- ktime_t expires_next;
- int hres_active;
-@@ -286,6 +288,8 @@ extern void hrtimer_peek_ahead_timers(void);
- # define MONOTONIC_RES_NSEC HIGH_RES_NSEC
- # define KTIME_MONOTONIC_RES KTIME_HIGH_RES
-
-+extern void clock_was_set_delayed(void);
-+
- #else
-
- # define MONOTONIC_RES_NSEC LOW_RES_NSEC
-@@ -306,6 +310,9 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer)
- {
- return 0;
- }
-+
-+static inline void clock_was_set_delayed(void) { }
-+
- #endif
-
- extern void clock_was_set(void);
-@@ -320,6 +327,7 @@ extern ktime_t ktime_get(void);
- extern ktime_t ktime_get_real(void);
- extern ktime_t ktime_get_boottime(void);
- extern ktime_t ktime_get_monotonic_offset(void);
-+extern ktime_t ktime_get_update_offsets(ktime_t *offs_real, ktime_t *offs_boot);
-
- DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
-
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 81a173c..7b06169 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1933,6 +1933,14 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p,
- }
- #endif
-
-+#ifdef CONFIG_NO_HZ
-+void calc_load_enter_idle(void);
-+void calc_load_exit_idle(void);
-+#else
-+static inline void calc_load_enter_idle(void) { }
-+static inline void calc_load_exit_idle(void) { }
-+#endif /* CONFIG_NO_HZ */
-+
- #ifndef CONFIG_CPUMASK_OFFSTACK
- static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
- {
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index ae34bf5..6db7a5e 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -657,6 +657,14 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
- return 0;
- }
-
-+static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base)
-+{
-+ ktime_t *offs_real = &base->clock_base[HRTIMER_BASE_REALTIME].offset;
-+ ktime_t *offs_boot = &base->clock_base[HRTIMER_BASE_BOOTTIME].offset;
-+
-+ return ktime_get_update_offsets(offs_real, offs_boot);
-+}
-+
- /*
- * Retrigger next event is called after clock was set
- *
-@@ -665,22 +673,12 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
- static void retrigger_next_event(void *arg)
- {
- struct hrtimer_cpu_base *base = &__get_cpu_var(hrtimer_bases);
-- struct timespec realtime_offset, xtim, wtm, sleep;
-
- if (!hrtimer_hres_active())
- return;
-
-- /* Optimized out for !HIGH_RES */
-- get_xtime_and_monotonic_and_sleep_offset(&xtim, &wtm, &sleep);
-- set_normalized_timespec(&realtime_offset, -wtm.tv_sec, -wtm.tv_nsec);
--
-- /* Adjust CLOCK_REALTIME offset */
- raw_spin_lock(&base->lock);
-- base->clock_base[HRTIMER_BASE_REALTIME].offset =
-- timespec_to_ktime(realtime_offset);
-- base->clock_base[HRTIMER_BASE_BOOTTIME].offset =
-- timespec_to_ktime(sleep);
--
-+ hrtimer_update_base(base);
- hrtimer_force_reprogram(base, 0);
- raw_spin_unlock(&base->lock);
- }
-@@ -710,13 +708,25 @@ static int hrtimer_switch_to_hres(void)
- base->clock_base[i].resolution = KTIME_HIGH_RES;
-
- tick_setup_sched_timer();
--
- /* "Retrigger" the interrupt to get things going */
- retrigger_next_event(NULL);
- local_irq_restore(flags);
- return 1;
- }
-
-+/*
-+ * Called from timekeeping code to reprogramm the hrtimer interrupt
-+ * device. If called from the timer interrupt context we defer it to
-+ * softirq context.
-+ */
-+void clock_was_set_delayed(void)
-+{
-+ struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
-+
-+ cpu_base->clock_was_set = 1;
-+ __raise_softirq_irqoff(HRTIMER_SOFTIRQ);
-+}
-+
- #else
-
- static inline int hrtimer_hres_active(void) { return 0; }
-@@ -1250,11 +1260,10 @@ void hrtimer_interrupt(struct clock_event_device *dev)
- cpu_base->nr_events++;
- dev->next_event.tv64 = KTIME_MAX;
-
-- entry_time = now = ktime_get();
-+ raw_spin_lock(&cpu_base->lock);
-+ entry_time = now = hrtimer_update_base(cpu_base);
- retry:
- expires_next.tv64 = KTIME_MAX;
--
-- raw_spin_lock(&cpu_base->lock);
- /*
- * We set expires_next to KTIME_MAX here with cpu_base->lock
- * held to prevent that a timer is enqueued in our queue via
-@@ -1330,8 +1339,12 @@ retry:
- * We need to prevent that we loop forever in the hrtimer
- * interrupt routine. We give it 3 attempts to avoid
- * overreacting on some spurious event.
-+ *
-+ * Acquire base lock for updating the offsets and retrieving
-+ * the current time.
- */
-- now = ktime_get();
-+ raw_spin_lock(&cpu_base->lock);
-+ now = hrtimer_update_base(cpu_base);
- cpu_base->nr_retries++;
- if (++retries < 3)
- goto retry;
-@@ -1343,6 +1356,7 @@ retry:
- */
- cpu_base->nr_hangs++;
- cpu_base->hang_detected = 1;
-+ raw_spin_unlock(&cpu_base->lock);
- delta = ktime_sub(now, entry_time);
- if (delta.tv64 > cpu_base->max_hang_time.tv64)
- cpu_base->max_hang_time = delta;
-@@ -1395,6 +1409,13 @@ void hrtimer_peek_ahead_timers(void)
-
- static void run_hrtimer_softirq(struct softirq_action *h)
- {
-+ struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
-+
-+ if (cpu_base->clock_was_set) {
-+ cpu_base->clock_was_set = 0;
-+ clock_was_set();
-+ }
-+
- hrtimer_peek_ahead_timers();
- }
-
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 2000e06..817bf70 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -2162,11 +2162,73 @@ unsigned long this_cpu_load(void)
- }
-
-
-+/*
-+ * Global load-average calculations
-+ *
-+ * We take a distributed and async approach to calculating the global load-avg
-+ * in order to minimize overhead.
-+ *
-+ * The global load average is an exponentially decaying average of nr_running +
-+ * nr_uninterruptible.
-+ *
-+ * Once every LOAD_FREQ:
-+ *
-+ * nr_active = 0;
-+ * for_each_possible_cpu(cpu)
-+ * nr_active += cpu_of(cpu)->nr_running + cpu_of(cpu)->nr_uninterruptible;
-+ *
-+ * avenrun[n] = avenrun[0] * exp_n + nr_active * (1 - exp_n)
-+ *
-+ * Due to a number of reasons the above turns in the mess below:
-+ *
-+ * - for_each_possible_cpu() is prohibitively expensive on machines with
-+ * serious number of cpus, therefore we need to take a distributed approach
-+ * to calculating nr_active.
-+ *
-+ * \Sum_i x_i(t) = \Sum_i x_i(t) - x_i(t_0) | x_i(t_0) := 0
-+ * = \Sum_i { \Sum_j=1 x_i(t_j) - x_i(t_j-1) }
-+ *
-+ * So assuming nr_active := 0 when we start out -- true per definition, we
-+ * can simply take per-cpu deltas and fold those into a global accumulate
-+ * to obtain the same result. See calc_load_fold_active().
-+ *
-+ * Furthermore, in order to avoid synchronizing all per-cpu delta folding
-+ * across the machine, we assume 10 ticks is sufficient time for every
-+ * cpu to have completed this task.
-+ *
-+ * This places an upper-bound on the IRQ-off latency of the machine. Then
-+ * again, being late doesn't loose the delta, just wrecks the sample.
-+ *
-+ * - cpu_rq()->nr_uninterruptible isn't accurately tracked per-cpu because
-+ * this would add another cross-cpu cacheline miss and atomic operation
-+ * to the wakeup path. Instead we increment on whatever cpu the task ran
-+ * when it went into uninterruptible state and decrement on whatever cpu
-+ * did the wakeup. This means that only the sum of nr_uninterruptible over
-+ * all cpus yields the correct result.
-+ *
-+ * This covers the NO_HZ=n code, for extra head-aches, see the comment below.
-+ */
-+
- /* Variables and functions for calc_load */
- static atomic_long_t calc_load_tasks;
- static unsigned long calc_load_update;
- unsigned long avenrun[3];
--EXPORT_SYMBOL(avenrun);
-+EXPORT_SYMBOL(avenrun); /* should be removed */
-+
-+/**
-+ * get_avenrun - get the load average array
-+ * @loads: pointer to dest load array
-+ * @offset: offset to add
-+ * @shift: shift count to shift the result left
-+ *
-+ * These values are estimates at best, so no need for locking.
-+ */
-+void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
-+{
-+ loads[0] = (avenrun[0] + offset) << shift;
-+ loads[1] = (avenrun[1] + offset) << shift;
-+ loads[2] = (avenrun[2] + offset) << shift;
-+}
-
- static long calc_load_fold_active(struct rq *this_rq)
- {
-@@ -2183,6 +2245,9 @@ static long calc_load_fold_active(struct rq *this_rq)
- return delta;
- }
-
-+/*
-+ * a1 = a0 * e + a * (1 - e)
-+ */
- static unsigned long
- calc_load(unsigned long load, unsigned long exp, unsigned long active)
- {
-@@ -2194,30 +2259,118 @@ calc_load(unsigned long load, unsigned long exp, unsigned long active)
-
- #ifdef CONFIG_NO_HZ
- /*
-- * For NO_HZ we delay the active fold to the next LOAD_FREQ update.
-+ * Handle NO_HZ for the global load-average.
-+ *
-+ * Since the above described distributed algorithm to compute the global
-+ * load-average relies on per-cpu sampling from the tick, it is affected by
-+ * NO_HZ.
-+ *
-+ * The basic idea is to fold the nr_active delta into a global idle-delta upon
-+ * entering NO_HZ state such that we can include this as an 'extra' cpu delta
-+ * when we read the global state.
-+ *
-+ * Obviously reality has to ruin such a delightfully simple scheme:
-+ *
-+ * - When we go NO_HZ idle during the window, we can negate our sample
-+ * contribution, causing under-accounting.
-+ *
-+ * We avoid this by keeping two idle-delta counters and flipping them
-+ * when the window starts, thus separating old and new NO_HZ load.
-+ *
-+ * The only trick is the slight shift in index flip for read vs write.
-+ *
-+ * 0s 5s 10s 15s
-+ * +10 +10 +10 +10
-+ * |-|-----------|-|-----------|-|-----------|-|
-+ * r:0 0 1 1 0 0 1 1 0
-+ * w:0 1 1 0 0 1 1 0 0
-+ *
-+ * This ensures we'll fold the old idle contribution in this window while
-+ * accumlating the new one.
-+ *
-+ * - When we wake up from NO_HZ idle during the window, we push up our
-+ * contribution, since we effectively move our sample point to a known
-+ * busy state.
-+ *
-+ * This is solved by pushing the window forward, and thus skipping the
-+ * sample, for this cpu (effectively using the idle-delta for this cpu which
-+ * was in effect at the time the window opened). This also solves the issue
-+ * of having to deal with a cpu having been in NOHZ idle for multiple
-+ * LOAD_FREQ intervals.
- *
- * When making the ILB scale, we should try to pull this in as well.
- */
--static atomic_long_t calc_load_tasks_idle;
-+static atomic_long_t calc_load_idle[2];
-+static int calc_load_idx;
-
--void calc_load_account_idle(struct rq *this_rq)
-+static inline int calc_load_write_idx(void)
- {
-+ int idx = calc_load_idx;
-+
-+ /*
-+ * See calc_global_nohz(), if we observe the new index, we also
-+ * need to observe the new update time.
-+ */
-+ smp_rmb();
-+
-+ /*
-+ * If the folding window started, make sure we start writing in the
-+ * next idle-delta.
-+ */
-+ if (!time_before(jiffies, calc_load_update))
-+ idx++;
-+
-+ return idx & 1;
-+}
-+
-+static inline int calc_load_read_idx(void)
-+{
-+ return calc_load_idx & 1;
-+}
-+
-+void calc_load_enter_idle(void)
-+{
-+ struct rq *this_rq = this_rq();
- long delta;
-
-+ /*
-+ * We're going into NOHZ mode, if there's any pending delta, fold it
-+ * into the pending idle delta.
-+ */
- delta = calc_load_fold_active(this_rq);
-- if (delta)
-- atomic_long_add(delta, &calc_load_tasks_idle);
-+ if (delta) {
-+ int idx = calc_load_write_idx();
-+ atomic_long_add(delta, &calc_load_idle[idx]);
-+ }
- }
-
--static long calc_load_fold_idle(void)
-+void calc_load_exit_idle(void)
- {
-- long delta = 0;
-+ struct rq *this_rq = this_rq();
-+
-+ /*
-+ * If we're still before the sample window, we're done.
-+ */
-+ if (time_before(jiffies, this_rq->calc_load_update))
-+ return;
-
- /*
-- * Its got a race, we don't care...
-+ * We woke inside or after the sample window, this means we're already
-+ * accounted through the nohz accounting, so skip the entire deal and
-+ * sync up for the next window.
- */
-- if (atomic_long_read(&calc_load_tasks_idle))
-- delta = atomic_long_xchg(&calc_load_tasks_idle, 0);
-+ this_rq->calc_load_update = calc_load_update;
-+ if (time_before(jiffies, this_rq->calc_load_update + 10))
-+ this_rq->calc_load_update += LOAD_FREQ;
-+}
-+
-+static long calc_load_fold_idle(void)
-+{
-+ int idx = calc_load_read_idx();
-+ long delta = 0;
-+
-+ if (atomic_long_read(&calc_load_idle[idx]))
-+ delta = atomic_long_xchg(&calc_load_idle[idx], 0);
-
- return delta;
- }
-@@ -2303,66 +2456,39 @@ static void calc_global_nohz(void)
- {
- long delta, active, n;
-
-- /*
-- * If we crossed a calc_load_update boundary, make sure to fold
-- * any pending idle changes, the respective CPUs might have
-- * missed the tick driven calc_load_account_active() update
-- * due to NO_HZ.
-- */
-- delta = calc_load_fold_idle();
-- if (delta)
-- atomic_long_add(delta, &calc_load_tasks);
--
-- /*
-- * It could be the one fold was all it took, we done!
-- */
-- if (time_before(jiffies, calc_load_update + 10))
-- return;
--
-- /*
-- * Catch-up, fold however many we are behind still
-- */
-- delta = jiffies - calc_load_update - 10;
-- n = 1 + (delta / LOAD_FREQ);
-+ if (!time_before(jiffies, calc_load_update + 10)) {
-+ /*
-+ * Catch-up, fold however many we are behind still
-+ */
-+ delta = jiffies - calc_load_update - 10;
-+ n = 1 + (delta / LOAD_FREQ);
-
-- active = atomic_long_read(&calc_load_tasks);
-- active = active > 0 ? active * FIXED_1 : 0;
-+ active = atomic_long_read(&calc_load_tasks);
-+ active = active > 0 ? active * FIXED_1 : 0;
-
-- avenrun[0] = calc_load_n(avenrun[0], EXP_1, active, n);
-- avenrun[1] = calc_load_n(avenrun[1], EXP_5, active, n);
-- avenrun[2] = calc_load_n(avenrun[2], EXP_15, active, n);
-+ avenrun[0] = calc_load_n(avenrun[0], EXP_1, active, n);
-+ avenrun[1] = calc_load_n(avenrun[1], EXP_5, active, n);
-+ avenrun[2] = calc_load_n(avenrun[2], EXP_15, active, n);
-
-- calc_load_update += n * LOAD_FREQ;
--}
--#else
--void calc_load_account_idle(struct rq *this_rq)
--{
--}
-+ calc_load_update += n * LOAD_FREQ;
-+ }
-
--static inline long calc_load_fold_idle(void)
--{
-- return 0;
-+ /*
-+ * Flip the idle index...
-+ *
-+ * Make sure we first write the new time then flip the index, so that
-+ * calc_load_write_idx() will see the new time when it reads the new
-+ * index, this avoids a double flip messing things up.
-+ */
-+ smp_wmb();
-+ calc_load_idx++;
- }
-+#else /* !CONFIG_NO_HZ */
-
--static void calc_global_nohz(void)
--{
--}
--#endif
-+static inline long calc_load_fold_idle(void) { return 0; }
-+static inline void calc_global_nohz(void) { }
-
--/**
-- * get_avenrun - get the load average array
-- * @loads: pointer to dest load array
-- * @offset: offset to add
-- * @shift: shift count to shift the result left
-- *
-- * These values are estimates at best, so no need for locking.
-- */
--void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
--{
-- loads[0] = (avenrun[0] + offset) << shift;
-- loads[1] = (avenrun[1] + offset) << shift;
-- loads[2] = (avenrun[2] + offset) << shift;
--}
-+#endif /* CONFIG_NO_HZ */
-
- /*
- * calc_load - update the avenrun load estimates 10 ticks after the
-@@ -2370,11 +2496,18 @@ void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
- */
- void calc_global_load(unsigned long ticks)
- {
-- long active;
-+ long active, delta;
-
- if (time_before(jiffies, calc_load_update + 10))
- return;
-
-+ /*
-+ * Fold the 'old' idle-delta to include all NO_HZ cpus.
-+ */
-+ delta = calc_load_fold_idle();
-+ if (delta)
-+ atomic_long_add(delta, &calc_load_tasks);
-+
- active = atomic_long_read(&calc_load_tasks);
- active = active > 0 ? active * FIXED_1 : 0;
-
-@@ -2385,12 +2518,7 @@ void calc_global_load(unsigned long ticks)
- calc_load_update += LOAD_FREQ;
-
- /*
-- * Account one period with whatever state we found before
-- * folding in the nohz state and ageing the entire idle period.
-- *
-- * This avoids loosing a sample when we go idle between
-- * calc_load_account_active() (10 ticks ago) and now and thus
-- * under-accounting.
-+ * In case we idled for multiple LOAD_FREQ intervals, catch up in bulk.
- */
- calc_global_nohz();
- }
-@@ -2407,7 +2535,6 @@ static void calc_load_account_active(struct rq *this_rq)
- return;
-
- delta = calc_load_fold_active(this_rq);
-- delta += calc_load_fold_idle();
- if (delta)
- atomic_long_add(delta, &calc_load_tasks);
-
-@@ -2415,6 +2542,10 @@ static void calc_load_account_active(struct rq *this_rq)
- }
-
- /*
-+ * End of global load-average stuff
-+ */
-+
-+/*
- * The exact cpuload at various idx values, calculated at every tick would be
- * load = (2^idx - 1) / 2^idx * load + 1 / 2^idx * cur_load
- *
-diff --git a/kernel/sched/idle_task.c b/kernel/sched/idle_task.c
-index 91b4c95..fdf7522 100644
---- a/kernel/sched/idle_task.c
-+++ b/kernel/sched/idle_task.c
-@@ -25,7 +25,6 @@ static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int fl
- static struct task_struct *pick_next_task_idle(struct rq *rq)
- {
- schedstat_inc(rq, sched_goidle);
-- calc_load_account_idle(rq);
- return rq->idle;
- }
-
-diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index fb3acba..116ced0 100644
---- a/kernel/sched/sched.h
-+++ b/kernel/sched/sched.h
-@@ -940,8 +940,6 @@ static inline u64 sched_avg_period(void)
- return (u64)sysctl_sched_time_avg * NSEC_PER_MSEC / 2;
- }
-
--void calc_load_account_idle(struct rq *this_rq);
--
- #ifdef CONFIG_SCHED_HRTICK
-
- /*
-diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
-index 6a3a5b9..fd4e160 100644
---- a/kernel/time/tick-sched.c
-+++ b/kernel/time/tick-sched.c
-@@ -401,6 +401,7 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts)
- */
- if (!ts->tick_stopped) {
- select_nohz_load_balancer(1);
-+ calc_load_enter_idle();
-
- ts->idle_tick = hrtimer_get_expires(&ts->sched_timer);
- ts->tick_stopped = 1;
-@@ -591,6 +592,7 @@ void tick_nohz_idle_exit(void)
- account_idle_ticks(ticks);
- #endif
-
-+ calc_load_exit_idle();
- touch_softlockup_watchdog();
- /*
- * Cancel the scheduled timer and restore the tick
-diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
-index d42574df..7c50de8 100644
---- a/kernel/time/timekeeping.c
-+++ b/kernel/time/timekeeping.c
-@@ -70,6 +70,12 @@ struct timekeeper {
- /* The raw monotonic time for the CLOCK_MONOTONIC_RAW posix clock. */
- struct timespec raw_time;
-
-+ /* Offset clock monotonic -> clock realtime */
-+ ktime_t offs_real;
-+
-+ /* Offset clock monotonic -> clock boottime */
-+ ktime_t offs_boot;
-+
- /* Seqlock for all timekeeper values */
- seqlock_t lock;
- };
-@@ -172,6 +178,14 @@ static inline s64 timekeeping_get_ns_raw(void)
- return clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
- }
-
-+static void update_rt_offset(void)
-+{
-+ struct timespec tmp, *wtm = &timekeeper.wall_to_monotonic;
-+
-+ set_normalized_timespec(&tmp, -wtm->tv_sec, -wtm->tv_nsec);
-+ timekeeper.offs_real = timespec_to_ktime(tmp);
-+}
-+
- /* must hold write on timekeeper.lock */
- static void timekeeping_update(bool clearntp)
- {
-@@ -179,6 +193,7 @@ static void timekeeping_update(bool clearntp)
- timekeeper.ntp_error = 0;
- ntp_clear();
- }
-+ update_rt_offset();
- update_vsyscall(&timekeeper.xtime, &timekeeper.wall_to_monotonic,
- timekeeper.clock, timekeeper.mult);
- }
-@@ -606,6 +621,7 @@ void __init timekeeping_init(void)
- }
- set_normalized_timespec(&timekeeper.wall_to_monotonic,
- -boot.tv_sec, -boot.tv_nsec);
-+ update_rt_offset();
- timekeeper.total_sleep_time.tv_sec = 0;
- timekeeper.total_sleep_time.tv_nsec = 0;
- write_sequnlock_irqrestore(&timekeeper.lock, flags);
-@@ -614,6 +630,12 @@ void __init timekeeping_init(void)
- /* time in seconds when suspend began */
- static struct timespec timekeeping_suspend_time;
-
-+static void update_sleep_time(struct timespec t)
-+{
-+ timekeeper.total_sleep_time = t;
-+ timekeeper.offs_boot = timespec_to_ktime(t);
-+}
-+
- /**
- * __timekeeping_inject_sleeptime - Internal function to add sleep interval
- * @delta: pointer to a timespec delta value
-@@ -632,8 +654,7 @@ static void __timekeeping_inject_sleeptime(struct timespec *delta)
- timekeeper.xtime = timespec_add(timekeeper.xtime, *delta);
- timekeeper.wall_to_monotonic =
- timespec_sub(timekeeper.wall_to_monotonic, *delta);
-- timekeeper.total_sleep_time = timespec_add(
-- timekeeper.total_sleep_time, *delta);
-+ update_sleep_time(timespec_add(timekeeper.total_sleep_time, *delta));
- }
-
-
-@@ -698,6 +719,7 @@ static void timekeeping_resume(void)
- timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock);
- timekeeper.ntp_error = 0;
- timekeeping_suspended = 0;
-+ timekeeping_update(false);
- write_sequnlock_irqrestore(&timekeeper.lock, flags);
-
- touch_softlockup_watchdog();
-@@ -965,6 +987,8 @@ static cycle_t logarithmic_accumulation(cycle_t offset, int shift)
- leap = second_overflow(timekeeper.xtime.tv_sec);
- timekeeper.xtime.tv_sec += leap;
- timekeeper.wall_to_monotonic.tv_sec -= leap;
-+ if (leap)
-+ clock_was_set_delayed();
- }
-
- /* Accumulate raw time */
-@@ -1081,6 +1105,8 @@ static void update_wall_time(void)
- leap = second_overflow(timekeeper.xtime.tv_sec);
- timekeeper.xtime.tv_sec += leap;
- timekeeper.wall_to_monotonic.tv_sec -= leap;
-+ if (leap)
-+ clock_was_set_delayed();
- }
-
- timekeeping_update(false);
-@@ -1248,6 +1274,40 @@ void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
- } while (read_seqretry(&timekeeper.lock, seq));
- }
-
-+#ifdef CONFIG_HIGH_RES_TIMERS
-+/**
-+ * ktime_get_update_offsets - hrtimer helper
-+ * @offs_real: pointer to storage for monotonic -> realtime offset
-+ * @offs_boot: pointer to storage for monotonic -> boottime offset
-+ *
-+ * Returns current monotonic time and updates the offsets
-+ * Called from hrtimer_interupt() or retrigger_next_event()
-+ */
-+ktime_t ktime_get_update_offsets(ktime_t *offs_real, ktime_t *offs_boot)
-+{
-+ ktime_t now;
-+ unsigned int seq;
-+ u64 secs, nsecs;
-+
-+ do {
-+ seq = read_seqbegin(&timekeeper.lock);
-+
-+ secs = timekeeper.xtime.tv_sec;
-+ nsecs = timekeeper.xtime.tv_nsec;
-+ nsecs += timekeeping_get_ns();
-+ /* If arch requires, add in gettimeoffset() */
-+ nsecs += arch_gettimeoffset();
-+
-+ *offs_real = timekeeper.offs_real;
-+ *offs_boot = timekeeper.offs_boot;
-+ } while (read_seqretry(&timekeeper.lock, seq));
-+
-+ now = ktime_add_ns(ktime_set(secs, 0), nsecs);
-+ now = ktime_sub(now, *offs_real);
-+ return now;
-+}
-+#endif
-+
- /**
- * ktime_get_monotonic_offset() - get wall_to_monotonic in ktime_t format
- */
-diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
-index 1197e8d..d132b98 100644
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -2183,15 +2183,13 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
- sdata->name, mgmt->sa, status_code);
- ieee80211_destroy_assoc_data(sdata, false);
- } else {
-- printk(KERN_DEBUG "%s: associated\n", sdata->name);
--
- if (!ieee80211_assoc_success(sdata, *bss, mgmt, len)) {
- /* oops -- internal error -- send timeout for now */
-- ieee80211_destroy_assoc_data(sdata, true);
-- sta_info_destroy_addr(sdata, mgmt->bssid);
-+ ieee80211_destroy_assoc_data(sdata, false);
- cfg80211_put_bss(*bss);
- return RX_MGMT_CFG80211_ASSOC_TIMEOUT;
- }
-+ printk(KERN_DEBUG "%s: associated\n", sdata->name);
-
- /*
- * destroy assoc_data afterwards, as otherwise an idle
-diff --git a/net/wireless/util.c b/net/wireless/util.c
-index b5b6890..0eb6cc0 100644
---- a/net/wireless/util.c
-+++ b/net/wireless/util.c
-@@ -805,7 +805,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
- ntype == NL80211_IFTYPE_P2P_CLIENT))
- return -EBUSY;
-
-- if (ntype != otype) {
-+ if (ntype != otype && netif_running(dev)) {
- err = cfg80211_can_change_interface(rdev, dev->ieee80211_ptr,
- ntype);
- if (err)
diff --git a/3.4.6/0000_README b/3.4.7/0000_README
index 2236f0c..fd852d4 100644
--- a/3.4.6/0000_README
+++ b/3.4.7/0000_README
@@ -2,10 +2,6 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 1005_linux-3.4.6.patch
-From: http://www.kernel.org
-Desc: Linux 3.4.6
-
Patch: 4420_grsecurity-2.9.1-3.4.7-201208011850.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/3.4.6/4420_grsecurity-2.9.1-3.4.7-201208011850.patch b/3.4.7/4420_grsecurity-2.9.1-3.4.7-201208011850.patch
index 23880cf..23880cf 100644
--- a/3.4.6/4420_grsecurity-2.9.1-3.4.7-201208011850.patch
+++ b/3.4.7/4420_grsecurity-2.9.1-3.4.7-201208011850.patch
diff --git a/3.4.6/4430_grsec-remove-localversion-grsec.patch b/3.4.7/4430_grsec-remove-localversion-grsec.patch
index 31cf878..31cf878 100644
--- a/3.4.6/4430_grsec-remove-localversion-grsec.patch
+++ b/3.4.7/4430_grsec-remove-localversion-grsec.patch
diff --git a/3.4.6/4435_grsec-mute-warnings.patch b/3.4.7/4435_grsec-mute-warnings.patch
index e85abd6..e85abd6 100644
--- a/3.4.6/4435_grsec-mute-warnings.patch
+++ b/3.4.7/4435_grsec-mute-warnings.patch
diff --git a/3.4.6/4440_grsec-remove-protected-paths.patch b/3.4.7/4440_grsec-remove-protected-paths.patch
index 637934a..637934a 100644
--- a/3.4.6/4440_grsec-remove-protected-paths.patch
+++ b/3.4.7/4440_grsec-remove-protected-paths.patch
diff --git a/3.4.6/4450_grsec-kconfig-default-gids.patch b/3.4.7/4450_grsec-kconfig-default-gids.patch
index a2e6f84..a2e6f84 100644
--- a/3.4.6/4450_grsec-kconfig-default-gids.patch
+++ b/3.4.7/4450_grsec-kconfig-default-gids.patch
diff --git a/3.4.6/4465_selinux-avc_audit-log-curr_ip.patch b/3.4.7/4465_selinux-avc_audit-log-curr_ip.patch
index 2548df6..2548df6 100644
--- a/3.4.6/4465_selinux-avc_audit-log-curr_ip.patch
+++ b/3.4.7/4465_selinux-avc_audit-log-curr_ip.patch
diff --git a/3.4.6/4470_disable-compat_vdso.patch b/3.4.7/4470_disable-compat_vdso.patch
index 2a637c1..2a637c1 100644
--- a/3.4.6/4470_disable-compat_vdso.patch
+++ b/3.4.7/4470_disable-compat_vdso.patch
diff --git a/3.4.6/4480_fix-scsi-lpfc-Werror.patch b/3.4.7/4480_fix-scsi-lpfc-Werror.patch
index e5bbb1c..e5bbb1c 100644
--- a/3.4.6/4480_fix-scsi-lpfc-Werror.patch
+++ b/3.4.7/4480_fix-scsi-lpfc-Werror.patch