mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-25 16:21:32 +00:00
Hummingboard DEV kernel upstream patches.
This commit is contained in:
parent
6041b16540
commit
e61584cf5a
18 changed files with 29357 additions and 0 deletions
2765
patch/kernel/cubox-dev/patch-3.14.60-61.patch
Normal file
2765
patch/kernel/cubox-dev/patch-3.14.60-61.patch
Normal file
File diff suppressed because it is too large
Load diff
2180
patch/kernel/cubox-dev/patch-3.14.61-62.patch
Normal file
2180
patch/kernel/cubox-dev/patch-3.14.61-62.patch
Normal file
File diff suppressed because it is too large
Load diff
4346
patch/kernel/cubox-dev/patch-3.14.62-63.patch
Normal file
4346
patch/kernel/cubox-dev/patch-3.14.62-63.patch
Normal file
File diff suppressed because it is too large
Load diff
2736
patch/kernel/cubox-dev/patch-3.14.63-64.patch
Normal file
2736
patch/kernel/cubox-dev/patch-3.14.63-64.patch
Normal file
File diff suppressed because it is too large
Load diff
1518
patch/kernel/cubox-dev/patch-3.14.64-65.patch
Normal file
1518
patch/kernel/cubox-dev/patch-3.14.64-65.patch
Normal file
File diff suppressed because it is too large
Load diff
2248
patch/kernel/cubox-dev/patch-3.14.65-66.patch
Normal file
2248
patch/kernel/cubox-dev/patch-3.14.65-66.patch
Normal file
File diff suppressed because it is too large
Load diff
1001
patch/kernel/cubox-dev/patch-3.14.66-67.patch
Normal file
1001
patch/kernel/cubox-dev/patch-3.14.66-67.patch
Normal file
File diff suppressed because it is too large
Load diff
1259
patch/kernel/cubox-dev/patch-3.14.67-68.patch
Normal file
1259
patch/kernel/cubox-dev/patch-3.14.67-68.patch
Normal file
File diff suppressed because it is too large
Load diff
771
patch/kernel/cubox-dev/patch-3.14.68-69.patch
Normal file
771
patch/kernel/cubox-dev/patch-3.14.68-69.patch
Normal file
|
@ -0,0 +1,771 @@
|
|||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 900d98eec2fc..8efefbd1a853 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3247,8 +3247,8 @@ F: Documentation/x86/efi-stub.txt
|
||||
F: arch/ia64/kernel/efi.c
|
||||
F: arch/x86/boot/compressed/eboot.[ch]
|
||||
F: arch/x86/include/asm/efi.h
|
||||
-F: arch/x86/platform/efi/*
|
||||
-F: drivers/firmware/efi/*
|
||||
+F: arch/x86/platform/efi/
|
||||
+F: drivers/firmware/efi/
|
||||
F: include/linux/efi*.h
|
||||
|
||||
EFI VARIABLE FILESYSTEM
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 5ec8a7dda8ba..c6762fdfc967 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 68
|
||||
+SUBLEVEL = 69
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S
|
||||
index 95c115d8b5ee..b143f946bb79 100644
|
||||
--- a/arch/arm/mach-socfpga/headsmp.S
|
||||
+++ b/arch/arm/mach-socfpga/headsmp.S
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/init.h>
|
||||
|
||||
.arch armv7-a
|
||||
+ .arm
|
||||
|
||||
ENTRY(secondary_trampoline)
|
||||
movw r2, #:lower16:cpu1start_addr
|
||||
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 f58c0d3aaeb4..3f70874faf24 100644
|
||||
--- a/arch/powerpc/kernel/prom.c
|
||||
+++ b/arch/powerpc/kernel/prom.c
|
||||
@@ -159,7 +159,7 @@ static struct ibm_pa_feature {
|
||||
{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},
|
||||
+ {CPU_FTR_REAL_LE, 0, PPC_FEATURE_TRUE_LE, 5, 0, 0},
|
||||
};
|
||||
|
||||
static void __init scan_features(unsigned long node, unsigned char *ftrs,
|
||||
diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c
|
||||
index b285d4e8c68e..5da924bbf0a0 100644
|
||||
--- a/arch/x86/kernel/sysfb_efi.c
|
||||
+++ b/arch/x86/kernel/sysfb_efi.c
|
||||
@@ -106,14 +106,24 @@ static int __init efifb_set_system(const struct dmi_system_id *id)
|
||||
continue;
|
||||
for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
|
||||
resource_size_t start, end;
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ flags = pci_resource_flags(dev, i);
|
||||
+ if (!(flags & IORESOURCE_MEM))
|
||||
+ continue;
|
||||
+
|
||||
+ if (flags & IORESOURCE_UNSET)
|
||||
+ continue;
|
||||
+
|
||||
+ if (pci_resource_len(dev, i) == 0)
|
||||
+ continue;
|
||||
|
||||
start = pci_resource_start(dev, i);
|
||||
- if (start == 0)
|
||||
- break;
|
||||
end = pci_resource_end(dev, i);
|
||||
if (screen_info.lfb_base >= start &&
|
||||
screen_info.lfb_base < end) {
|
||||
found_bar = 1;
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
|
||||
index 92ae6acac8a7..6aa0f4d9eea6 100644
|
||||
--- a/arch/x86/kernel/tsc_msr.c
|
||||
+++ b/arch/x86/kernel/tsc_msr.c
|
||||
@@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void)
|
||||
|
||||
if (freq_desc_tables[cpu_index].msr_plat) {
|
||||
rdmsr(MSR_PLATFORM_INFO, lo, hi);
|
||||
- ratio = (lo >> 8) & 0x1f;
|
||||
+ ratio = (lo >> 8) & 0xff;
|
||||
} else {
|
||||
rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
|
||||
ratio = (hi >> 8) & 0x1f;
|
||||
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
|
||||
index 81a78ba84311..465872560ba2 100644
|
||||
--- a/drivers/acpi/acpica/dsmethod.c
|
||||
+++ b/drivers/acpi/acpica/dsmethod.c
|
||||
@@ -267,6 +267,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
|
||||
obj_desc->method.mutex->mutex.
|
||||
original_sync_level =
|
||||
obj_desc->method.mutex->mutex.sync_level;
|
||||
+
|
||||
+ obj_desc->method.mutex->mutex.thread_id =
|
||||
+ acpi_os_get_thread_id();
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
|
||||
index d18093681af2..200c4e2c716e 100644
|
||||
--- a/drivers/block/nbd.c
|
||||
+++ b/drivers/block/nbd.c
|
||||
@@ -581,8 +581,8 @@ static void do_nbd_request(struct request_queue *q)
|
||||
BUG_ON(nbd->magic != NBD_MAGIC);
|
||||
|
||||
if (unlikely(!nbd->sock)) {
|
||||
- dev_err(disk_to_dev(nbd->disk),
|
||||
- "Attempted send on closed socket\n");
|
||||
+ dev_err_ratelimited(disk_to_dev(nbd->disk),
|
||||
+ "Attempted send on closed socket\n");
|
||||
req->errors++;
|
||||
nbd_end_request(req);
|
||||
spin_lock_irq(q->queue_lock);
|
||||
diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
|
||||
index 5122ef25f595..e63c3ef9b5ec 100644
|
||||
--- a/drivers/clk/versatile/clk-sp810.c
|
||||
+++ b/drivers/clk/versatile/clk-sp810.c
|
||||
@@ -141,6 +141,7 @@ void __init clk_sp810_of_setup(struct device_node *node)
|
||||
const char *parent_names[2];
|
||||
char name[12];
|
||||
struct clk_init_data init;
|
||||
+ static int instance;
|
||||
int i;
|
||||
|
||||
if (!sp810) {
|
||||
@@ -172,7 +173,7 @@ void __init clk_sp810_of_setup(struct device_node *node)
|
||||
init.num_parents = ARRAY_SIZE(parent_names);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sp810->timerclken); i++) {
|
||||
- snprintf(name, ARRAY_SIZE(name), "timerclken%d", i);
|
||||
+ snprintf(name, sizeof(name), "sp810_%d_%d", instance, i);
|
||||
|
||||
sp810->timerclken[i].sp810 = sp810;
|
||||
sp810->timerclken[i].channel = i;
|
||||
@@ -184,5 +185,6 @@ void __init clk_sp810_of_setup(struct device_node *node)
|
||||
}
|
||||
|
||||
of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810);
|
||||
+ instance++;
|
||||
}
|
||||
CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup);
|
||||
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
|
||||
index 053117c02bbc..afcf3491f579 100644
|
||||
--- a/drivers/iio/magnetometer/ak8975.c
|
||||
+++ b/drivers/iio/magnetometer/ak8975.c
|
||||
@@ -151,6 +151,8 @@ static int ak8975_setup_irq(struct ak8975_data *data)
|
||||
int rc;
|
||||
int irq;
|
||||
|
||||
+ init_waitqueue_head(&data->data_ready_queue);
|
||||
+ clear_bit(0, &data->flags);
|
||||
if (client->irq)
|
||||
irq = client->irq;
|
||||
else
|
||||
@@ -166,8 +168,6 @@ static int ak8975_setup_irq(struct ak8975_data *data)
|
||||
return rc;
|
||||
}
|
||||
|
||||
- init_waitqueue_head(&data->data_ready_queue);
|
||||
- clear_bit(0, &data->flags);
|
||||
data->eoc_irq = irq;
|
||||
|
||||
return rc;
|
||||
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
|
||||
index 45a06e495ed2..3512a686873d 100644
|
||||
--- a/drivers/input/touchscreen/ads7846.c
|
||||
+++ b/drivers/input/touchscreen/ads7846.c
|
||||
@@ -668,18 +668,22 @@ static int ads7846_no_filter(void *ads, int data_idx, int *val)
|
||||
|
||||
static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m)
|
||||
{
|
||||
+ int value;
|
||||
struct spi_transfer *t =
|
||||
list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
|
||||
|
||||
if (ts->model == 7845) {
|
||||
- return be16_to_cpup((__be16 *)&(((char*)t->rx_buf)[1])) >> 3;
|
||||
+ value = be16_to_cpup((__be16 *)&(((char *)t->rx_buf)[1]));
|
||||
} else {
|
||||
/*
|
||||
* adjust: on-wire is a must-ignore bit, a BE12 value, then
|
||||
* padding; built from two 8 bit values written msb-first.
|
||||
*/
|
||||
- return be16_to_cpup((__be16 *)t->rx_buf) >> 3;
|
||||
+ value = be16_to_cpup((__be16 *)t->rx_buf);
|
||||
}
|
||||
+
|
||||
+ /* enforce ADC output is 12 bits width */
|
||||
+ return (value >> 3) & 0xfff;
|
||||
}
|
||||
|
||||
static void ads7846_update_value(struct spi_message *m, int val)
|
||||
diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c
|
||||
index 2175f3419002..dd5cc262bb50 100644
|
||||
--- a/drivers/input/touchscreen/zforce_ts.c
|
||||
+++ b/drivers/input/touchscreen/zforce_ts.c
|
||||
@@ -350,8 +350,8 @@ static int zforce_touch_event(struct zforce_ts *ts, u8 *payload)
|
||||
point.coord_x = point.coord_y = 0;
|
||||
}
|
||||
|
||||
- point.state = payload[9 * i + 5] & 0x03;
|
||||
- point.id = (payload[9 * i + 5] & 0xfc) >> 2;
|
||||
+ point.state = payload[9 * i + 5] & 0x0f;
|
||||
+ point.id = (payload[9 * i + 5] & 0xf0) >> 4;
|
||||
|
||||
/* determine touch major, minor and orientation */
|
||||
point.area_major = max(payload[9 * i + 6],
|
||||
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
|
||||
index 68c94cc85c35..39dc1d43eec1 100644
|
||||
--- a/drivers/scsi/lpfc/lpfc_init.c
|
||||
+++ b/drivers/scsi/lpfc/lpfc_init.c
|
||||
@@ -2697,7 +2697,7 @@ lpfc_online(struct lpfc_hba *phba)
|
||||
}
|
||||
|
||||
vports = lpfc_create_vport_work_array(phba);
|
||||
- if (vports != NULL)
|
||||
+ if (vports != NULL) {
|
||||
for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
|
||||
struct Scsi_Host *shost;
|
||||
shost = lpfc_shost_from_vport(vports[i]);
|
||||
@@ -2714,7 +2714,8 @@ lpfc_online(struct lpfc_hba *phba)
|
||||
}
|
||||
spin_unlock_irq(shost->host_lock);
|
||||
}
|
||||
- lpfc_destroy_vport_work_array(phba, vports);
|
||||
+ }
|
||||
+ lpfc_destroy_vport_work_array(phba, vports);
|
||||
|
||||
lpfc_unblock_mgmt_io(phba);
|
||||
return 0;
|
||||
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
|
||||
index b689a2fd960c..16f1b199d46b 100644
|
||||
--- a/drivers/usb/serial/cp210x.c
|
||||
+++ b/drivers/usb/serial/cp210x.c
|
||||
@@ -108,6 +108,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
|
||||
{ USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
|
||||
{ USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
|
||||
+ { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
|
||||
{ USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
|
||||
{ USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
|
||||
{ USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
|
||||
@@ -117,6 +118,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
|
||||
{ USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
|
||||
{ USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
|
||||
+ { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
|
||||
{ USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
|
||||
{ USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
|
||||
{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
|
||||
@@ -140,6 +142,8 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
|
||||
{ USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
|
||||
{ USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
|
||||
+ { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
|
||||
+ { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
|
||||
{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
|
||||
{ USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
|
||||
{ USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
|
||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
||||
index be78847782c4..842ba1e59706 100644
|
||||
--- a/fs/proc/base.c
|
||||
+++ b/fs/proc/base.c
|
||||
@@ -844,7 +844,8 @@ static ssize_t environ_read(struct file *file, char __user *buf,
|
||||
int ret = 0;
|
||||
struct mm_struct *mm = file->private_data;
|
||||
|
||||
- if (!mm)
|
||||
+ /* Ensure the process spawned far enough to have an environment. */
|
||||
+ if (!mm || !mm->env_end)
|
||||
return 0;
|
||||
|
||||
page = (char *)__get_free_page(GFP_TEMPORARY);
|
||||
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
|
||||
index 02ae99e8e6d3..633716ef19b0 100644
|
||||
--- a/include/linux/compiler-gcc.h
|
||||
+++ b/include/linux/compiler-gcc.h
|
||||
@@ -100,10 +100,122 @@
|
||||
#define __maybe_unused __attribute__((unused))
|
||||
#define __always_unused __attribute__((unused))
|
||||
|
||||
-#define __gcc_header(x) #x
|
||||
-#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
|
||||
-#define gcc_header(x) _gcc_header(x)
|
||||
-#include gcc_header(__GNUC__)
|
||||
+/* gcc version specific checks */
|
||||
+
|
||||
+#if GCC_VERSION < 30200
|
||||
+# error Sorry, your compiler is too old - please upgrade it.
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION < 30300
|
||||
+# define __used __attribute__((__unused__))
|
||||
+#else
|
||||
+# define __used __attribute__((__used__))
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_GCOV_KERNEL
|
||||
+# if GCC_VERSION < 30400
|
||||
+# error "GCOV profiling support for gcc versions below 3.4 not included"
|
||||
+# endif /* __GNUC_MINOR__ */
|
||||
+#endif /* CONFIG_GCOV_KERNEL */
|
||||
+
|
||||
+#if GCC_VERSION >= 30400
|
||||
+#define __must_check __attribute__((warn_unused_result))
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40000
|
||||
+
|
||||
+/* GCC 4.1.[01] miscompiles __weak */
|
||||
+#ifdef __KERNEL__
|
||||
+# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101
|
||||
+# error Your version of gcc miscompiles the __weak directive
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#define __used __attribute__((__used__))
|
||||
+#define __compiler_offsetof(a, b) \
|
||||
+ __builtin_offsetof(a, b)
|
||||
+
|
||||
+#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
|
||||
+# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40300
|
||||
+/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
+ * to them will be unlikely. This means a lot of manual unlikely()s
|
||||
+ * are unnecessary now for any paths leading to the usual suspects
|
||||
+ * like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
+ * older compilers]
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
+ * in the preprocessor, but we can live with this because they're unreleased.
|
||||
+ * Maketime probing would be overkill here.
|
||||
+ *
|
||||
+ * gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
+ * a special section, but I don't see any sense in this right now in
|
||||
+ * the kernel context
|
||||
+ */
|
||||
+#define __cold __attribute__((__cold__))
|
||||
+
|
||||
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
+
|
||||
+#ifndef __CHECKER__
|
||||
+# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
+# define __compiletime_error(message) __attribute__((error(message)))
|
||||
+#endif /* __CHECKER__ */
|
||||
+#endif /* GCC_VERSION >= 40300 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40500
|
||||
+/*
|
||||
+ * Mark a position in code as unreachable. This can be used to
|
||||
+ * suppress control flow warnings after asm blocks that transfer
|
||||
+ * control elsewhere.
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
+ * this in the preprocessor, but we can live with this because they're
|
||||
+ * unreleased. Really, we need to have autoconf for the kernel.
|
||||
+ */
|
||||
+#define unreachable() __builtin_unreachable()
|
||||
+
|
||||
+/* Mark a function definition as prohibited from being cloned. */
|
||||
+#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
|
||||
+
|
||||
+#endif /* GCC_VERSION >= 40500 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40600
|
||||
+/*
|
||||
+ * Tell the optimizer that something else uses this function or variable.
|
||||
+ */
|
||||
+#define __visible __attribute__((externally_visible))
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * GCC 'asm goto' miscompiles certain code sequences:
|
||||
+ *
|
||||
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
+ *
|
||||
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
+ *
|
||||
+ * (asm goto is automatically volatile - the naming reflects this.)
|
||||
+ */
|
||||
+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
+
|
||||
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
+#if GCC_VERSION >= 40400
|
||||
+#define __HAVE_BUILTIN_BSWAP32__
|
||||
+#define __HAVE_BUILTIN_BSWAP64__
|
||||
+#endif
|
||||
+#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600)
|
||||
+#define __HAVE_BUILTIN_BSWAP16__
|
||||
+#endif
|
||||
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
+
|
||||
+#if GCC_VERSION >= 50000
|
||||
+#define KASAN_ABI_VERSION 4
|
||||
+#elif GCC_VERSION >= 40902
|
||||
+#define KASAN_ABI_VERSION 3
|
||||
+#endif
|
||||
+
|
||||
+#endif /* gcc version >= 40000 specific checks */
|
||||
|
||||
#if !defined(__noclone)
|
||||
#define __noclone /* not needed */
|
||||
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h
|
||||
deleted file mode 100644
|
||||
index 7d89febe4d79..000000000000
|
||||
--- a/include/linux/compiler-gcc3.h
|
||||
+++ /dev/null
|
||||
@@ -1,23 +0,0 @@
|
||||
-#ifndef __LINUX_COMPILER_H
|
||||
-#error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead."
|
||||
-#endif
|
||||
-
|
||||
-#if GCC_VERSION < 30200
|
||||
-# error Sorry, your compiler is too old - please upgrade it.
|
||||
-#endif
|
||||
-
|
||||
-#if GCC_VERSION >= 30300
|
||||
-# define __used __attribute__((__used__))
|
||||
-#else
|
||||
-# define __used __attribute__((__unused__))
|
||||
-#endif
|
||||
-
|
||||
-#if GCC_VERSION >= 30400
|
||||
-#define __must_check __attribute__((warn_unused_result))
|
||||
-#endif
|
||||
-
|
||||
-#ifdef CONFIG_GCOV_KERNEL
|
||||
-# if GCC_VERSION < 30400
|
||||
-# error "GCOV profiling support for gcc versions below 3.4 not included"
|
||||
-# endif /* __GNUC_MINOR__ */
|
||||
-#endif /* CONFIG_GCOV_KERNEL */
|
||||
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
|
||||
deleted file mode 100644
|
||||
index 2507fd2a1eb4..000000000000
|
||||
--- a/include/linux/compiler-gcc4.h
|
||||
+++ /dev/null
|
||||
@@ -1,88 +0,0 @@
|
||||
-#ifndef __LINUX_COMPILER_H
|
||||
-#error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead."
|
||||
-#endif
|
||||
-
|
||||
-/* GCC 4.1.[01] miscompiles __weak */
|
||||
-#ifdef __KERNEL__
|
||||
-# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101
|
||||
-# error Your version of gcc miscompiles the __weak directive
|
||||
-# endif
|
||||
-#endif
|
||||
-
|
||||
-#define __used __attribute__((__used__))
|
||||
-#define __must_check __attribute__((warn_unused_result))
|
||||
-#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
|
||||
-
|
||||
-#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
|
||||
-# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
||||
-#endif
|
||||
-
|
||||
-#if GCC_VERSION >= 40300
|
||||
-/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
- to them will be unlikely. This means a lot of manual unlikely()s
|
||||
- are unnecessary now for any paths leading to the usual suspects
|
||||
- like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
- older compilers]
|
||||
-
|
||||
- Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
- in the preprocessor, but we can live with this because they're unreleased.
|
||||
- Maketime probing would be overkill here.
|
||||
-
|
||||
- gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
- a special section, but I don't see any sense in this right now in
|
||||
- the kernel context */
|
||||
-#define __cold __attribute__((__cold__))
|
||||
-
|
||||
-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
-
|
||||
-#ifndef __CHECKER__
|
||||
-# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
-# define __compiletime_error(message) __attribute__((error(message)))
|
||||
-#endif /* __CHECKER__ */
|
||||
-#endif /* GCC_VERSION >= 40300 */
|
||||
-
|
||||
-#if GCC_VERSION >= 40500
|
||||
-/*
|
||||
- * Mark a position in code as unreachable. This can be used to
|
||||
- * suppress control flow warnings after asm blocks that transfer
|
||||
- * control elsewhere.
|
||||
- *
|
||||
- * Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
- * this in the preprocessor, but we can live with this because they're
|
||||
- * unreleased. Really, we need to have autoconf for the kernel.
|
||||
- */
|
||||
-#define unreachable() __builtin_unreachable()
|
||||
-
|
||||
-/* Mark a function definition as prohibited from being cloned. */
|
||||
-#define __noclone __attribute__((__noclone__))
|
||||
-
|
||||
-#endif /* GCC_VERSION >= 40500 */
|
||||
-
|
||||
-#if GCC_VERSION >= 40600
|
||||
-/*
|
||||
- * Tell the optimizer that something else uses this function or variable.
|
||||
- */
|
||||
-#define __visible __attribute__((externally_visible))
|
||||
-#endif
|
||||
-
|
||||
-/*
|
||||
- * GCC 'asm goto' miscompiles certain code sequences:
|
||||
- *
|
||||
- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
- *
|
||||
- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
- * Fixed in GCC 4.8.2 and later versions.
|
||||
- *
|
||||
- * (asm goto is automatically volatile - the naming reflects this.)
|
||||
- */
|
||||
-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
-
|
||||
-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
-#if GCC_VERSION >= 40400
|
||||
-#define __HAVE_BUILTIN_BSWAP32__
|
||||
-#define __HAVE_BUILTIN_BSWAP64__
|
||||
-#endif
|
||||
-#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600)
|
||||
-#define __HAVE_BUILTIN_BSWAP16__
|
||||
-#endif
|
||||
-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h
|
||||
deleted file mode 100644
|
||||
index cdd1cc202d51..000000000000
|
||||
--- a/include/linux/compiler-gcc5.h
|
||||
+++ /dev/null
|
||||
@@ -1,66 +0,0 @@
|
||||
-#ifndef __LINUX_COMPILER_H
|
||||
-#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
|
||||
-#endif
|
||||
-
|
||||
-#define __used __attribute__((__used__))
|
||||
-#define __must_check __attribute__((warn_unused_result))
|
||||
-#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
|
||||
-
|
||||
-/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
- to them will be unlikely. This means a lot of manual unlikely()s
|
||||
- are unnecessary now for any paths leading to the usual suspects
|
||||
- like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
- older compilers]
|
||||
-
|
||||
- Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
- in the preprocessor, but we can live with this because they're unreleased.
|
||||
- Maketime probing would be overkill here.
|
||||
-
|
||||
- gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
- a special section, but I don't see any sense in this right now in
|
||||
- the kernel context */
|
||||
-#define __cold __attribute__((__cold__))
|
||||
-
|
||||
-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
-
|
||||
-#ifndef __CHECKER__
|
||||
-# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
-# define __compiletime_error(message) __attribute__((error(message)))
|
||||
-#endif /* __CHECKER__ */
|
||||
-
|
||||
-/*
|
||||
- * Mark a position in code as unreachable. This can be used to
|
||||
- * suppress control flow warnings after asm blocks that transfer
|
||||
- * control elsewhere.
|
||||
- *
|
||||
- * Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
- * this in the preprocessor, but we can live with this because they're
|
||||
- * unreleased. Really, we need to have autoconf for the kernel.
|
||||
- */
|
||||
-#define unreachable() __builtin_unreachable()
|
||||
-
|
||||
-/* Mark a function definition as prohibited from being cloned. */
|
||||
-#define __noclone __attribute__((__noclone__))
|
||||
-
|
||||
-/*
|
||||
- * Tell the optimizer that something else uses this function or variable.
|
||||
- */
|
||||
-#define __visible __attribute__((externally_visible))
|
||||
-
|
||||
-/*
|
||||
- * GCC 'asm goto' miscompiles certain code sequences:
|
||||
- *
|
||||
- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
- *
|
||||
- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
- * Fixed in GCC 4.8.2 and later versions.
|
||||
- *
|
||||
- * (asm goto is automatically volatile - the naming reflects this.)
|
||||
- */
|
||||
-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
-
|
||||
-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
-#define __HAVE_BUILTIN_BSWAP32__
|
||||
-#define __HAVE_BUILTIN_BSWAP64__
|
||||
-#define __HAVE_BUILTIN_BSWAP16__
|
||||
-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
|
||||
index 45e921401b06..740c6df3b3a7 100644
|
||||
--- a/include/linux/mod_devicetable.h
|
||||
+++ b/include/linux/mod_devicetable.h
|
||||
@@ -398,6 +398,7 @@ struct virtio_device_id {
|
||||
/*
|
||||
* For Hyper-V devices we use the device guid as the id.
|
||||
*/
|
||||
+#define vmbus_device_id hv_vmbus_device_id
|
||||
struct hv_vmbus_device_id {
|
||||
__u8 guid[16];
|
||||
kernel_ulong_t driver_data; /* Data private to the driver */
|
||||
@@ -548,6 +549,11 @@ struct amba_id {
|
||||
* See documentation of "x86_match_cpu" for details.
|
||||
*/
|
||||
|
||||
+/*
|
||||
+ * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id.
|
||||
+ * Although gcc seems to ignore this error, clang fails without this define.
|
||||
+ */
|
||||
+#define x86cpu_device_id x86_cpu_id
|
||||
struct x86_cpu_id {
|
||||
__u16 vendor;
|
||||
__u16 family;
|
||||
@@ -575,6 +581,7 @@ struct ipack_device_id {
|
||||
#define MEI_CL_MODULE_PREFIX "mei:"
|
||||
#define MEI_CL_NAME_SIZE 32
|
||||
|
||||
+#define mei_device_id mei_cl_device_id
|
||||
struct mei_cl_device_id {
|
||||
char name[MEI_CL_NAME_SIZE];
|
||||
kernel_ulong_t driver_info;
|
||||
@@ -594,6 +601,7 @@ struct mei_cl_device_id {
|
||||
* Identifies a RapidIO device based on both the device/vendor IDs and
|
||||
* the assembly device/vendor IDs.
|
||||
*/
|
||||
+#define rapidio_device_id rio_device_id
|
||||
struct rio_device_id {
|
||||
__u16 did, vid;
|
||||
__u16 asm_did, asm_vid;
|
||||
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
|
||||
index bb1ac9cbe30a..a8bd1ca97e03 100644
|
||||
--- a/kernel/trace/trace_events.c
|
||||
+++ b/kernel/trace/trace_events.c
|
||||
@@ -1546,8 +1546,13 @@ event_create_dir(struct dentry *parent, struct ftrace_event_file *file)
|
||||
trace_create_file("filter", 0644, file->dir, file,
|
||||
&ftrace_event_filter_fops);
|
||||
|
||||
- trace_create_file("trigger", 0644, file->dir, file,
|
||||
- &event_trigger_fops);
|
||||
+ /*
|
||||
+ * Only event directories that can be enabled should have
|
||||
+ * triggers.
|
||||
+ */
|
||||
+ if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
|
||||
+ trace_create_file("trigger", 0644, file->dir, file,
|
||||
+ &event_trigger_fops);
|
||||
|
||||
trace_create_file("format", 0444, file->dir, call,
|
||||
&ftrace_event_format_fops);
|
||||
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
|
||||
index a953d5b196a3..a4f76e3cdfe3 100644
|
||||
--- a/net/batman-adv/routing.c
|
||||
+++ b/net/batman-adv/routing.c
|
||||
@@ -88,6 +88,15 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
|
||||
neigh_node = NULL;
|
||||
|
||||
spin_lock_bh(&orig_node->neigh_list_lock);
|
||||
+ /* curr_router used earlier may not be the current orig_ifinfo->router
|
||||
+ * anymore because it was dereferenced outside of the neigh_list_lock
|
||||
+ * protected region. After the new best neighbor has replace the current
|
||||
+ * best neighbor the reference counter needs to decrease. Consequently,
|
||||
+ * the code needs to ensure the curr_router variable contains a pointer
|
||||
+ * to the replaced best neighbor.
|
||||
+ */
|
||||
+ curr_router = rcu_dereference_protected(orig_ifinfo->router, true);
|
||||
+
|
||||
rcu_assign_pointer(orig_ifinfo->router, neigh_node);
|
||||
spin_unlock_bh(&orig_node->neigh_list_lock);
|
||||
batadv_orig_ifinfo_free_ref(orig_ifinfo);
|
||||
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
|
||||
index 843febd1e519..07efffae6829 100644
|
||||
--- a/net/batman-adv/send.c
|
||||
+++ b/net/batman-adv/send.c
|
||||
@@ -610,6 +610,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
|
||||
|
||||
if (pending) {
|
||||
hlist_del(&forw_packet->list);
|
||||
+ if (!forw_packet->own)
|
||||
+ atomic_inc(&bat_priv->bcast_queue_left);
|
||||
+
|
||||
batadv_forw_packet_free(forw_packet);
|
||||
}
|
||||
}
|
||||
@@ -637,6 +640,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
|
||||
|
||||
if (pending) {
|
||||
hlist_del(&forw_packet->list);
|
||||
+ if (!forw_packet->own)
|
||||
+ atomic_inc(&bat_priv->batman_queue_left);
|
||||
+
|
||||
batadv_forw_packet_free(forw_packet);
|
||||
}
|
||||
}
|
||||
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
|
||||
index f82c267e1886..8532f8bb84c4 100644
|
||||
--- a/net/batman-adv/soft-interface.c
|
||||
+++ b/net/batman-adv/soft-interface.c
|
||||
@@ -356,11 +356,17 @@ void batadv_interface_rx(struct net_device *soft_iface,
|
||||
*/
|
||||
nf_reset(skb);
|
||||
|
||||
+ if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
|
||||
+ goto dropped;
|
||||
+
|
||||
vid = batadv_get_vid(skb, 0);
|
||||
ethhdr = eth_hdr(skb);
|
||||
|
||||
switch (ntohs(ethhdr->h_proto)) {
|
||||
case ETH_P_8021Q:
|
||||
+ if (!pskb_may_pull(skb, VLAN_ETH_HLEN))
|
||||
+ goto dropped;
|
||||
+
|
||||
vhdr = (struct vlan_ethhdr *)skb->data;
|
||||
|
||||
if (vhdr->h_vlan_encapsulated_proto != ethertype)
|
||||
@@ -372,8 +378,6 @@ void batadv_interface_rx(struct net_device *soft_iface,
|
||||
}
|
||||
|
||||
/* skb->dev & skb->pkt_type are set here */
|
||||
- if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
|
||||
- goto dropped;
|
||||
skb->protocol = eth_type_trans(skb, soft_iface);
|
||||
|
||||
/* should not be necessary anymore as we use skb_pull_rcsum()
|
||||
diff --git a/net/netfilter/ipvs/ip_vs_pe_sip.c b/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
index bed5f7042529..bb318e4623a3 100644
|
||||
--- a/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
+++ b/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
@@ -88,7 +88,7 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
|
||||
dptr = skb->data + dataoff;
|
||||
datalen = skb->len - dataoff;
|
||||
|
||||
- if (get_callid(dptr, dataoff, datalen, &matchoff, &matchlen))
|
||||
+ if (get_callid(dptr, 0, datalen, &matchoff, &matchlen))
|
||||
return -EINVAL;
|
||||
|
||||
/* N.B: pe_data is only set on success,
|
416
patch/kernel/cubox-dev/patch-3.14.69-70.patch
Normal file
416
patch/kernel/cubox-dev/patch-3.14.69-70.patch
Normal file
|
@ -0,0 +1,416 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index c6762fdfc967..bc3311a0893b 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 69
|
||||
+SUBLEVEL = 70
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
|
||||
index d1dedc8195ed..eafd120b53f1 100644
|
||||
--- a/arch/arm/mach-omap2/sleep34xx.S
|
||||
+++ b/arch/arm/mach-omap2/sleep34xx.S
|
||||
@@ -203,23 +203,8 @@ save_context_wfi:
|
||||
*/
|
||||
ldr r1, kernel_flush
|
||||
blx r1
|
||||
- /*
|
||||
- * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
|
||||
- * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
|
||||
- * This sequence switches back to ARM. Note that .align may insert a
|
||||
- * nop: bx pc needs to be word-aligned in order to work.
|
||||
- */
|
||||
- THUMB( .thumb )
|
||||
- THUMB( .align )
|
||||
- THUMB( bx pc )
|
||||
- THUMB( nop )
|
||||
- .arm
|
||||
-
|
||||
b omap3_do_wfi
|
||||
-
|
||||
-/*
|
||||
- * Local variables
|
||||
- */
|
||||
+ENDPROC(omap34xx_cpu_suspend)
|
||||
omap3_do_wfi_sram_addr:
|
||||
.word omap3_do_wfi_sram
|
||||
kernel_flush:
|
||||
@@ -364,10 +349,7 @@ exit_nonoff_modes:
|
||||
* ===================================
|
||||
*/
|
||||
ldmfd sp!, {r4 - r11, pc} @ restore regs and return
|
||||
-
|
||||
-/*
|
||||
- * Local variables
|
||||
- */
|
||||
+ENDPROC(omap3_do_wfi)
|
||||
sdrc_power:
|
||||
.word SDRC_POWER_V
|
||||
cm_idlest1_core:
|
||||
diff --git a/crypto/ahash.c b/crypto/ahash.c
|
||||
index 865ef923eda6..7cddee979ddd 100644
|
||||
--- a/crypto/ahash.c
|
||||
+++ b/crypto/ahash.c
|
||||
@@ -64,8 +64,9 @@ static int hash_walk_new_entry(struct crypto_hash_walk *walk)
|
||||
struct scatterlist *sg;
|
||||
|
||||
sg = walk->sg;
|
||||
- walk->pg = sg_page(sg);
|
||||
walk->offset = sg->offset;
|
||||
+ walk->pg = sg_page(walk->sg) + (walk->offset >> PAGE_SHIFT);
|
||||
+ walk->offset = offset_in_page(walk->offset);
|
||||
walk->entrylen = sg->length;
|
||||
|
||||
if (walk->entrylen > walk->total)
|
||||
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
|
||||
index 834847527982..b60cb76aae51 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_crt.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_crt.c
|
||||
@@ -259,8 +259,14 @@ static bool intel_crt_compute_config(struct intel_encoder *encoder,
|
||||
pipe_config->has_pch_encoder = true;
|
||||
|
||||
/* LPT FDI RX only supports 8bpc. */
|
||||
- if (HAS_PCH_LPT(dev))
|
||||
+ if (HAS_PCH_LPT(dev)) {
|
||||
+ if (pipe_config->bw_constrained && pipe_config->pipe_bpp < 24) {
|
||||
+ DRM_DEBUG_KMS("LPT only supports 24bpp\n");
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
pipe_config->pipe_bpp = 24;
|
||||
+ }
|
||||
|
||||
return true;
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
index 0db3e208f02a..b205f76400ad 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
@@ -1600,6 +1600,7 @@ static u32 radeon_get_pll_use_mask(struct drm_crtc *crtc)
|
||||
static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
+ struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_crtc *test_crtc;
|
||||
struct radeon_crtc *test_radeon_crtc;
|
||||
|
||||
@@ -1609,6 +1610,10 @@ static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
|
||||
test_radeon_crtc = to_radeon_crtc(test_crtc);
|
||||
if (test_radeon_crtc->encoder &&
|
||||
ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
|
||||
+ /* PPLL2 is exclusive to UNIPHYA on DCE61 */
|
||||
+ if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
|
||||
+ test_radeon_crtc->pll_id == ATOM_PPLL2)
|
||||
+ continue;
|
||||
/* for DP use the same PLL for all */
|
||||
if (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID)
|
||||
return test_radeon_crtc->pll_id;
|
||||
@@ -1630,6 +1635,7 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
|
||||
{
|
||||
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
||||
struct drm_device *dev = crtc->dev;
|
||||
+ struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_crtc *test_crtc;
|
||||
struct radeon_crtc *test_radeon_crtc;
|
||||
u32 adjusted_clock, test_adjusted_clock;
|
||||
@@ -1645,6 +1651,10 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
|
||||
test_radeon_crtc = to_radeon_crtc(test_crtc);
|
||||
if (test_radeon_crtc->encoder &&
|
||||
!ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
|
||||
+ /* PPLL2 is exclusive to UNIPHYA on DCE61 */
|
||||
+ if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
|
||||
+ test_radeon_crtc->pll_id == ATOM_PPLL2)
|
||||
+ continue;
|
||||
/* check if we are already driving this connector with another crtc */
|
||||
if (test_radeon_crtc->connector == radeon_crtc->connector) {
|
||||
/* if we are, return that pll */
|
||||
diff --git a/drivers/input/misc/max8997_haptic.c b/drivers/input/misc/max8997_haptic.c
|
||||
index 1fea5484941f..07ed458f10fa 100644
|
||||
--- a/drivers/input/misc/max8997_haptic.c
|
||||
+++ b/drivers/input/misc/max8997_haptic.c
|
||||
@@ -245,12 +245,14 @@ static int max8997_haptic_probe(struct platform_device *pdev)
|
||||
struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
|
||||
const struct max8997_platform_data *pdata =
|
||||
dev_get_platdata(iodev->dev);
|
||||
- const struct max8997_haptic_platform_data *haptic_pdata =
|
||||
- pdata->haptic_pdata;
|
||||
+ const struct max8997_haptic_platform_data *haptic_pdata = NULL;
|
||||
struct max8997_haptic *chip;
|
||||
struct input_dev *input_dev;
|
||||
int error;
|
||||
|
||||
+ if (pdata)
|
||||
+ haptic_pdata = pdata->haptic_pdata;
|
||||
+
|
||||
if (!haptic_pdata) {
|
||||
dev_err(&pdev->dev, "no haptic platform data\n");
|
||||
return -EINVAL;
|
||||
diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
|
||||
index 265ce1b752ed..96fe542b4acb 100644
|
||||
--- a/drivers/net/ethernet/atheros/atlx/atl2.c
|
||||
+++ b/drivers/net/ethernet/atheros/atlx/atl2.c
|
||||
@@ -1413,7 +1413,7 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
err = -EIO;
|
||||
|
||||
- netdev->hw_features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX;
|
||||
+ netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX;
|
||||
netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
|
||||
|
||||
/* Init PHY as early as possible due to power saving issue */
|
||||
diff --git a/drivers/pnp/pnpbios/bioscalls.c b/drivers/pnp/pnpbios/bioscalls.c
|
||||
index 769d265b221b..deb7f4bcdb7b 100644
|
||||
--- a/drivers/pnp/pnpbios/bioscalls.c
|
||||
+++ b/drivers/pnp/pnpbios/bioscalls.c
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "pnpbios.h"
|
||||
|
||||
-static struct {
|
||||
+__visible struct {
|
||||
u16 offset;
|
||||
u16 segment;
|
||||
} pnp_bios_callpoint;
|
||||
@@ -41,6 +41,7 @@ asmlinkage void pnp_bios_callfunc(void);
|
||||
|
||||
__asm__(".text \n"
|
||||
__ALIGN_STR "\n"
|
||||
+ ".globl pnp_bios_callfunc\n"
|
||||
"pnp_bios_callfunc:\n"
|
||||
" pushl %edx \n"
|
||||
" pushl %ecx \n"
|
||||
@@ -66,9 +67,9 @@ static struct desc_struct bad_bios_desc = GDT_ENTRY_INIT(0x4092,
|
||||
* after PnP BIOS oopses.
|
||||
*/
|
||||
|
||||
-u32 pnp_bios_fault_esp;
|
||||
-u32 pnp_bios_fault_eip;
|
||||
-u32 pnp_bios_is_utter_crap = 0;
|
||||
+__visible u32 pnp_bios_fault_esp;
|
||||
+__visible u32 pnp_bios_fault_eip;
|
||||
+__visible u32 pnp_bios_is_utter_crap = 0;
|
||||
|
||||
static spinlock_t pnp_bios_lock;
|
||||
|
||||
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
|
||||
index 735d7522a3a9..204659a5f6db 100644
|
||||
--- a/fs/isofs/rock.c
|
||||
+++ b/fs/isofs/rock.c
|
||||
@@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de,
|
||||
int retnamlen = 0;
|
||||
int truncate = 0;
|
||||
int ret = 0;
|
||||
+ char *p;
|
||||
+ int len;
|
||||
|
||||
if (!ISOFS_SB(inode->i_sb)->s_rock)
|
||||
return 0;
|
||||
@@ -267,12 +269,17 @@ repeat:
|
||||
rr->u.NM.flags);
|
||||
break;
|
||||
}
|
||||
- if ((strlen(retname) + rr->len - 5) >= 254) {
|
||||
+ len = rr->len - 5;
|
||||
+ if (retnamlen + len >= 254) {
|
||||
truncate = 1;
|
||||
break;
|
||||
}
|
||||
- strncat(retname, rr->u.NM.name, rr->len - 5);
|
||||
- retnamlen += rr->len - 5;
|
||||
+ p = memchr(rr->u.NM.name, '\0', len);
|
||||
+ if (unlikely(p))
|
||||
+ len = p - rr->u.NM.name;
|
||||
+ memcpy(retname + retnamlen, rr->u.NM.name, len);
|
||||
+ retnamlen += len;
|
||||
+ retname[retnamlen] = '\0';
|
||||
break;
|
||||
case SIG('R', 'E'):
|
||||
kfree(rs.buffer);
|
||||
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
|
||||
index 8d423bc649b9..f876f707fd9e 100644
|
||||
--- a/net/bridge/br_ioctl.c
|
||||
+++ b/net/bridge/br_ioctl.c
|
||||
@@ -21,18 +21,19 @@
|
||||
#include <asm/uaccess.h>
|
||||
#include "br_private.h"
|
||||
|
||||
-/* called with RTNL */
|
||||
static int get_bridge_ifindices(struct net *net, int *indices, int num)
|
||||
{
|
||||
struct net_device *dev;
|
||||
int i = 0;
|
||||
|
||||
- for_each_netdev(net, dev) {
|
||||
+ rcu_read_lock();
|
||||
+ for_each_netdev_rcu(net, dev) {
|
||||
if (i >= num)
|
||||
break;
|
||||
if (dev->priv_flags & IFF_EBRIDGE)
|
||||
indices[i++] = dev->ifindex;
|
||||
}
|
||||
+ rcu_read_unlock();
|
||||
|
||||
return i;
|
||||
}
|
||||
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
|
||||
index 465092f8fb76..ccccc6bfd21c 100644
|
||||
--- a/net/core/rtnetlink.c
|
||||
+++ b/net/core/rtnetlink.c
|
||||
@@ -1010,14 +1010,16 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
|
||||
goto nla_put_failure;
|
||||
|
||||
if (1) {
|
||||
- struct rtnl_link_ifmap map = {
|
||||
- .mem_start = dev->mem_start,
|
||||
- .mem_end = dev->mem_end,
|
||||
- .base_addr = dev->base_addr,
|
||||
- .irq = dev->irq,
|
||||
- .dma = dev->dma,
|
||||
- .port = dev->if_port,
|
||||
- };
|
||||
+ struct rtnl_link_ifmap map;
|
||||
+
|
||||
+ memset(&map, 0, sizeof(map));
|
||||
+ map.mem_start = dev->mem_start;
|
||||
+ map.mem_end = dev->mem_end;
|
||||
+ map.base_addr = dev->base_addr;
|
||||
+ map.irq = dev->irq;
|
||||
+ map.dma = dev->dma;
|
||||
+ map.port = dev->if_port;
|
||||
+
|
||||
if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
|
||||
index ce0cbbfe0f43..f1ffeff02ad9 100644
|
||||
--- a/net/decnet/dn_route.c
|
||||
+++ b/net/decnet/dn_route.c
|
||||
@@ -1030,10 +1030,13 @@ source_ok:
|
||||
if (!fld.daddr) {
|
||||
fld.daddr = fld.saddr;
|
||||
|
||||
- err = -EADDRNOTAVAIL;
|
||||
if (dev_out)
|
||||
dev_put(dev_out);
|
||||
+ err = -EINVAL;
|
||||
dev_out = init_net.loopback_dev;
|
||||
+ if (!dev_out->dn_ptr)
|
||||
+ goto out;
|
||||
+ err = -EADDRNOTAVAIL;
|
||||
dev_hold(dev_out);
|
||||
if (!fld.daddr) {
|
||||
fld.daddr =
|
||||
@@ -1106,6 +1109,8 @@ source_ok:
|
||||
if (dev_out == NULL)
|
||||
goto out;
|
||||
dn_db = rcu_dereference_raw(dev_out->dn_ptr);
|
||||
+ if (!dn_db)
|
||||
+ goto e_inval;
|
||||
/* Possible improvement - check all devices for local addr */
|
||||
if (dn_dev_islocal(dev_out, fld.daddr)) {
|
||||
dev_put(dev_out);
|
||||
@@ -1147,6 +1152,8 @@ select_source:
|
||||
dev_put(dev_out);
|
||||
dev_out = init_net.loopback_dev;
|
||||
dev_hold(dev_out);
|
||||
+ if (!dev_out->dn_ptr)
|
||||
+ goto e_inval;
|
||||
fld.flowidn_oif = dev_out->ifindex;
|
||||
if (res.fi)
|
||||
dn_fib_info_put(res.fi);
|
||||
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
|
||||
index 625615cdac86..ad959a149460 100644
|
||||
--- a/net/ipv4/route.c
|
||||
+++ b/net/ipv4/route.c
|
||||
@@ -1926,6 +1926,18 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
|
||||
*/
|
||||
if (fi && res->prefixlen < 4)
|
||||
fi = NULL;
|
||||
+ } else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
|
||||
+ (orig_oif != dev_out->ifindex)) {
|
||||
+ /* For local routes that require a particular output interface
|
||||
+ * we do not want to cache the result. Caching the result
|
||||
+ * causes incorrect behaviour when there are multiple source
|
||||
+ * addresses on the interface, the end result being that if the
|
||||
+ * intended recipient is waiting on that interface for the
|
||||
+ * packet he won't receive it because it will be delivered on
|
||||
+ * the loopback interface and the IP_PKTINFO ipi_ifindex will
|
||||
+ * be set to the loopback interface as well.
|
||||
+ */
|
||||
+ fi = NULL;
|
||||
}
|
||||
|
||||
fnhe = NULL;
|
||||
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
|
||||
index 0080d2b0a8ae..a76a67d38ec3 100644
|
||||
--- a/net/llc/af_llc.c
|
||||
+++ b/net/llc/af_llc.c
|
||||
@@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb)
|
||||
if (llc->cmsg_flags & LLC_CMSG_PKTINFO) {
|
||||
struct llc_pktinfo info;
|
||||
|
||||
+ memset(&info, 0, sizeof(info));
|
||||
info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex;
|
||||
llc_pdu_decode_dsap(skb, &info.lpi_sap);
|
||||
llc_pdu_decode_da(skb, info.lpi_mac);
|
||||
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
|
||||
index 25d329a18616..c8078af08108 100644
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -3153,6 +3153,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
|
||||
i->ifindex = mreq->mr_ifindex;
|
||||
i->alen = mreq->mr_alen;
|
||||
memcpy(i->addr, mreq->mr_address, i->alen);
|
||||
+ memset(i->addr + i->alen, 0, sizeof(i->addr) - i->alen);
|
||||
i->count = 1;
|
||||
i->next = po->mclist;
|
||||
po->mclist = i;
|
||||
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
|
||||
index 85d232bed87d..e8d3313ea2c9 100644
|
||||
--- a/net/vmw_vsock/af_vsock.c
|
||||
+++ b/net/vmw_vsock/af_vsock.c
|
||||
@@ -1796,27 +1796,8 @@ vsock_stream_recvmsg(struct kiocb *kiocb,
|
||||
else if (sk->sk_shutdown & RCV_SHUTDOWN)
|
||||
err = 0;
|
||||
|
||||
- if (copied > 0) {
|
||||
- /* We only do these additional bookkeeping/notification steps
|
||||
- * if we actually copied something out of the queue pair
|
||||
- * instead of just peeking ahead.
|
||||
- */
|
||||
-
|
||||
- if (!(flags & MSG_PEEK)) {
|
||||
- /* If the other side has shutdown for sending and there
|
||||
- * is nothing more to read, then modify the socket
|
||||
- * state.
|
||||
- */
|
||||
- if (vsk->peer_shutdown & SEND_SHUTDOWN) {
|
||||
- if (vsock_stream_has_data(vsk) <= 0) {
|
||||
- sk->sk_state = SS_UNCONNECTED;
|
||||
- sock_set_flag(sk, SOCK_DONE);
|
||||
- sk->sk_state_change(sk);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ if (copied > 0)
|
||||
err = copied;
|
||||
- }
|
||||
|
||||
out_wait:
|
||||
finish_wait(sk_sleep(sk), &wait);
|
||||
diff --git a/net/x25/x25_facilities.c b/net/x25/x25_facilities.c
|
||||
index 7ecd04c21360..997ff7b2509b 100644
|
||||
--- a/net/x25/x25_facilities.c
|
||||
+++ b/net/x25/x25_facilities.c
|
||||
@@ -277,6 +277,7 @@ int x25_negotiate_facilities(struct sk_buff *skb, struct sock *sk,
|
||||
|
||||
memset(&theirs, 0, sizeof(theirs));
|
||||
memcpy(new, ours, sizeof(*new));
|
||||
+ memset(dte, 0, sizeof(*dte));
|
||||
|
||||
len = x25_parse_facilities(skb, &theirs, dte, &x25->vc_facil_mask);
|
||||
if (len < 0)
|
742
patch/kernel/cubox-dev/patch-3.14.70-71.patch
Normal file
742
patch/kernel/cubox-dev/patch-3.14.70-71.patch
Normal file
|
@ -0,0 +1,742 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index bc3311a0893b..98282e65bb46 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 70
|
||||
+SUBLEVEL = 71
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
|
||||
index c612e37166ad..2036f191c56f 100644
|
||||
--- a/arch/arm/kvm/mmu.c
|
||||
+++ b/arch/arm/kvm/mmu.c
|
||||
@@ -682,11 +682,14 @@ static int stage2_set_pmd_huge(struct kvm *kvm, struct kvm_mmu_memory_cache
|
||||
VM_BUG_ON(pmd_present(*pmd) && pmd_pfn(*pmd) != pmd_pfn(*new_pmd));
|
||||
|
||||
old_pmd = *pmd;
|
||||
- kvm_set_pmd(pmd, *new_pmd);
|
||||
- if (pmd_present(old_pmd))
|
||||
+ if (pmd_present(old_pmd)) {
|
||||
+ pmd_clear(pmd);
|
||||
kvm_tlb_flush_vmid_ipa(kvm, addr);
|
||||
- else
|
||||
+ } else {
|
||||
get_page(virt_to_page(pmd));
|
||||
+ }
|
||||
+
|
||||
+ kvm_set_pmd(pmd, *new_pmd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -723,12 +726,14 @@ static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache,
|
||||
|
||||
/* Create 2nd stage page table mapping - Level 3 */
|
||||
old_pte = *pte;
|
||||
- kvm_set_pte(pte, *new_pte);
|
||||
- if (pte_present(old_pte))
|
||||
+ if (pte_present(old_pte)) {
|
||||
+ kvm_set_pte(pte, __pte(0));
|
||||
kvm_tlb_flush_vmid_ipa(kvm, addr);
|
||||
- else
|
||||
+ } else {
|
||||
get_page(virt_to_page(pte));
|
||||
+ }
|
||||
|
||||
+ kvm_set_pte(pte, *new_pte);
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
|
||||
index 726c969b8a81..f83020db593a 100644
|
||||
--- a/drivers/acpi/osl.c
|
||||
+++ b/drivers/acpi/osl.c
|
||||
@@ -138,7 +138,7 @@ static struct osi_linux {
|
||||
unsigned int enable:1;
|
||||
unsigned int dmi:1;
|
||||
unsigned int cmdline:1;
|
||||
- unsigned int default_disabling:1;
|
||||
+ u8 default_disabling;
|
||||
} osi_linux = {0, 0, 0, 0};
|
||||
|
||||
static u32 acpi_osi_handler(acpi_string interface, u32 supported)
|
||||
@@ -1420,10 +1420,13 @@ void __init acpi_osi_setup(char *str)
|
||||
if (*str == '!') {
|
||||
str++;
|
||||
if (*str == '\0') {
|
||||
- osi_linux.default_disabling = 1;
|
||||
+ /* Do not override acpi_osi=!* */
|
||||
+ if (!osi_linux.default_disabling)
|
||||
+ osi_linux.default_disabling =
|
||||
+ ACPI_DISABLE_ALL_VENDOR_STRINGS;
|
||||
return;
|
||||
} else if (*str == '*') {
|
||||
- acpi_update_interfaces(ACPI_DISABLE_ALL_STRINGS);
|
||||
+ osi_linux.default_disabling = ACPI_DISABLE_ALL_STRINGS;
|
||||
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
||||
osi = &osi_setup_entries[i];
|
||||
osi->enable = false;
|
||||
@@ -1496,10 +1499,13 @@ static void __init acpi_osi_setup_late(void)
|
||||
acpi_status status;
|
||||
|
||||
if (osi_linux.default_disabling) {
|
||||
- status = acpi_update_interfaces(ACPI_DISABLE_ALL_VENDOR_STRINGS);
|
||||
+ status = acpi_update_interfaces(osi_linux.default_disabling);
|
||||
|
||||
if (ACPI_SUCCESS(status))
|
||||
- printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors\n");
|
||||
+ printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors%s\n",
|
||||
+ osi_linux.default_disabling ==
|
||||
+ ACPI_DISABLE_ALL_STRINGS ?
|
||||
+ " and feature groups" : "");
|
||||
}
|
||||
|
||||
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
||||
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
|
||||
index 1ef6990a5c7e..bbe6643e299d 100644
|
||||
--- a/drivers/bluetooth/hci_vhci.c
|
||||
+++ b/drivers/bluetooth/hci_vhci.c
|
||||
@@ -340,6 +340,7 @@ static int vhci_release(struct inode *inode, struct file *file)
|
||||
hci_free_dev(hdev);
|
||||
}
|
||||
|
||||
+ skb_queue_purge(&data->readq);
|
||||
file->private_data = NULL;
|
||||
kfree(data);
|
||||
|
||||
diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c
|
||||
index b512a4ba7569..33308810d1b5 100644
|
||||
--- a/drivers/crypto/caam/jr.c
|
||||
+++ b/drivers/crypto/caam/jr.c
|
||||
@@ -244,7 +244,7 @@ static void caam_jr_dequeue(unsigned long devarg)
|
||||
struct device *caam_jr_alloc(void)
|
||||
{
|
||||
struct caam_drv_private_jr *jrpriv, *min_jrpriv = NULL;
|
||||
- struct device *dev = NULL;
|
||||
+ struct device *dev = ERR_PTR(-ENODEV);
|
||||
int min_tfm_cnt = INT_MAX;
|
||||
int tfm_cnt;
|
||||
|
||||
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
|
||||
index 5ee50f779ef6..0ce45874c14b 100644
|
||||
--- a/drivers/mfd/omap-usb-tll.c
|
||||
+++ b/drivers/mfd/omap-usb-tll.c
|
||||
@@ -269,6 +269,8 @@ static int usbtll_omap_probe(struct platform_device *pdev)
|
||||
|
||||
if (IS_ERR(tll->ch_clk[i]))
|
||||
dev_dbg(dev, "can't get clock : %s\n", clkname);
|
||||
+ else
|
||||
+ clk_prepare(tll->ch_clk[i]);
|
||||
}
|
||||
|
||||
pm_runtime_put_sync(dev);
|
||||
@@ -301,9 +303,12 @@ static int usbtll_omap_remove(struct platform_device *pdev)
|
||||
tll_dev = NULL;
|
||||
spin_unlock(&tll_lock);
|
||||
|
||||
- for (i = 0; i < tll->nch; i++)
|
||||
- if (!IS_ERR(tll->ch_clk[i]))
|
||||
+ for (i = 0; i < tll->nch; i++) {
|
||||
+ if (!IS_ERR(tll->ch_clk[i])) {
|
||||
+ clk_unprepare(tll->ch_clk[i]);
|
||||
clk_put(tll->ch_clk[i]);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
return 0;
|
||||
@@ -421,7 +426,7 @@ int omap_tll_enable(struct usbhs_omap_platform_data *pdata)
|
||||
if (IS_ERR(tll->ch_clk[i]))
|
||||
continue;
|
||||
|
||||
- r = clk_prepare_enable(tll->ch_clk[i]);
|
||||
+ r = clk_enable(tll->ch_clk[i]);
|
||||
if (r) {
|
||||
dev_err(tll_dev,
|
||||
"Error enabling ch %d clock: %d\n", i, r);
|
||||
@@ -449,7 +454,7 @@ int omap_tll_disable(struct usbhs_omap_platform_data *pdata)
|
||||
for (i = 0; i < tll->nch; i++) {
|
||||
if (omap_usb_mode_needs_tll(pdata->port_mode[i])) {
|
||||
if (!IS_ERR(tll->ch_clk[i]))
|
||||
- clk_disable_unprepare(tll->ch_clk[i]);
|
||||
+ clk_disable(tll->ch_clk[i]);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
|
||||
index 92aeb1d2b41b..508380b6a10d 100644
|
||||
--- a/drivers/mmc/card/block.c
|
||||
+++ b/drivers/mmc/card/block.c
|
||||
@@ -2352,11 +2352,12 @@ static const struct mmc_fixup blk_fixups[] =
|
||||
MMC_QUIRK_BLK_NO_CMD23),
|
||||
|
||||
/*
|
||||
- * Some Micron MMC cards needs longer data read timeout than
|
||||
- * indicated in CSD.
|
||||
+ * Some MMC cards need longer data read timeout than indicated in CSD.
|
||||
*/
|
||||
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
|
||||
MMC_QUIRK_LONG_READ_TIME),
|
||||
+ MMC_FIXUP("008GE0", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc,
|
||||
+ MMC_QUIRK_LONG_READ_TIME),
|
||||
|
||||
/*
|
||||
* On these Samsung MoviNAND parts, performing secure erase or
|
||||
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
|
||||
index 4a50b5049c51..1bbe372a9e04 100644
|
||||
--- a/drivers/mmc/core/core.c
|
||||
+++ b/drivers/mmc/core/core.c
|
||||
@@ -822,11 +822,11 @@ void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card)
|
||||
/*
|
||||
* Some cards require longer data read timeout than indicated in CSD.
|
||||
* Address this by setting the read timeout to a "reasonably high"
|
||||
- * value. For the cards tested, 300ms has proven enough. If necessary,
|
||||
+ * value. For the cards tested, 600ms has proven enough. If necessary,
|
||||
* this value can be increased if other problematic cards require this.
|
||||
*/
|
||||
if (mmc_card_long_read_time(card) && data->flags & MMC_DATA_READ) {
|
||||
- data->timeout_ns = 300000000;
|
||||
+ data->timeout_ns = 600000000;
|
||||
data->timeout_clks = 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
|
||||
index 98e9eb0f6643..229407229ecd 100644
|
||||
--- a/drivers/mmc/core/mmc.c
|
||||
+++ b/drivers/mmc/core/mmc.c
|
||||
@@ -267,6 +267,9 @@ static void mmc_select_card_type(struct mmc_card *card)
|
||||
card->ext_csd.card_type = card_type;
|
||||
}
|
||||
|
||||
+/* Minimum partition switch timeout in milliseconds */
|
||||
+#define MMC_MIN_PART_SWITCH_TIME 300
|
||||
+
|
||||
/*
|
||||
* Decode extended CSD.
|
||||
*/
|
||||
@@ -331,6 +334,10 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
|
||||
|
||||
/* EXT_CSD value is in units of 10ms, but we store in ms */
|
||||
card->ext_csd.part_time = 10 * ext_csd[EXT_CSD_PART_SWITCH_TIME];
|
||||
+ /* Some eMMC set the value too low so set a minimum */
|
||||
+ if (card->ext_csd.part_time &&
|
||||
+ card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME)
|
||||
+ card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME;
|
||||
|
||||
/* Sleep / awake timeout in 100ns units */
|
||||
if (sa_shift > 0 && sa_shift <= 0x17)
|
||||
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
|
||||
index 7d3a3f5cb5ba..0a70d12fe33c 100644
|
||||
--- a/drivers/tty/serial/samsung.c
|
||||
+++ b/drivers/tty/serial/samsung.c
|
||||
@@ -734,6 +734,8 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
|
||||
/* check to see if we need to change clock source */
|
||||
|
||||
if (ourport->baudclk != clk) {
|
||||
+ clk_prepare_enable(clk);
|
||||
+
|
||||
s3c24xx_serial_setsource(port, clk_sel);
|
||||
|
||||
if (!IS_ERR(ourport->baudclk)) {
|
||||
@@ -741,8 +743,6 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
|
||||
ourport->baudclk = ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
- clk_prepare_enable(clk);
|
||||
-
|
||||
ourport->baudclk = clk;
|
||||
ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
|
||||
}
|
||||
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
|
||||
index 693091ab726b..abf17b6fe237 100644
|
||||
--- a/drivers/tty/vt/vt.c
|
||||
+++ b/drivers/tty/vt/vt.c
|
||||
@@ -3512,9 +3512,10 @@ static int do_register_con_driver(const struct consw *csw, int first, int last)
|
||||
goto err;
|
||||
|
||||
desc = csw->con_startup();
|
||||
-
|
||||
- if (!desc)
|
||||
+ if (!desc) {
|
||||
+ retval = -ENODEV;
|
||||
goto err;
|
||||
+ }
|
||||
|
||||
retval = -EINVAL;
|
||||
|
||||
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
|
||||
index c0866971db2b..1947ea0e0988 100644
|
||||
--- a/drivers/usb/serial/io_edgeport.c
|
||||
+++ b/drivers/usb/serial/io_edgeport.c
|
||||
@@ -2856,14 +2856,16 @@ static int edge_startup(struct usb_serial *serial)
|
||||
/* not set up yet, so do it now */
|
||||
edge_serial->interrupt_read_urb =
|
||||
usb_alloc_urb(0, GFP_KERNEL);
|
||||
- if (!edge_serial->interrupt_read_urb)
|
||||
- return -ENOMEM;
|
||||
+ if (!edge_serial->interrupt_read_urb) {
|
||||
+ response = -ENOMEM;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
edge_serial->interrupt_in_buffer =
|
||||
kmalloc(buffer_size, GFP_KERNEL);
|
||||
if (!edge_serial->interrupt_in_buffer) {
|
||||
- usb_free_urb(edge_serial->interrupt_read_urb);
|
||||
- return -ENOMEM;
|
||||
+ response = -ENOMEM;
|
||||
+ break;
|
||||
}
|
||||
edge_serial->interrupt_in_endpoint =
|
||||
endpoint->bEndpointAddress;
|
||||
@@ -2891,14 +2893,16 @@ static int edge_startup(struct usb_serial *serial)
|
||||
/* not set up yet, so do it now */
|
||||
edge_serial->read_urb =
|
||||
usb_alloc_urb(0, GFP_KERNEL);
|
||||
- if (!edge_serial->read_urb)
|
||||
- return -ENOMEM;
|
||||
+ if (!edge_serial->read_urb) {
|
||||
+ response = -ENOMEM;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
edge_serial->bulk_in_buffer =
|
||||
kmalloc(buffer_size, GFP_KERNEL);
|
||||
if (!edge_serial->bulk_in_buffer) {
|
||||
- usb_free_urb(edge_serial->read_urb);
|
||||
- return -ENOMEM;
|
||||
+ response = -ENOMEM;
|
||||
+ break;
|
||||
}
|
||||
edge_serial->bulk_in_endpoint =
|
||||
endpoint->bEndpointAddress;
|
||||
@@ -2924,9 +2928,22 @@ static int edge_startup(struct usb_serial *serial)
|
||||
}
|
||||
}
|
||||
|
||||
- if (!interrupt_in_found || !bulk_in_found || !bulk_out_found) {
|
||||
- dev_err(ddev, "Error - the proper endpoints were not found!\n");
|
||||
- return -ENODEV;
|
||||
+ if (response || !interrupt_in_found || !bulk_in_found ||
|
||||
+ !bulk_out_found) {
|
||||
+ if (!response) {
|
||||
+ dev_err(ddev, "expected endpoints not found\n");
|
||||
+ response = -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ usb_free_urb(edge_serial->interrupt_read_urb);
|
||||
+ kfree(edge_serial->interrupt_in_buffer);
|
||||
+
|
||||
+ usb_free_urb(edge_serial->read_urb);
|
||||
+ kfree(edge_serial->bulk_in_buffer);
|
||||
+
|
||||
+ kfree(edge_serial);
|
||||
+
|
||||
+ return response;
|
||||
}
|
||||
|
||||
/* start interrupt read for this edgeport this interrupt will
|
||||
@@ -2949,16 +2966,9 @@ static void edge_disconnect(struct usb_serial *serial)
|
||||
{
|
||||
struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
|
||||
|
||||
- /* stop reads and writes on all ports */
|
||||
- /* free up our endpoint stuff */
|
||||
if (edge_serial->is_epic) {
|
||||
usb_kill_urb(edge_serial->interrupt_read_urb);
|
||||
- usb_free_urb(edge_serial->interrupt_read_urb);
|
||||
- kfree(edge_serial->interrupt_in_buffer);
|
||||
-
|
||||
usb_kill_urb(edge_serial->read_urb);
|
||||
- usb_free_urb(edge_serial->read_urb);
|
||||
- kfree(edge_serial->bulk_in_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2971,6 +2981,16 @@ static void edge_release(struct usb_serial *serial)
|
||||
{
|
||||
struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
|
||||
|
||||
+ if (edge_serial->is_epic) {
|
||||
+ usb_kill_urb(edge_serial->interrupt_read_urb);
|
||||
+ usb_free_urb(edge_serial->interrupt_read_urb);
|
||||
+ kfree(edge_serial->interrupt_in_buffer);
|
||||
+
|
||||
+ usb_kill_urb(edge_serial->read_urb);
|
||||
+ usb_free_urb(edge_serial->read_urb);
|
||||
+ kfree(edge_serial->bulk_in_buffer);
|
||||
+ }
|
||||
+
|
||||
kfree(edge_serial);
|
||||
}
|
||||
|
||||
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
|
||||
index 35297a845a63..118dba285b5d 100644
|
||||
--- a/drivers/usb/serial/keyspan.c
|
||||
+++ b/drivers/usb/serial/keyspan.c
|
||||
@@ -2406,6 +2406,10 @@ static void keyspan_release(struct usb_serial *serial)
|
||||
|
||||
s_priv = usb_get_serial_data(serial);
|
||||
|
||||
+ /* Make sure to unlink the URBs submitted in attach. */
|
||||
+ usb_kill_urb(s_priv->instat_urb);
|
||||
+ usb_kill_urb(s_priv->indat_urb);
|
||||
+
|
||||
usb_free_urb(s_priv->instat_urb);
|
||||
usb_free_urb(s_priv->indat_urb);
|
||||
usb_free_urb(s_priv->glocont_urb);
|
||||
diff --git a/drivers/usb/serial/mxuport.c b/drivers/usb/serial/mxuport.c
|
||||
index 460a40669967..d029b2fc0f75 100644
|
||||
--- a/drivers/usb/serial/mxuport.c
|
||||
+++ b/drivers/usb/serial/mxuport.c
|
||||
@@ -1263,6 +1263,15 @@ static int mxuport_attach(struct usb_serial *serial)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void mxuport_release(struct usb_serial *serial)
|
||||
+{
|
||||
+ struct usb_serial_port *port0 = serial->port[0];
|
||||
+ struct usb_serial_port *port1 = serial->port[1];
|
||||
+
|
||||
+ usb_serial_generic_close(port1);
|
||||
+ usb_serial_generic_close(port0);
|
||||
+}
|
||||
+
|
||||
static int mxuport_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
{
|
||||
struct mxuport_port *mxport = usb_get_serial_port_data(port);
|
||||
@@ -1365,6 +1374,7 @@ static struct usb_serial_driver mxuport_device = {
|
||||
.probe = mxuport_probe,
|
||||
.port_probe = mxuport_port_probe,
|
||||
.attach = mxuport_attach,
|
||||
+ .release = mxuport_release,
|
||||
.calc_num_ports = mxuport_calc_num_ports,
|
||||
.open = mxuport_open,
|
||||
.close = mxuport_close,
|
||||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
||||
index 99c89d7fa1ad..bcb6f5c2bae4 100644
|
||||
--- a/drivers/usb/serial/option.c
|
||||
+++ b/drivers/usb/serial/option.c
|
||||
@@ -375,18 +375,22 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define HAIER_PRODUCT_CE81B 0x10f8
|
||||
#define HAIER_PRODUCT_CE100 0x2009
|
||||
|
||||
-/* Cinterion (formerly Siemens) products */
|
||||
-#define SIEMENS_VENDOR_ID 0x0681
|
||||
-#define CINTERION_VENDOR_ID 0x1e2d
|
||||
+/* Gemalto's Cinterion products (formerly Siemens) */
|
||||
+#define SIEMENS_VENDOR_ID 0x0681
|
||||
+#define CINTERION_VENDOR_ID 0x1e2d
|
||||
+#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
|
||||
#define CINTERION_PRODUCT_HC25_MDM 0x0047
|
||||
-#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
|
||||
+#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
|
||||
#define CINTERION_PRODUCT_HC28_MDM 0x004C
|
||||
-#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
|
||||
#define CINTERION_PRODUCT_EU3_E 0x0051
|
||||
#define CINTERION_PRODUCT_EU3_P 0x0052
|
||||
#define CINTERION_PRODUCT_PH8 0x0053
|
||||
#define CINTERION_PRODUCT_AHXX 0x0055
|
||||
#define CINTERION_PRODUCT_PLXX 0x0060
|
||||
+#define CINTERION_PRODUCT_PH8_2RMNET 0x0082
|
||||
+#define CINTERION_PRODUCT_PH8_AUDIO 0x0083
|
||||
+#define CINTERION_PRODUCT_AHXX_2RMNET 0x0084
|
||||
+#define CINTERION_PRODUCT_AHXX_AUDIO 0x0085
|
||||
|
||||
/* Olivetti products */
|
||||
#define OLIVETTI_VENDOR_ID 0x0b3c
|
||||
@@ -641,6 +645,10 @@ static const struct option_blacklist_info telit_le922_blacklist_usbcfg3 = {
|
||||
.reserved = BIT(1) | BIT(2) | BIT(3),
|
||||
};
|
||||
|
||||
+static const struct option_blacklist_info cinterion_rmnet2_blacklist = {
|
||||
+ .reserved = BIT(4) | BIT(5),
|
||||
+};
|
||||
+
|
||||
static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
|
||||
@@ -1712,7 +1720,13 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX, 0xff) },
|
||||
{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX),
|
||||
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
||||
- { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8_2RMNET, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&cinterion_rmnet2_blacklist },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8_AUDIO, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_AUDIO, 0xff) },
|
||||
+ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
|
||||
{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
|
||||
{ USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
|
||||
{ USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
|
||||
diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
|
||||
index 7725ed261ed6..62e449db24c3 100644
|
||||
--- a/drivers/usb/serial/quatech2.c
|
||||
+++ b/drivers/usb/serial/quatech2.c
|
||||
@@ -141,6 +141,7 @@ static void qt2_release(struct usb_serial *serial)
|
||||
|
||||
serial_priv = usb_get_serial_data(serial);
|
||||
|
||||
+ usb_kill_urb(serial_priv->read_urb);
|
||||
usb_free_urb(serial_priv->read_urb);
|
||||
kfree(serial_priv->read_buffer);
|
||||
kfree(serial_priv);
|
||||
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
|
||||
index d40ae42ba6d4..a65fa2ae094f 100644
|
||||
--- a/fs/btrfs/ioctl.c
|
||||
+++ b/fs/btrfs/ioctl.c
|
||||
@@ -1574,7 +1574,7 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
|
||||
|
||||
src_inode = file_inode(src.file);
|
||||
if (src_inode->i_sb != file_inode(file)->i_sb) {
|
||||
- btrfs_info(BTRFS_I(src_inode)->root->fs_info,
|
||||
+ btrfs_info(BTRFS_I(file_inode(file))->root->fs_info,
|
||||
"Snapshot src from another FS");
|
||||
ret = -EINVAL;
|
||||
} else if (!inode_owner_or_capable(src_inode)) {
|
||||
diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
|
||||
index e87387dbf39f..bbb50be00ef5 100644
|
||||
--- a/fs/cifs/sess.c
|
||||
+++ b/fs/cifs/sess.c
|
||||
@@ -399,19 +399,27 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
|
||||
sec_blob->LmChallengeResponse.MaximumLength = 0;
|
||||
|
||||
sec_blob->NtChallengeResponse.BufferOffset = cpu_to_le32(tmp - pbuffer);
|
||||
- rc = setup_ntlmv2_rsp(ses, nls_cp);
|
||||
- if (rc) {
|
||||
- cifs_dbg(VFS, "Error %d during NTLMSSP authentication\n", rc);
|
||||
- goto setup_ntlmv2_ret;
|
||||
- }
|
||||
- memcpy(tmp, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
|
||||
- ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
- tmp += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
|
||||
+ if (ses->user_name != NULL) {
|
||||
+ rc = setup_ntlmv2_rsp(ses, nls_cp);
|
||||
+ if (rc) {
|
||||
+ cifs_dbg(VFS, "Error %d during NTLMSSP authentication\n", rc);
|
||||
+ goto setup_ntlmv2_ret;
|
||||
+ }
|
||||
+ memcpy(tmp, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
|
||||
+ ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
+ tmp += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
|
||||
|
||||
- sec_blob->NtChallengeResponse.Length =
|
||||
- cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
- sec_blob->NtChallengeResponse.MaximumLength =
|
||||
- cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
+ sec_blob->NtChallengeResponse.Length =
|
||||
+ cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
+ sec_blob->NtChallengeResponse.MaximumLength =
|
||||
+ cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * don't send an NT Response for anonymous access
|
||||
+ */
|
||||
+ sec_blob->NtChallengeResponse.Length = 0;
|
||||
+ sec_blob->NtChallengeResponse.MaximumLength = 0;
|
||||
+ }
|
||||
|
||||
if (ses->domainName == NULL) {
|
||||
sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - pbuffer);
|
||||
diff --git a/fs/cifs/smb2glob.h b/fs/cifs/smb2glob.h
|
||||
index bc0bb9c34f72..0ffa18094335 100644
|
||||
--- a/fs/cifs/smb2glob.h
|
||||
+++ b/fs/cifs/smb2glob.h
|
||||
@@ -44,6 +44,7 @@
|
||||
#define SMB2_OP_DELETE 7
|
||||
#define SMB2_OP_HARDLINK 8
|
||||
#define SMB2_OP_SET_EOF 9
|
||||
+#define SMB2_OP_RMDIR 10
|
||||
|
||||
/* Used when constructing chained read requests. */
|
||||
#define CHAINED_REQUEST 1
|
||||
diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
|
||||
index 215f8d3e3e53..f970c5d5b253 100644
|
||||
--- a/fs/cifs/smb2inode.c
|
||||
+++ b/fs/cifs/smb2inode.c
|
||||
@@ -80,6 +80,10 @@ smb2_open_op_close(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
* SMB2_open() call.
|
||||
*/
|
||||
break;
|
||||
+ case SMB2_OP_RMDIR:
|
||||
+ tmprc = SMB2_rmdir(xid, tcon, fid.persistent_fid,
|
||||
+ fid.volatile_fid);
|
||||
+ break;
|
||||
case SMB2_OP_RENAME:
|
||||
tmprc = SMB2_rename(xid, tcon, fid.persistent_fid,
|
||||
fid.volatile_fid, (__le16 *)data);
|
||||
@@ -191,8 +195,8 @@ smb2_rmdir(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
|
||||
struct cifs_sb_info *cifs_sb)
|
||||
{
|
||||
return smb2_open_op_close(xid, tcon, cifs_sb, name, DELETE, FILE_OPEN,
|
||||
- CREATE_NOT_FILE | CREATE_DELETE_ON_CLOSE,
|
||||
- NULL, SMB2_OP_DELETE);
|
||||
+ CREATE_NOT_FILE,
|
||||
+ NULL, SMB2_OP_RMDIR);
|
||||
}
|
||||
|
||||
int
|
||||
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
|
||||
index ae375dff03da..fc656bc5d6cb 100644
|
||||
--- a/fs/cifs/smb2pdu.c
|
||||
+++ b/fs/cifs/smb2pdu.c
|
||||
@@ -2291,6 +2291,22 @@ SMB2_rename(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
}
|
||||
|
||||
int
|
||||
+SMB2_rmdir(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
+ u64 persistent_fid, u64 volatile_fid)
|
||||
+{
|
||||
+ __u8 delete_pending = 1;
|
||||
+ void *data;
|
||||
+ unsigned int size;
|
||||
+
|
||||
+ data = &delete_pending;
|
||||
+ size = 1; /* sizeof __u8 */
|
||||
+
|
||||
+ return send_set_info(xid, tcon, persistent_fid, volatile_fid,
|
||||
+ current->tgid, FILE_DISPOSITION_INFORMATION, 1, &data,
|
||||
+ &size);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
SMB2_set_hardlink(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
u64 persistent_fid, u64 volatile_fid, __le16 *target_file)
|
||||
{
|
||||
diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h
|
||||
index 0ce48db20a65..8e0d57bf446b 100644
|
||||
--- a/fs/cifs/smb2proto.h
|
||||
+++ b/fs/cifs/smb2proto.h
|
||||
@@ -134,6 +134,8 @@ extern int SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
extern int SMB2_rename(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
u64 persistent_fid, u64 volatile_fid,
|
||||
__le16 *target_file);
|
||||
+extern int SMB2_rmdir(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
+ u64 persistent_fid, u64 volatile_fid);
|
||||
extern int SMB2_set_hardlink(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
u64 persistent_fid, u64 volatile_fid,
|
||||
__le16 *target_file);
|
||||
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
|
||||
index c798ed2fc281..0d3af0a47c6d 100644
|
||||
--- a/kernel/trace/ring_buffer.c
|
||||
+++ b/kernel/trace/ring_buffer.c
|
||||
@@ -463,7 +463,7 @@ struct ring_buffer_per_cpu {
|
||||
raw_spinlock_t reader_lock; /* serialize readers */
|
||||
arch_spinlock_t lock;
|
||||
struct lock_class_key lock_key;
|
||||
- unsigned int nr_pages;
|
||||
+ unsigned long nr_pages;
|
||||
struct list_head *pages;
|
||||
struct buffer_page *head_page; /* read from head */
|
||||
struct buffer_page *tail_page; /* write to tail */
|
||||
@@ -483,7 +483,7 @@ struct ring_buffer_per_cpu {
|
||||
u64 write_stamp;
|
||||
u64 read_stamp;
|
||||
/* ring buffer pages to update, > 0 to add, < 0 to remove */
|
||||
- int nr_pages_to_update;
|
||||
+ long nr_pages_to_update;
|
||||
struct list_head new_pages; /* new pages to add */
|
||||
struct work_struct update_pages_work;
|
||||
struct completion update_done;
|
||||
@@ -1120,10 +1120,10 @@ static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int __rb_allocate_pages(int nr_pages, struct list_head *pages, int cpu)
|
||||
+static int __rb_allocate_pages(long nr_pages, struct list_head *pages, int cpu)
|
||||
{
|
||||
- int i;
|
||||
struct buffer_page *bpage, *tmp;
|
||||
+ long i;
|
||||
|
||||
for (i = 0; i < nr_pages; i++) {
|
||||
struct page *page;
|
||||
@@ -1160,7 +1160,7 @@ free_pages:
|
||||
}
|
||||
|
||||
static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
|
||||
- unsigned nr_pages)
|
||||
+ unsigned long nr_pages)
|
||||
{
|
||||
LIST_HEAD(pages);
|
||||
|
||||
@@ -1185,7 +1185,7 @@ static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
|
||||
}
|
||||
|
||||
static struct ring_buffer_per_cpu *
|
||||
-rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
|
||||
+rb_allocate_cpu_buffer(struct ring_buffer *buffer, long nr_pages, int cpu)
|
||||
{
|
||||
struct ring_buffer_per_cpu *cpu_buffer;
|
||||
struct buffer_page *bpage;
|
||||
@@ -1284,8 +1284,9 @@ struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
|
||||
struct lock_class_key *key)
|
||||
{
|
||||
struct ring_buffer *buffer;
|
||||
+ long nr_pages;
|
||||
int bsize;
|
||||
- int cpu, nr_pages;
|
||||
+ int cpu;
|
||||
|
||||
/* keep it in its own cache line */
|
||||
buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()),
|
||||
@@ -1408,12 +1409,12 @@ static inline unsigned long rb_page_write(struct buffer_page *bpage)
|
||||
}
|
||||
|
||||
static int
|
||||
-rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages)
|
||||
+rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned long nr_pages)
|
||||
{
|
||||
struct list_head *tail_page, *to_remove, *next_page;
|
||||
struct buffer_page *to_remove_page, *tmp_iter_page;
|
||||
struct buffer_page *last_page, *first_page;
|
||||
- unsigned int nr_removed;
|
||||
+ unsigned long nr_removed;
|
||||
unsigned long head_bit;
|
||||
int page_entries;
|
||||
|
||||
@@ -1630,7 +1631,7 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
|
||||
int cpu_id)
|
||||
{
|
||||
struct ring_buffer_per_cpu *cpu_buffer;
|
||||
- unsigned nr_pages;
|
||||
+ unsigned long nr_pages;
|
||||
int cpu, err = 0;
|
||||
|
||||
/*
|
||||
@@ -1644,14 +1645,13 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
|
||||
!cpumask_test_cpu(cpu_id, buffer->cpumask))
|
||||
return size;
|
||||
|
||||
- size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
|
||||
- size *= BUF_PAGE_SIZE;
|
||||
+ nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
|
||||
|
||||
/* we need a minimum of two pages */
|
||||
- if (size < BUF_PAGE_SIZE * 2)
|
||||
- size = BUF_PAGE_SIZE * 2;
|
||||
+ if (nr_pages < 2)
|
||||
+ nr_pages = 2;
|
||||
|
||||
- nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
|
||||
+ size = nr_pages * BUF_PAGE_SIZE;
|
||||
|
||||
/*
|
||||
* Don't succeed if resizing is disabled, as a reader might be
|
||||
@@ -4609,8 +4609,9 @@ static int rb_cpu_notify(struct notifier_block *self,
|
||||
struct ring_buffer *buffer =
|
||||
container_of(self, struct ring_buffer, cpu_notify);
|
||||
long cpu = (long)hcpu;
|
||||
- int cpu_i, nr_pages_same;
|
||||
- unsigned int nr_pages;
|
||||
+ long nr_pages_same;
|
||||
+ int cpu_i;
|
||||
+ unsigned long nr_pages;
|
||||
|
||||
switch (action) {
|
||||
case CPU_UP_PREPARE:
|
521
patch/kernel/cubox-dev/patch-3.14.71-72.patch
Normal file
521
patch/kernel/cubox-dev/patch-3.14.71-72.patch
Normal file
|
@ -0,0 +1,521 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index 98282e65bb46..6155aaf6342a 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 71
|
||||
+SUBLEVEL = 72
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/mips/ath79/early_printk.c b/arch/mips/ath79/early_printk.c
|
||||
index b955fafc58ba..d1adc59af5bf 100644
|
||||
--- a/arch/mips/ath79/early_printk.c
|
||||
+++ b/arch/mips/ath79/early_printk.c
|
||||
@@ -31,13 +31,15 @@ static inline void prom_putchar_wait(void __iomem *reg, u32 mask, u32 val)
|
||||
} while (1);
|
||||
}
|
||||
|
||||
+#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
|
||||
+
|
||||
static void prom_putchar_ar71xx(unsigned char ch)
|
||||
{
|
||||
void __iomem *base = (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE));
|
||||
|
||||
- prom_putchar_wait(base + UART_LSR * 4, UART_LSR_THRE, UART_LSR_THRE);
|
||||
+ prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY);
|
||||
__raw_writel(ch, base + UART_TX * 4);
|
||||
- prom_putchar_wait(base + UART_LSR * 4, UART_LSR_THRE, UART_LSR_THRE);
|
||||
+ prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY);
|
||||
}
|
||||
|
||||
static void prom_putchar_ar933x(unsigned char ch)
|
||||
diff --git a/arch/mips/include/uapi/asm/siginfo.h b/arch/mips/include/uapi/asm/siginfo.h
|
||||
index e81174432bab..6e1218ae916c 100644
|
||||
--- a/arch/mips/include/uapi/asm/siginfo.h
|
||||
+++ b/arch/mips/include/uapi/asm/siginfo.h
|
||||
@@ -48,13 +48,13 @@ typedef struct siginfo {
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
- pid_t _pid; /* sender's pid */
|
||||
+ __kernel_pid_t _pid; /* sender's pid */
|
||||
__ARCH_SI_UID_T _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
- timer_t _tid; /* timer id */
|
||||
+ __kernel_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
|
||||
sigval_t _sigval; /* same as below */
|
||||
@@ -63,26 +63,26 @@ typedef struct siginfo {
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
- pid_t _pid; /* sender's pid */
|
||||
+ __kernel_pid_t _pid; /* sender's pid */
|
||||
__ARCH_SI_UID_T _uid; /* sender's uid */
|
||||
sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
- pid_t _pid; /* which child */
|
||||
+ __kernel_pid_t _pid; /* which child */
|
||||
__ARCH_SI_UID_T _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
- clock_t _utime;
|
||||
- clock_t _stime;
|
||||
+ __kernel_clock_t _utime;
|
||||
+ __kernel_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* IRIX SIGCHLD */
|
||||
struct {
|
||||
- pid_t _pid; /* which child */
|
||||
- clock_t _utime;
|
||||
+ __kernel_pid_t _pid; /* which child */
|
||||
+ __kernel_clock_t _utime;
|
||||
int _status; /* exit code */
|
||||
- clock_t _stime;
|
||||
+ __kernel_clock_t _stime;
|
||||
} _irix_sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
|
||||
index 0b4e2e38294b..68af633cba76 100644
|
||||
--- a/arch/mips/math-emu/cp1emu.c
|
||||
+++ b/arch/mips/math-emu/cp1emu.c
|
||||
@@ -676,9 +676,11 @@ static int isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn,
|
||||
case spec_op:
|
||||
switch (insn.r_format.func) {
|
||||
case jalr_op:
|
||||
- regs->regs[insn.r_format.rd] =
|
||||
- regs->cp0_epc + dec_insn.pc_inc +
|
||||
- dec_insn.next_pc_inc;
|
||||
+ if (insn.r_format.rd != 0) {
|
||||
+ regs->regs[insn.r_format.rd] =
|
||||
+ regs->cp0_epc + dec_insn.pc_inc +
|
||||
+ dec_insn.next_pc_inc;
|
||||
+ }
|
||||
/* Fall through */
|
||||
case jr_op:
|
||||
*contpc = regs->regs[insn.r_format.rs];
|
||||
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
|
||||
index 5193116eadc0..2c35b11a14c0 100644
|
||||
--- a/arch/powerpc/kernel/exceptions-64s.S
|
||||
+++ b/arch/powerpc/kernel/exceptions-64s.S
|
||||
@@ -946,11 +946,6 @@ hv_facility_unavailable_relon_trampoline:
|
||||
#endif
|
||||
STD_RELON_EXCEPTION_PSERIES(0x5700, 0x1700, altivec_assist)
|
||||
|
||||
- /* Other future vectors */
|
||||
- .align 7
|
||||
- .globl __end_interrupts
|
||||
-__end_interrupts:
|
||||
-
|
||||
.align 7
|
||||
system_call_entry_direct:
|
||||
#if defined(CONFIG_RELOCATABLE)
|
||||
@@ -1304,6 +1299,17 @@ __end_handlers:
|
||||
STD_RELON_EXCEPTION_PSERIES_OOL(0xf60, facility_unavailable)
|
||||
STD_RELON_EXCEPTION_HV_OOL(0xf80, hv_facility_unavailable)
|
||||
|
||||
+ /*
|
||||
+ * The __end_interrupts marker must be past the out-of-line (OOL)
|
||||
+ * handlers, so that they are copied to real address 0x100 when running
|
||||
+ * a relocatable kernel. This ensures they can be reached from the short
|
||||
+ * trampoline handlers (like 0x4f00, 0x4f20, etc.) which branch
|
||||
+ * directly, without using LOAD_HANDLER().
|
||||
+ */
|
||||
+ .align 7
|
||||
+ .globl __end_interrupts
|
||||
+__end_interrupts:
|
||||
+
|
||||
#if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
|
||||
/*
|
||||
* Data area reserved for FWNMI option.
|
||||
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
|
||||
index 1adc039fe74d..7a8f94d834f9 100644
|
||||
--- a/drivers/cpuidle/cpuidle.c
|
||||
+++ b/drivers/cpuidle/cpuidle.c
|
||||
@@ -313,6 +313,8 @@ static void __cpuidle_unregister_device(struct cpuidle_device *dev)
|
||||
list_del(&dev->device_list);
|
||||
per_cpu(cpuidle_devices, dev->cpu) = NULL;
|
||||
module_put(drv->owner);
|
||||
+
|
||||
+ dev->registered = 0;
|
||||
}
|
||||
|
||||
static void __cpuidle_device_init(struct cpuidle_device *dev)
|
||||
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
|
||||
index 98a03639b413..68d54c7d01bf 100644
|
||||
--- a/drivers/gpu/drm/drm_fb_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_fb_helper.c
|
||||
@@ -1347,7 +1347,6 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
|
||||
int n, int width, int height)
|
||||
{
|
||||
int c, o;
|
||||
- struct drm_device *dev = fb_helper->dev;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_helper_funcs *connector_funcs;
|
||||
struct drm_encoder *encoder;
|
||||
@@ -1366,7 +1365,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
|
||||
if (modes[n] == NULL)
|
||||
return best_score;
|
||||
|
||||
- crtcs = kzalloc(dev->mode_config.num_connector *
|
||||
+ crtcs = kzalloc(fb_helper->connector_count *
|
||||
sizeof(struct drm_fb_helper_crtc *), GFP_KERNEL);
|
||||
if (!crtcs)
|
||||
return best_score;
|
||||
@@ -1412,7 +1411,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
|
||||
if (score > best_score) {
|
||||
best_score = score;
|
||||
memcpy(best_crtcs, crtcs,
|
||||
- dev->mode_config.num_connector *
|
||||
+ fb_helper->connector_count *
|
||||
sizeof(struct drm_fb_helper_crtc *));
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c b/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c
|
||||
index 489ffd2c66e5..a3d37e4a84ae 100644
|
||||
--- a/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c
|
||||
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c
|
||||
@@ -85,7 +85,7 @@ static const char *const dsi_errors[] = {
|
||||
"RX Prot Violation",
|
||||
"HS Generic Write FIFO Full",
|
||||
"LP Generic Write FIFO Full",
|
||||
- "Generic Read Data Avail"
|
||||
+ "Generic Read Data Avail",
|
||||
"Special Packet Sent",
|
||||
"Tearing Effect",
|
||||
};
|
||||
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
|
||||
index 772835938a52..46631c62e9a4 100644
|
||||
--- a/drivers/input/misc/uinput.c
|
||||
+++ b/drivers/input/misc/uinput.c
|
||||
@@ -845,9 +845,15 @@ static long uinput_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
+
|
||||
+#define UI_SET_PHYS_COMPAT _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t)
|
||||
+
|
||||
static long uinput_compat_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
+ if (cmd == UI_SET_PHYS_COMPAT)
|
||||
+ cmd = UI_SET_PHYS;
|
||||
+
|
||||
return uinput_ioctl_handler(file, cmd, arg, compat_ptr(arg));
|
||||
}
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/ath/ath5k/led.c b/drivers/net/wireless/ath/ath5k/led.c
|
||||
index f77ef36acf87..61879b1f7083 100644
|
||||
--- a/drivers/net/wireless/ath/ath5k/led.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/led.c
|
||||
@@ -77,7 +77,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_led_devices) = {
|
||||
/* HP Compaq CQ60-206US (ddreggors@jumptv.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137a), ATH_LED(3, 1) },
|
||||
/* HP Compaq C700 (nitrousnrg@gmail.com) */
|
||||
- { ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) },
|
||||
+ { ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 0) },
|
||||
/* LiteOn AR5BXB63 (magooz@salug.it) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_ATHEROS, 0x3067), ATH_LED(3, 0) },
|
||||
/* IBM-specific AR5212 (all others) */
|
||||
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
|
||||
index 93bb384eb001..0484de7847e9 100644
|
||||
--- a/drivers/net/wireless/rtlwifi/base.c
|
||||
+++ b/drivers/net/wireless/rtlwifi/base.c
|
||||
@@ -1401,9 +1401,9 @@ void rtl_watchdog_wq_callback(void *data)
|
||||
if (((rtlpriv->link_info.num_rx_inperiod +
|
||||
rtlpriv->link_info.num_tx_inperiod) > 8) ||
|
||||
(rtlpriv->link_info.num_rx_inperiod > 2))
|
||||
- rtlpriv->enter_ps = true;
|
||||
- else
|
||||
rtlpriv->enter_ps = false;
|
||||
+ else
|
||||
+ rtlpriv->enter_ps = true;
|
||||
|
||||
/* LeisurePS only work in infra mode. */
|
||||
schedule_work(&rtlpriv->works.lps_change_work);
|
||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||
index 146b13752572..58e81e0389bb 100644
|
||||
--- a/drivers/pci/probe.c
|
||||
+++ b/drivers/pci/probe.c
|
||||
@@ -175,9 +175,6 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
||||
struct pci_bus_region region, inverted_region;
|
||||
bool bar_too_big = false, bar_disabled = false;
|
||||
|
||||
- if (dev->non_compliant_bars)
|
||||
- return 0;
|
||||
-
|
||||
mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
|
||||
|
||||
/* No printks while decoding is disabled! */
|
||||
@@ -319,6 +316,9 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
|
||||
{
|
||||
unsigned int pos, reg;
|
||||
|
||||
+ if (dev->non_compliant_bars)
|
||||
+ return;
|
||||
+
|
||||
for (pos = 0; pos < howmany; pos++) {
|
||||
struct resource *res = &dev->resource[pos];
|
||||
reg = PCI_BASE_ADDRESS_0 + (pos << 2);
|
||||
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
|
||||
index 6b32ddcefc11..ce177a50ec05 100644
|
||||
--- a/drivers/scsi/aacraid/commsup.c
|
||||
+++ b/drivers/scsi/aacraid/commsup.c
|
||||
@@ -590,10 +590,10 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
|
||||
}
|
||||
return -EFAULT;
|
||||
}
|
||||
- /* We used to udelay() here but that absorbed
|
||||
- * a CPU when a timeout occured. Not very
|
||||
- * useful. */
|
||||
- cpu_relax();
|
||||
+ /*
|
||||
+ * Allow other processes / CPUS to use core
|
||||
+ */
|
||||
+ schedule();
|
||||
}
|
||||
} else if (down_interruptible(&fibptr->event_wait)) {
|
||||
/* Do nothing ... satisfy
|
||||
@@ -1921,6 +1921,10 @@ int aac_command_thread(void *data)
|
||||
if (difference <= 0)
|
||||
difference = 1;
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ if (kthread_should_stop())
|
||||
+ break;
|
||||
+
|
||||
schedule_timeout(difference);
|
||||
|
||||
if (kthread_should_stop())
|
||||
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
|
||||
index 082b23be5409..68b7810139e8 100644
|
||||
--- a/drivers/xen/events/events_base.c
|
||||
+++ b/drivers/xen/events/events_base.c
|
||||
@@ -506,7 +506,8 @@ static void eoi_pirq(struct irq_data *data)
|
||||
if (!VALID_EVTCHN(evtchn))
|
||||
return;
|
||||
|
||||
- if (unlikely(irqd_is_setaffinity_pending(data))) {
|
||||
+ if (unlikely(irqd_is_setaffinity_pending(data)) &&
|
||||
+ likely(!irqd_irq_disabled(data))) {
|
||||
int masked = test_and_set_mask(evtchn);
|
||||
|
||||
clear_evtchn(evtchn);
|
||||
@@ -1408,7 +1409,8 @@ static void ack_dynirq(struct irq_data *data)
|
||||
if (!VALID_EVTCHN(evtchn))
|
||||
return;
|
||||
|
||||
- if (unlikely(irqd_is_setaffinity_pending(data))) {
|
||||
+ if (unlikely(irqd_is_setaffinity_pending(data)) &&
|
||||
+ likely(!irqd_irq_disabled(data))) {
|
||||
int masked = test_and_set_mask(evtchn);
|
||||
|
||||
clear_evtchn(evtchn);
|
||||
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
|
||||
index a8d1a64d8cb0..4920cbdd47cc 100644
|
||||
--- a/fs/ext4/ialloc.c
|
||||
+++ b/fs/ext4/ialloc.c
|
||||
@@ -1097,11 +1097,13 @@ struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino)
|
||||
goto iget_failed;
|
||||
|
||||
/*
|
||||
- * If the orphans has i_nlinks > 0 then it should be able to be
|
||||
- * truncated, otherwise it won't be removed from the orphan list
|
||||
- * during processing and an infinite loop will result.
|
||||
+ * If the orphans has i_nlinks > 0 then it should be able to
|
||||
+ * be truncated, otherwise it won't be removed from the orphan
|
||||
+ * list during processing and an infinite loop will result.
|
||||
+ * Similarly, it must not be a bad inode.
|
||||
*/
|
||||
- if (inode->i_nlink && !ext4_can_truncate(inode))
|
||||
+ if ((inode->i_nlink && !ext4_can_truncate(inode)) ||
|
||||
+ is_bad_inode(inode))
|
||||
goto bad_orphan;
|
||||
|
||||
if (NEXT_ORPHAN(inode) > max_ino)
|
||||
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
|
||||
index c4a5e4df8ca3..4a79ce1ecaa1 100644
|
||||
--- a/fs/ext4/mballoc.c
|
||||
+++ b/fs/ext4/mballoc.c
|
||||
@@ -1236,6 +1236,7 @@ static void ext4_mb_unload_buddy(struct ext4_buddy *e4b)
|
||||
static int mb_find_order_for_block(struct ext4_buddy *e4b, int block)
|
||||
{
|
||||
int order = 1;
|
||||
+ int bb_incr = 1 << (e4b->bd_blkbits - 1);
|
||||
void *bb;
|
||||
|
||||
BUG_ON(e4b->bd_bitmap == e4b->bd_buddy);
|
||||
@@ -1248,7 +1249,8 @@ static int mb_find_order_for_block(struct ext4_buddy *e4b, int block)
|
||||
/* this block is part of buddy of order 'order' */
|
||||
return order;
|
||||
}
|
||||
- bb += 1 << (e4b->bd_blkbits - order);
|
||||
+ bb += bb_incr;
|
||||
+ bb_incr >>= 1;
|
||||
order++;
|
||||
}
|
||||
return 0;
|
||||
@@ -2535,7 +2537,7 @@ int ext4_mb_init(struct super_block *sb)
|
||||
{
|
||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
unsigned i, j;
|
||||
- unsigned offset;
|
||||
+ unsigned offset, offset_incr;
|
||||
unsigned max;
|
||||
int ret;
|
||||
|
||||
@@ -2564,11 +2566,13 @@ int ext4_mb_init(struct super_block *sb)
|
||||
|
||||
i = 1;
|
||||
offset = 0;
|
||||
+ offset_incr = 1 << (sb->s_blocksize_bits - 1);
|
||||
max = sb->s_blocksize << 2;
|
||||
do {
|
||||
sbi->s_mb_offsets[i] = offset;
|
||||
sbi->s_mb_maxs[i] = max;
|
||||
- offset += 1 << (sb->s_blocksize_bits - i);
|
||||
+ offset += offset_incr;
|
||||
+ offset_incr = offset_incr >> 1;
|
||||
max = max >> 1;
|
||||
i++;
|
||||
} while (i <= sb->s_blocksize_bits + 1);
|
||||
diff --git a/fs/pipe.c b/fs/pipe.c
|
||||
index 46f1ab264a4c..a03801186366 100644
|
||||
--- a/fs/pipe.c
|
||||
+++ b/fs/pipe.c
|
||||
@@ -401,6 +401,7 @@ pipe_read(struct kiocb *iocb, const struct iovec *_iov,
|
||||
void *addr;
|
||||
size_t chars = buf->len, remaining;
|
||||
int error, atomic;
|
||||
+ int offset;
|
||||
|
||||
if (chars > total_len)
|
||||
chars = total_len;
|
||||
@@ -414,9 +415,10 @@ pipe_read(struct kiocb *iocb, const struct iovec *_iov,
|
||||
|
||||
atomic = !iov_fault_in_pages_write(iov, chars);
|
||||
remaining = chars;
|
||||
+ offset = buf->offset;
|
||||
redo:
|
||||
addr = ops->map(pipe, buf, atomic);
|
||||
- error = pipe_iov_copy_to_user(iov, addr, &buf->offset,
|
||||
+ error = pipe_iov_copy_to_user(iov, addr, &offset,
|
||||
&remaining, atomic);
|
||||
ops->unmap(pipe, buf, addr);
|
||||
if (unlikely(error)) {
|
||||
@@ -432,6 +434,7 @@ redo:
|
||||
break;
|
||||
}
|
||||
ret += chars;
|
||||
+ buf->offset += chars;
|
||||
buf->len -= chars;
|
||||
|
||||
/* Was it a packet buffer? Clean up and exit */
|
||||
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
|
||||
index 5d90b8db0ac7..fb8579d35cd4 100644
|
||||
--- a/fs/xfs/xfs_inode.c
|
||||
+++ b/fs/xfs/xfs_inode.c
|
||||
@@ -2923,13 +2923,14 @@ xfs_iflush_cluster(
|
||||
* We need to check under the i_flags_lock for a valid inode
|
||||
* here. Skip it if it is not valid or the wrong inode.
|
||||
*/
|
||||
- spin_lock(&ip->i_flags_lock);
|
||||
- if (!ip->i_ino ||
|
||||
+ spin_lock(&iq->i_flags_lock);
|
||||
+ if (!iq->i_ino ||
|
||||
+ __xfs_iflags_test(iq, XFS_ISTALE) ||
|
||||
(XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) != first_index) {
|
||||
- spin_unlock(&ip->i_flags_lock);
|
||||
+ spin_unlock(&iq->i_flags_lock);
|
||||
continue;
|
||||
}
|
||||
- spin_unlock(&ip->i_flags_lock);
|
||||
+ spin_unlock(&iq->i_flags_lock);
|
||||
|
||||
/*
|
||||
* Do an un-protected check to see if the inode is dirty and
|
||||
@@ -3045,7 +3046,7 @@ xfs_iflush(
|
||||
struct xfs_buf **bpp)
|
||||
{
|
||||
struct xfs_mount *mp = ip->i_mount;
|
||||
- struct xfs_buf *bp;
|
||||
+ struct xfs_buf *bp = NULL;
|
||||
struct xfs_dinode *dip;
|
||||
int error;
|
||||
|
||||
@@ -3087,14 +3088,22 @@ xfs_iflush(
|
||||
}
|
||||
|
||||
/*
|
||||
- * Get the buffer containing the on-disk inode.
|
||||
+ * Get the buffer containing the on-disk inode. We are doing a try-lock
|
||||
+ * operation here, so we may get an EAGAIN error. In that case, we
|
||||
+ * simply want to return with the inode still dirty.
|
||||
+ *
|
||||
+ * If we get any other error, we effectively have a corruption situation
|
||||
+ * and we cannot flush the inode, so we treat it the same as failing
|
||||
+ * xfs_iflush_int().
|
||||
*/
|
||||
error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &dip, &bp, XBF_TRYLOCK,
|
||||
0);
|
||||
- if (error || !bp) {
|
||||
+ if (error == -EAGAIN) {
|
||||
xfs_ifunlock(ip);
|
||||
return error;
|
||||
}
|
||||
+ if (error)
|
||||
+ goto corrupt_out;
|
||||
|
||||
/*
|
||||
* First flush out the inode that xfs_iflush was called with.
|
||||
@@ -3122,7 +3131,8 @@ xfs_iflush(
|
||||
return 0;
|
||||
|
||||
corrupt_out:
|
||||
- xfs_buf_relse(bp);
|
||||
+ if (bp)
|
||||
+ xfs_buf_relse(bp);
|
||||
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
|
||||
cluster_corrupt_out:
|
||||
error = XFS_ERROR(EFSCORRUPTED);
|
||||
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
|
||||
index 1cbfc16d0b37..1ba298a9e15d 100644
|
||||
--- a/lib/dma-debug.c
|
||||
+++ b/lib/dma-debug.c
|
||||
@@ -646,9 +646,9 @@ static struct dma_debug_entry *dma_entry_alloc(void)
|
||||
spin_lock_irqsave(&free_entries_lock, flags);
|
||||
|
||||
if (list_empty(&free_entries)) {
|
||||
- pr_err("DMA-API: debugging out of memory - disabling\n");
|
||||
global_disable = true;
|
||||
spin_unlock_irqrestore(&free_entries_lock, flags);
|
||||
+ pr_err("DMA-API: debugging out of memory - disabling\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
|
||||
index 0f73f4507746..ae9b1fe46f8f 100644
|
||||
--- a/net/sunrpc/auth_gss/svcauth_gss.c
|
||||
+++ b/net/sunrpc/auth_gss/svcauth_gss.c
|
||||
@@ -855,8 +855,8 @@ unwrap_integ_data(struct svc_rqst *rqstp, struct xdr_buf *buf, u32 seq, struct g
|
||||
goto out;
|
||||
if (svc_getnl(&buf->head[0]) != seq)
|
||||
goto out;
|
||||
- /* trim off the mic at the end before returning */
|
||||
- xdr_buf_trim(buf, mic.len + 4);
|
||||
+ /* trim off the mic and padding at the end before returning */
|
||||
+ xdr_buf_trim(buf, round_up_to_quad(mic.len) + 4);
|
||||
stat = 0;
|
||||
out:
|
||||
kfree(mic.data);
|
2837
patch/kernel/cubox-dev/patch-3.14.72-73.patch
Normal file
2837
patch/kernel/cubox-dev/patch-3.14.72-73.patch
Normal file
File diff suppressed because it is too large
Load diff
1456
patch/kernel/cubox-dev/patch-3.14.73-74.patch
Normal file
1456
patch/kernel/cubox-dev/patch-3.14.73-74.patch
Normal file
File diff suppressed because it is too large
Load diff
553
patch/kernel/cubox-dev/patch-3.14.74-75.patch
Normal file
553
patch/kernel/cubox-dev/patch-3.14.74-75.patch
Normal file
|
@ -0,0 +1,553 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index d2fb4dae6ecb..9e6e6131e986 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 74
|
||||
+SUBLEVEL = 75
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
|
||||
index fb98769b6a98..3e349aefdb9e 100644
|
||||
--- a/arch/arc/kernel/stacktrace.c
|
||||
+++ b/arch/arc/kernel/stacktrace.c
|
||||
@@ -131,7 +131,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
||||
* prelogue is setup (callee regs saved and then fp set and not other
|
||||
* way around
|
||||
*/
|
||||
- pr_warn("CONFIG_ARC_DW2_UNWIND needs to be enabled\n");
|
||||
+ pr_warn_once("CONFIG_ARC_DW2_UNWIND needs to be enabled\n");
|
||||
return 0;
|
||||
|
||||
#endif
|
||||
diff --git a/arch/arc/mm/tlbex.S b/arch/arc/mm/tlbex.S
|
||||
index 79bfc81358c9..0af8fc213546 100644
|
||||
--- a/arch/arc/mm/tlbex.S
|
||||
+++ b/arch/arc/mm/tlbex.S
|
||||
@@ -89,7 +89,7 @@ ex_saved_reg1:
|
||||
#ifdef CONFIG_SMP
|
||||
sr r0, [ARC_REG_SCRATCH_DATA0] ; freeup r0 to code with
|
||||
GET_CPU_ID r0 ; get to per cpu scratch mem,
|
||||
- lsl r0, r0, L1_CACHE_SHIFT ; cache line wide per cpu
|
||||
+ asl r0, r0, L1_CACHE_SHIFT ; cache line wide per cpu
|
||||
add r0, @ex_saved_reg1, r0
|
||||
#else
|
||||
st r0, [@ex_saved_reg1]
|
||||
@@ -108,7 +108,7 @@ ex_saved_reg1:
|
||||
.macro TLBMISS_RESTORE_REGS
|
||||
#ifdef CONFIG_SMP
|
||||
GET_CPU_ID r0 ; get to per cpu scratch mem
|
||||
- lsl r0, r0, L1_CACHE_SHIFT ; each is cache line wide
|
||||
+ asl r0, r0, L1_CACHE_SHIFT ; each is cache line wide
|
||||
add r0, @ex_saved_reg1, r0
|
||||
ld_s r3, [r0,12]
|
||||
ld_s r2, [r0, 8]
|
||||
@@ -220,7 +220,7 @@ ex_saved_reg1:
|
||||
|
||||
.macro CONV_PTE_TO_TLB
|
||||
and r3, r0, PTE_BITS_RWX ; r w x
|
||||
- lsl r2, r3, 3 ; r w x 0 0 0
|
||||
+ asl r2, r3, 3 ; Kr Kw Kx 0 0 0 (GLOBAL, kernel only)
|
||||
and.f 0, r0, _PAGE_GLOBAL
|
||||
or.z r2, r2, r3 ; r w x r w x
|
||||
|
||||
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
|
||||
index 517829f6a58b..4b67f70feab9 100644
|
||||
--- a/drivers/input/joystick/xpad.c
|
||||
+++ b/drivers/input/joystick/xpad.c
|
||||
@@ -844,6 +844,9 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
struct usb_endpoint_descriptor *ep_irq_in;
|
||||
int i, error;
|
||||
|
||||
+ if (intf->cur_altsetting->desc.bNumEndpoints != 2)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
for (i = 0; xpad_device[i].idVendor; i++) {
|
||||
if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) &&
|
||||
(le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct))
|
||||
diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c
|
||||
index 2792ca397dd0..3ed0ce1e4dcb 100644
|
||||
--- a/drivers/input/touchscreen/wacom_w8001.c
|
||||
+++ b/drivers/input/touchscreen/wacom_w8001.c
|
||||
@@ -27,7 +27,7 @@ MODULE_AUTHOR("Jaya Kumar <jayakumar.lkml@gmail.com>");
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
-#define W8001_MAX_LENGTH 11
|
||||
+#define W8001_MAX_LENGTH 13
|
||||
#define W8001_LEAD_MASK 0x80
|
||||
#define W8001_LEAD_BYTE 0x80
|
||||
#define W8001_TAB_MASK 0x40
|
||||
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
|
||||
index 508380b6a10d..2cc6082d0060 100644
|
||||
--- a/drivers/mmc/card/block.c
|
||||
+++ b/drivers/mmc/card/block.c
|
||||
@@ -1610,8 +1610,8 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
|
||||
|
||||
packed_cmd_hdr = packed->cmd_hdr;
|
||||
memset(packed_cmd_hdr, 0, sizeof(packed->cmd_hdr));
|
||||
- packed_cmd_hdr[0] = (packed->nr_entries << 16) |
|
||||
- (PACKED_CMD_WR << 8) | PACKED_CMD_VER;
|
||||
+ packed_cmd_hdr[0] = cpu_to_le32((packed->nr_entries << 16) |
|
||||
+ (PACKED_CMD_WR << 8) | PACKED_CMD_VER);
|
||||
hdr_blocks = mmc_large_sector(card) ? 8 : 1;
|
||||
|
||||
/*
|
||||
@@ -1625,14 +1625,14 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
|
||||
((brq->data.blocks * brq->data.blksz) >=
|
||||
card->ext_csd.data_tag_unit_size);
|
||||
/* Argument of CMD23 */
|
||||
- packed_cmd_hdr[(i * 2)] =
|
||||
+ packed_cmd_hdr[(i * 2)] = cpu_to_le32(
|
||||
(do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) |
|
||||
(do_data_tag ? MMC_CMD23_ARG_TAG_REQ : 0) |
|
||||
- blk_rq_sectors(prq);
|
||||
+ blk_rq_sectors(prq));
|
||||
/* Argument of CMD18 or CMD25 */
|
||||
- packed_cmd_hdr[((i * 2)) + 1] =
|
||||
+ packed_cmd_hdr[((i * 2)) + 1] = cpu_to_le32(
|
||||
mmc_card_blockaddr(card) ?
|
||||
- blk_rq_pos(prq) : blk_rq_pos(prq) << 9;
|
||||
+ blk_rq_pos(prq) : blk_rq_pos(prq) << 9);
|
||||
packed->blocks += blk_rq_sectors(prq);
|
||||
i++;
|
||||
}
|
||||
diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
|
||||
index 6efe27458116..8e2d394628ed 100644
|
||||
--- a/drivers/net/can/at91_can.c
|
||||
+++ b/drivers/net/can/at91_can.c
|
||||
@@ -730,9 +730,10 @@ static int at91_poll_rx(struct net_device *dev, int quota)
|
||||
|
||||
/* upper group completed, look again in lower */
|
||||
if (priv->rx_next > get_mb_rx_low_last(priv) &&
|
||||
- quota > 0 && mb > get_mb_rx_last(priv)) {
|
||||
+ mb > get_mb_rx_last(priv)) {
|
||||
priv->rx_next = get_mb_rx_first(priv);
|
||||
- goto again;
|
||||
+ if (quota > 0)
|
||||
+ goto again;
|
||||
}
|
||||
|
||||
return received;
|
||||
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
|
||||
index 84ad2b44377c..fa78e45a2bee 100644
|
||||
--- a/drivers/net/can/dev.c
|
||||
+++ b/drivers/net/can/dev.c
|
||||
@@ -665,6 +665,9 @@ static int can_changelink(struct net_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (!data)
|
||||
+ return 0;
|
||||
+
|
||||
if (data[IFLA_CAN_CTRLMODE]) {
|
||||
struct can_ctrlmode *cm;
|
||||
|
||||
@@ -768,6 +771,11 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
+static void can_dellink(struct net_device *dev, struct list_head *head)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
static struct rtnl_link_ops can_link_ops __read_mostly = {
|
||||
.kind = "can",
|
||||
.maxtype = IFLA_CAN_MAX,
|
||||
@@ -775,6 +783,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
|
||||
.setup = can_setup,
|
||||
.newlink = can_newlink,
|
||||
.changelink = can_changelink,
|
||||
+ .dellink = can_dellink,
|
||||
.get_size = can_get_size,
|
||||
.fill_info = can_fill_info,
|
||||
.get_xstats_size = can_get_xstats_size,
|
||||
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
|
||||
index c089fa1ceea9..f4c86225be36 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||
@@ -213,7 +213,7 @@
|
||||
/* Various constants */
|
||||
|
||||
/* Coalescing */
|
||||
-#define MVNETA_TXDONE_COAL_PKTS 1
|
||||
+#define MVNETA_TXDONE_COAL_PKTS 0 /* interrupt per packet */
|
||||
#define MVNETA_RX_COAL_PKTS 32
|
||||
#define MVNETA_RX_COAL_USEC 100
|
||||
|
||||
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
|
||||
index fa2dcbcdb921..c2f616f515c3 100644
|
||||
--- a/drivers/pinctrl/pinctrl-single.c
|
||||
+++ b/drivers/pinctrl/pinctrl-single.c
|
||||
@@ -1616,6 +1616,9 @@ static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc,
|
||||
else
|
||||
mask &= ~soc_mask;
|
||||
pcs->write(mask, pcswi->reg);
|
||||
+
|
||||
+ /* flush posted write */
|
||||
+ mask = pcs->read(pcswi->reg);
|
||||
raw_spin_unlock(&pcs->lock);
|
||||
}
|
||||
|
||||
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
|
||||
index 908d82529ee9..668acd6c7bc8 100644
|
||||
--- a/drivers/s390/net/qeth_l2_main.c
|
||||
+++ b/drivers/s390/net/qeth_l2_main.c
|
||||
@@ -906,6 +906,7 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
|
||||
qeth_l2_set_offline(cgdev);
|
||||
|
||||
if (card->dev) {
|
||||
+ netif_napi_del(&card->napi);
|
||||
unregister_netdev(card->dev);
|
||||
card->dev = NULL;
|
||||
}
|
||||
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
|
||||
index 3524d34ff694..59759f72c24f 100644
|
||||
--- a/drivers/s390/net/qeth_l3_main.c
|
||||
+++ b/drivers/s390/net/qeth_l3_main.c
|
||||
@@ -3333,6 +3333,7 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
|
||||
qeth_l3_set_offline(cgdev);
|
||||
|
||||
if (card->dev) {
|
||||
+ netif_napi_del(&card->napi);
|
||||
unregister_netdev(card->dev);
|
||||
card->dev = NULL;
|
||||
}
|
||||
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
|
||||
index 2b7bc7df1edf..9d92f798b8b2 100644
|
||||
--- a/drivers/scsi/ipr.c
|
||||
+++ b/drivers/scsi/ipr.c
|
||||
@@ -9644,6 +9644,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev,
|
||||
ioa_cfg->intr_flag = IPR_USE_MSI;
|
||||
else {
|
||||
ioa_cfg->intr_flag = IPR_USE_LSI;
|
||||
+ ioa_cfg->clear_isr = 1;
|
||||
ioa_cfg->nvectors = 1;
|
||||
dev_info(&pdev->dev, "Cannot enable MSI.\n");
|
||||
}
|
||||
diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
|
||||
index 75fe3d466515..ba3fac8318bb 100644
|
||||
--- a/drivers/xen/xen-pciback/conf_space.c
|
||||
+++ b/drivers/xen/xen-pciback/conf_space.c
|
||||
@@ -183,8 +183,7 @@ int xen_pcibk_config_read(struct pci_dev *dev, int offset, int size,
|
||||
field_start = OFFSET(cfg_entry);
|
||||
field_end = OFFSET(cfg_entry) + field->size;
|
||||
|
||||
- if ((req_start >= field_start && req_start < field_end)
|
||||
- || (req_end > field_start && req_end <= field_end)) {
|
||||
+ if (req_end > field_start && field_end > req_start) {
|
||||
err = conf_space_read(dev, cfg_entry, field_start,
|
||||
&tmp_val);
|
||||
if (err)
|
||||
@@ -230,8 +229,7 @@ int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value)
|
||||
field_start = OFFSET(cfg_entry);
|
||||
field_end = OFFSET(cfg_entry) + field->size;
|
||||
|
||||
- if ((req_start >= field_start && req_start < field_end)
|
||||
- || (req_end > field_start && req_end <= field_end)) {
|
||||
+ if (req_end > field_start && field_end > req_start) {
|
||||
tmp_val = 0;
|
||||
|
||||
err = xen_pcibk_config_read(dev, field_start,
|
||||
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
|
||||
index 03df50211c48..eb0c26a36b03 100644
|
||||
--- a/fs/ecryptfs/file.c
|
||||
+++ b/fs/ecryptfs/file.c
|
||||
@@ -178,6 +178,19 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int ecryptfs_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
+{
|
||||
+ struct file *lower_file = ecryptfs_file_to_lower(file);
|
||||
+ /*
|
||||
+ * Don't allow mmap on top of file systems that don't support it
|
||||
+ * natively. If FILESYSTEM_MAX_STACK_DEPTH > 2 or ecryptfs
|
||||
+ * allows recursive mounting, this will need to be extended.
|
||||
+ */
|
||||
+ if (!lower_file->f_op->mmap)
|
||||
+ return -ENODEV;
|
||||
+ return generic_file_mmap(file, vma);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* ecryptfs_open
|
||||
* @inode: inode speciying file to open
|
||||
@@ -349,7 +362,7 @@ const struct file_operations ecryptfs_main_fops = {
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = ecryptfs_compat_ioctl,
|
||||
#endif
|
||||
- .mmap = generic_file_mmap,
|
||||
+ .mmap = ecryptfs_mmap,
|
||||
.open = ecryptfs_open,
|
||||
.flush = ecryptfs_flush,
|
||||
.release = ecryptfs_release,
|
||||
diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c
|
||||
index 9b661a4ccee7..f1ea610362c6 100644
|
||||
--- a/fs/ecryptfs/kthread.c
|
||||
+++ b/fs/ecryptfs/kthread.c
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/mount.h>
|
||||
-#include <linux/file.h>
|
||||
#include "ecryptfs_kernel.h"
|
||||
|
||||
struct ecryptfs_open_req {
|
||||
@@ -148,7 +147,7 @@ int ecryptfs_privileged_open(struct file **lower_file,
|
||||
flags |= IS_RDONLY(lower_dentry->d_inode) ? O_RDONLY : O_RDWR;
|
||||
(*lower_file) = dentry_open(&req.path, flags, cred);
|
||||
if (!IS_ERR(*lower_file))
|
||||
- goto have_file;
|
||||
+ goto out;
|
||||
if ((flags & O_ACCMODE) == O_RDONLY) {
|
||||
rc = PTR_ERR((*lower_file));
|
||||
goto out;
|
||||
@@ -166,16 +165,8 @@ int ecryptfs_privileged_open(struct file **lower_file,
|
||||
mutex_unlock(&ecryptfs_kthread_ctl.mux);
|
||||
wake_up(&ecryptfs_kthread_ctl.wait);
|
||||
wait_for_completion(&req.done);
|
||||
- if (IS_ERR(*lower_file)) {
|
||||
+ if (IS_ERR(*lower_file))
|
||||
rc = PTR_ERR(*lower_file);
|
||||
- goto out;
|
||||
- }
|
||||
-have_file:
|
||||
- if ((*lower_file)->f_op->mmap == NULL) {
|
||||
- fput(*lower_file);
|
||||
- *lower_file = NULL;
|
||||
- rc = -EMEDIUMTYPE;
|
||||
- }
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index 4e237a6b4b33..a3be02e03021 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -452,6 +452,10 @@ static int __ext4_ext_check(const char *function, unsigned int line,
|
||||
error_msg = "invalid extent entries";
|
||||
goto corrupted;
|
||||
}
|
||||
+ if (unlikely(depth > 32)) {
|
||||
+ error_msg = "too large eh_depth";
|
||||
+ goto corrupted;
|
||||
+ }
|
||||
/* Verify checksum on non-root extent tree nodes */
|
||||
if (ext_depth(inode) != depth &&
|
||||
!ext4_extent_block_csum_verify(inode, eh)) {
|
||||
diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
|
||||
index 94c451ce6d24..30c047e0bad2 100644
|
||||
--- a/fs/nilfs2/the_nilfs.c
|
||||
+++ b/fs/nilfs2/the_nilfs.c
|
||||
@@ -431,7 +431,7 @@ static int nilfs_valid_sb(struct nilfs_super_block *sbp)
|
||||
if (!sbp || le16_to_cpu(sbp->s_magic) != NILFS_SUPER_MAGIC)
|
||||
return 0;
|
||||
bytes = le16_to_cpu(sbp->s_bytes);
|
||||
- if (bytes > BLOCK_SIZE)
|
||||
+ if (bytes < sumoff + 4 || bytes > BLOCK_SIZE)
|
||||
return 0;
|
||||
crc = crc32_le(le32_to_cpu(sbp->s_crc_seed), (unsigned char *)sbp,
|
||||
sumoff);
|
||||
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
|
||||
index bde94d853b2b..64bc3d959992 100644
|
||||
--- a/net/ceph/osdmap.c
|
||||
+++ b/net/ceph/osdmap.c
|
||||
@@ -825,6 +825,110 @@ bad:
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Encoding order is (new_up_client, new_state, new_weight). Need to
|
||||
+ * apply in the (new_weight, new_state, new_up_client) order, because
|
||||
+ * an incremental map may look like e.g.
|
||||
+ *
|
||||
+ * new_up_client: { osd=6, addr=... } # set osd_state and addr
|
||||
+ * new_state: { osd=6, xorstate=EXISTS } # clear osd_state
|
||||
+ */
|
||||
+static int decode_new_up_state_weight(void **p, void *end,
|
||||
+ struct ceph_osdmap *map)
|
||||
+{
|
||||
+ void *new_up_client;
|
||||
+ void *new_state;
|
||||
+ void *new_weight_end;
|
||||
+ u32 len;
|
||||
+
|
||||
+ new_up_client = *p;
|
||||
+ ceph_decode_32_safe(p, end, len, e_inval);
|
||||
+ len *= sizeof(u32) + sizeof(struct ceph_entity_addr);
|
||||
+ ceph_decode_need(p, end, len, e_inval);
|
||||
+ *p += len;
|
||||
+
|
||||
+ new_state = *p;
|
||||
+ ceph_decode_32_safe(p, end, len, e_inval);
|
||||
+ len *= sizeof(u32) + sizeof(u8);
|
||||
+ ceph_decode_need(p, end, len, e_inval);
|
||||
+ *p += len;
|
||||
+
|
||||
+ /* new_weight */
|
||||
+ ceph_decode_32_safe(p, end, len, e_inval);
|
||||
+ while (len--) {
|
||||
+ s32 osd;
|
||||
+ u32 w;
|
||||
+
|
||||
+ ceph_decode_need(p, end, 2*sizeof(u32), e_inval);
|
||||
+ osd = ceph_decode_32(p);
|
||||
+ w = ceph_decode_32(p);
|
||||
+ BUG_ON(osd >= map->max_osd);
|
||||
+ pr_info("osd%d weight 0x%x %s\n", osd, w,
|
||||
+ w == CEPH_OSD_IN ? "(in)" :
|
||||
+ (w == CEPH_OSD_OUT ? "(out)" : ""));
|
||||
+ map->osd_weight[osd] = w;
|
||||
+
|
||||
+ /*
|
||||
+ * If we are marking in, set the EXISTS, and clear the
|
||||
+ * AUTOOUT and NEW bits.
|
||||
+ */
|
||||
+ if (w) {
|
||||
+ map->osd_state[osd] |= CEPH_OSD_EXISTS;
|
||||
+ map->osd_state[osd] &= ~(CEPH_OSD_AUTOOUT |
|
||||
+ CEPH_OSD_NEW);
|
||||
+ }
|
||||
+ }
|
||||
+ new_weight_end = *p;
|
||||
+
|
||||
+ /* new_state (up/down) */
|
||||
+ *p = new_state;
|
||||
+ len = ceph_decode_32(p);
|
||||
+ while (len--) {
|
||||
+ s32 osd;
|
||||
+ u8 xorstate;
|
||||
+
|
||||
+ osd = ceph_decode_32(p);
|
||||
+ xorstate = ceph_decode_8(p);
|
||||
+ if (xorstate == 0)
|
||||
+ xorstate = CEPH_OSD_UP;
|
||||
+ BUG_ON(osd >= map->max_osd);
|
||||
+ if ((map->osd_state[osd] & CEPH_OSD_UP) &&
|
||||
+ (xorstate & CEPH_OSD_UP))
|
||||
+ pr_info("osd%d down\n", osd);
|
||||
+ if ((map->osd_state[osd] & CEPH_OSD_EXISTS) &&
|
||||
+ (xorstate & CEPH_OSD_EXISTS)) {
|
||||
+ pr_info("osd%d does not exist\n", osd);
|
||||
+ map->osd_weight[osd] = CEPH_OSD_IN;
|
||||
+ memset(map->osd_addr + osd, 0, sizeof(*map->osd_addr));
|
||||
+ map->osd_state[osd] = 0;
|
||||
+ } else {
|
||||
+ map->osd_state[osd] ^= xorstate;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* new_up_client */
|
||||
+ *p = new_up_client;
|
||||
+ len = ceph_decode_32(p);
|
||||
+ while (len--) {
|
||||
+ s32 osd;
|
||||
+ struct ceph_entity_addr addr;
|
||||
+
|
||||
+ osd = ceph_decode_32(p);
|
||||
+ ceph_decode_copy(p, &addr, sizeof(addr));
|
||||
+ ceph_decode_addr(&addr);
|
||||
+ BUG_ON(osd >= map->max_osd);
|
||||
+ pr_info("osd%d up\n", osd);
|
||||
+ map->osd_state[osd] |= CEPH_OSD_EXISTS | CEPH_OSD_UP;
|
||||
+ map->osd_addr[osd] = addr;
|
||||
+ }
|
||||
+
|
||||
+ *p = new_weight_end;
|
||||
+ return 0;
|
||||
+
|
||||
+e_inval:
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* decode and apply an incremental map update.
|
||||
*/
|
||||
struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
||||
@@ -939,50 +1043,10 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
||||
__remove_pg_pool(&map->pg_pools, pi);
|
||||
}
|
||||
|
||||
- /* new_up */
|
||||
- err = -EINVAL;
|
||||
- ceph_decode_32_safe(p, end, len, bad);
|
||||
- while (len--) {
|
||||
- u32 osd;
|
||||
- struct ceph_entity_addr addr;
|
||||
- ceph_decode_32_safe(p, end, osd, bad);
|
||||
- ceph_decode_copy_safe(p, end, &addr, sizeof(addr), bad);
|
||||
- ceph_decode_addr(&addr);
|
||||
- pr_info("osd%d up\n", osd);
|
||||
- BUG_ON(osd >= map->max_osd);
|
||||
- map->osd_state[osd] |= CEPH_OSD_UP;
|
||||
- map->osd_addr[osd] = addr;
|
||||
- }
|
||||
-
|
||||
- /* new_state */
|
||||
- ceph_decode_32_safe(p, end, len, bad);
|
||||
- while (len--) {
|
||||
- u32 osd;
|
||||
- u8 xorstate;
|
||||
- ceph_decode_32_safe(p, end, osd, bad);
|
||||
- xorstate = **(u8 **)p;
|
||||
- (*p)++; /* clean flag */
|
||||
- if (xorstate == 0)
|
||||
- xorstate = CEPH_OSD_UP;
|
||||
- if (xorstate & CEPH_OSD_UP)
|
||||
- pr_info("osd%d down\n", osd);
|
||||
- if (osd < map->max_osd)
|
||||
- map->osd_state[osd] ^= xorstate;
|
||||
- }
|
||||
-
|
||||
- /* new_weight */
|
||||
- ceph_decode_32_safe(p, end, len, bad);
|
||||
- while (len--) {
|
||||
- u32 osd, off;
|
||||
- ceph_decode_need(p, end, sizeof(u32)*2, bad);
|
||||
- osd = ceph_decode_32(p);
|
||||
- off = ceph_decode_32(p);
|
||||
- pr_info("osd%d weight 0x%x %s\n", osd, off,
|
||||
- off == CEPH_OSD_IN ? "(in)" :
|
||||
- (off == CEPH_OSD_OUT ? "(out)" : ""));
|
||||
- if (osd < map->max_osd)
|
||||
- map->osd_weight[osd] = off;
|
||||
- }
|
||||
+ /* new_up_client, new_state, new_weight */
|
||||
+ err = decode_new_up_state_weight(p, end, map);
|
||||
+ if (err)
|
||||
+ goto bad;
|
||||
|
||||
/* new_pg_temp */
|
||||
ceph_decode_32_safe(p, end, len, bad);
|
||||
diff --git a/sound/core/timer.c b/sound/core/timer.c
|
||||
index 38742e826900..3476895ee1fb 100644
|
||||
--- a/sound/core/timer.c
|
||||
+++ b/sound/core/timer.c
|
||||
@@ -1208,6 +1208,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
|
||||
tu->tstamp = *tstamp;
|
||||
if ((tu->filter & (1 << event)) == 0 || !tu->tread)
|
||||
return;
|
||||
+ memset(&r1, 0, sizeof(r1));
|
||||
r1.event = event;
|
||||
r1.tstamp = *tstamp;
|
||||
r1.val = resolution;
|
||||
@@ -1242,6 +1243,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
|
||||
}
|
||||
if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) &&
|
||||
tu->last_resolution != resolution) {
|
||||
+ memset(&r1, 0, sizeof(r1));
|
||||
r1.event = SNDRV_TIMER_EVENT_RESOLUTION;
|
||||
r1.tstamp = tstamp;
|
||||
r1.val = resolution;
|
||||
@@ -1707,6 +1709,7 @@ static int snd_timer_user_params(struct file *file,
|
||||
if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
|
||||
if (tu->tread) {
|
||||
struct snd_timer_tread tread;
|
||||
+ memset(&tread, 0, sizeof(tread));
|
||||
tread.event = SNDRV_TIMER_EVENT_EARLY;
|
||||
tread.tstamp.tv_sec = 0;
|
||||
tread.tstamp.tv_nsec = 0;
|
1346
patch/kernel/cubox-dev/patch-3.14.75-76.patch
Normal file
1346
patch/kernel/cubox-dev/patch-3.14.75-76.patch
Normal file
File diff suppressed because it is too large
Load diff
1347
patch/kernel/cubox-dev/patch-3.14.76-77.patch
Normal file
1347
patch/kernel/cubox-dev/patch-3.14.76-77.patch
Normal file
File diff suppressed because it is too large
Load diff
1315
patch/kernel/cubox-dev/patch-3.14.77-78.patch
Normal file
1315
patch/kernel/cubox-dev/patch-3.14.77-78.patch
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue