Compare commits
109 Commits
master
...
private-jc
Author | SHA1 | Date |
---|---|---|
Jon Masters | 13b31968b0 | |
Jon Masters | 2aa8b80e6f | |
Jon Masters | 8e61da590a | |
Jon Masters | 5e97d35e3e | |
Dave Jones | 52f64574fa | |
Dave Jones | 6797a3efae | |
Josh Boyer | 98931fa9d1 | |
Dave Jones | 3b5b9ca4f6 | |
Josh Boyer | 5bbe9ea49d | |
Josh Boyer | 475d827aeb | |
Dave Jones | 3cc64333de | |
Dave Jones | 64c1946b90 | |
Adam Jackson | efa8ce0877 | |
Dave Jones | 0901f900da | |
Dave Jones | b4ed1de226 | |
Justin M. Forbes | 63bfa6a42c | |
Josh Boyer | 841f4ae865 | |
Justin M. Forbes | 7e5dab31d9 | |
Josh Boyer | 631462571d | |
Dave Jones | 114779eefd | |
Dave Jones | bf89f3a369 | |
Dave Jones | 26fca6fb1f | |
Dave Jones | dc7e77c88c | |
John W. Linville | ec5a8cd72e | |
Dennis Gilmore | c298448388 | |
Josh Boyer | 4f07bf38b5 | |
Dave Jones | cade301a3b | |
Dave Jones | f8424d652a | |
Dave Jones | 953a44d426 | |
Dave Jones | bb24598347 | |
Dave Jones | 987250ae87 | |
Dave Jones | 43c809527e | |
Dave Jones | b183b702f7 | |
Dave Jones | 0c76388efa | |
Dave Jones | 49d8394023 | |
Dave Jones | 322dbeb8ef | |
John W. Linville | 16d5b4083a | |
Mark Wielaard | b81b450037 | |
Justin M. Forbes | 5a64af3faf | |
Adam Jackson | 543bc43145 | |
Dave Jones | 191eabc46e | |
Dave Jones | 957f70d8ce | |
Dave Jones | 34f57fef38 | |
Josh Boyer | 8604c9164a | |
Dave Jones | 03f3fa649f | |
Justin M. Forbes | c15034c210 | |
Dave Jones | c675e2db6b | |
Josh Boyer | 3e2c562382 | |
Josh Boyer | 918552e3f3 | |
Josh Boyer | 3daa224e41 | |
Josh Boyer | d55b8fbc56 | |
Josh Boyer | d4f9238c88 | |
Josh Boyer | 9b45c234f0 | |
Josh Boyer | db1939dd8f | |
Josh Boyer | 6b45478950 | |
Peter Robinson | da2d4fb231 | |
Josh Boyer | 7d7342cd50 | |
Josh Boyer | 950a401dc3 | |
Josh Boyer | 55bd825353 | |
Josh Boyer | 6bdf8498f4 | |
Josh Boyer | add2ca9e12 | |
Peter Robinson | 76ebbb6c6c | |
Josh Boyer | dae3cd5ca5 | |
Josh Boyer | 0a89a58e03 | |
Josh Boyer | 0255fc68c9 | |
Josh Boyer | 0e3dcef2db | |
Josh Boyer | 44e57012c8 | |
Peter Robinson | e1d46a5d22 | |
Dave Jones | b2f4cd93ec | |
Peter Robinson | d15a70859a | |
Josh Boyer | c08cca5888 | |
Dave Jones | 0297ab965a | |
Josh Boyer | 8bd30695f0 | |
Josh Boyer | abff21a8fa | |
Josh Boyer | cd68c0b144 | |
Peter Robinson | d92680c835 | |
Dave Jones | ad44e064a0 | |
Dave Jones | 9ce789da04 | |
Josh Boyer | 9163dd7666 | |
Josh Boyer | 157fe84354 | |
Peter Robinson | 3a72e754ec | |
Peter Robinson | 3f54814095 | |
Josh Boyer | 39fd9cfd02 | |
Josh Boyer | 7952cde44b | |
Adam Jackson | f935a16509 | |
John W. Linville | f516fcd1f0 | |
Josh Boyer | 08db8c5d12 | |
Josh Boyer | b150cfcb0f | |
Josh Boyer | 65b7231f44 | |
Josh Boyer | 9bf39b3281 | |
Josh Boyer | 770ad8ca88 | |
Peter Robinson | 4cee10509f | |
Josh Boyer | 2d7f1ba183 | |
Josh Boyer | 96e2cd2647 | |
Josh Boyer | 88671e11c1 | |
Josh Boyer | beef0e952d | |
Josh Boyer | 87001d5c4f | |
Josh Boyer | 85df0e0b4f | |
Josh Boyer | fa3e4fce5a | |
Dave Jones | 75f90a6e2f | |
Josh Boyer | b0d8317b77 | |
Josh Boyer | 9befbf0be8 | |
Josh Boyer | a9de21e9b4 | |
Josh Boyer | 36def90773 | |
Josh Boyer | 7dc73bb9a6 | |
Josh Boyer | 5fbbd7cdcd | |
Josh Boyer | 92a0ba45a8 | |
Josh Boyer | d916a9f0bf | |
Chris Wright | d12d87cbf7 |
|
@ -0,0 +1,58 @@
|
|||
commit 64b3db22c04586997ab4be46dd5a5b99f8a2d390 (2.6.39),
|
||||
"Remove use of unreliable FADT revision field" causes regression
|
||||
for old P4 systems because now cst_control and other fields are
|
||||
not reset to 0.
|
||||
|
||||
The effect is that acpi_processor_power_init will notice
|
||||
cst_control != 0 and a write to CST_CNT register is performed
|
||||
that should not happen. As result, the system oopses after the
|
||||
"No _CST, giving up" message, sometimes in acpi_ns_internalize_name,
|
||||
sometimes in acpi_ns_get_type, usually at random places. May be
|
||||
during migration to CPU 1 in acpi_processor_get_throttling.
|
||||
|
||||
Every one of these settings help to avoid this problem:
|
||||
- acpi=off
|
||||
- processor.nocst=1
|
||||
- maxcpus=1
|
||||
|
||||
The fix is to update acpi_gbl_FADT.header.length after
|
||||
the original value is used to check for old revisions.
|
||||
|
||||
Signed-off-by: Julian Anastasov <ja@ssi.bg>
|
||||
---
|
||||
drivers/acpi/acpica/tbfadt.c | 8 ++++----
|
||||
1 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
|
||||
index c5d8704..4c9c760 100644
|
||||
--- a/drivers/acpi/acpica/tbfadt.c
|
||||
+++ b/drivers/acpi/acpica/tbfadt.c
|
||||
@@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void)
|
||||
u32 address32;
|
||||
u32 i;
|
||||
|
||||
- /* Update the local FADT table header length */
|
||||
-
|
||||
- acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
|
||||
-
|
||||
/*
|
||||
* Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
|
||||
* Later code will always use the X 64-bit field. Also, check for an
|
||||
@@ -408,6 +404,10 @@ static void acpi_tb_convert_fadt(void)
|
||||
acpi_gbl_FADT.boot_flags = 0;
|
||||
}
|
||||
|
||||
+ /* Update the local FADT table header length */
|
||||
+
|
||||
+ acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
|
||||
+
|
||||
/*
|
||||
* Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
|
||||
* generic address structures as necessary. Later code will always use
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,78 +0,0 @@
|
|||
From 0769c5de24621141c953fbe1f943582d37cb4244 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Stephan=20B=C3=A4rwolf?= <stephan.baerwolf@tu-ilmenau.de>
|
||||
Date: Thu, 12 Jan 2012 16:43:03 +0100
|
||||
Subject: [PATCH 1/2] KVM: x86: extend "struct x86_emulate_ops" with
|
||||
"get_cpuid"
|
||||
|
||||
In order to be able to proceed checks on CPU-specific properties
|
||||
within the emulator, function "get_cpuid" is introduced.
|
||||
With "get_cpuid" it is possible to virtually call the guests
|
||||
"cpuid"-opcode without changing the VM's context.
|
||||
|
||||
[mtosatti: cleanup/beautify code]
|
||||
|
||||
Signed-off-by: Stephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
|
||||
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
---
|
||||
arch/x86/include/asm/kvm_emulate.h | 3 +++
|
||||
arch/x86/kvm/x86.c | 23 +++++++++++++++++++++++
|
||||
2 files changed, 26 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
|
||||
index ab4092e..c8b2868 100644
|
||||
--- a/arch/x86/include/asm/kvm_emulate.h
|
||||
+++ b/arch/x86/include/asm/kvm_emulate.h
|
||||
@@ -190,6 +190,9 @@ struct x86_emulate_ops {
|
||||
int (*intercept)(struct x86_emulate_ctxt *ctxt,
|
||||
struct x86_instruction_info *info,
|
||||
enum x86_intercept_stage stage);
|
||||
+
|
||||
+ bool (*get_cpuid)(struct x86_emulate_ctxt *ctxt,
|
||||
+ u32 *eax, u32 *ebx, u32 *ecx, u32 *edx);
|
||||
};
|
||||
|
||||
typedef u32 __attribute__((vector_size(16))) sse128_t;
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index f0fa3fb..c95ca2d 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -4205,6 +4205,28 @@ static int emulator_intercept(struct x86_emulate_ctxt *ctxt,
|
||||
return kvm_x86_ops->check_intercept(emul_to_vcpu(ctxt), info, stage);
|
||||
}
|
||||
|
||||
+static bool emulator_get_cpuid(struct x86_emulate_ctxt *ctxt,
|
||||
+ u32 *eax, u32 *ebx, u32 *ecx, u32 *edx)
|
||||
+{
|
||||
+ struct kvm_cpuid_entry2 *cpuid = NULL;
|
||||
+
|
||||
+ if (eax && ecx)
|
||||
+ cpuid = kvm_find_cpuid_entry(emul_to_vcpu(ctxt),
|
||||
+ *eax, *ecx);
|
||||
+
|
||||
+ if (cpuid) {
|
||||
+ *eax = cpuid->eax;
|
||||
+ *ecx = cpuid->ecx;
|
||||
+ if (ebx)
|
||||
+ *ebx = cpuid->ebx;
|
||||
+ if (edx)
|
||||
+ *edx = cpuid->edx;
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static struct x86_emulate_ops emulate_ops = {
|
||||
.read_std = kvm_read_guest_virt_system,
|
||||
.write_std = kvm_write_guest_virt_system,
|
||||
@@ -4236,6 +4258,7 @@ static struct x86_emulate_ops emulate_ops = {
|
||||
.get_fpu = emulator_get_fpu,
|
||||
.put_fpu = emulator_put_fpu,
|
||||
.intercept = emulator_intercept,
|
||||
+ .get_cpuid = emulator_get_cpuid,
|
||||
};
|
||||
|
||||
static void cache_all_regs(struct kvm_vcpu *vcpu)
|
||||
--
|
||||
1.7.7.5
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
From e28ba7bb020f07193bc000453c8775e9d2c0dda7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Stephan=20B=C3=A4rwolf?= <stephan.baerwolf@tu-ilmenau.de>
|
||||
Date: Thu, 12 Jan 2012 16:43:04 +0100
|
||||
Subject: [PATCH 2/2] KVM: x86: fix missing checks in syscall emulation
|
||||
|
||||
On hosts without this patch, 32bit guests will crash (and 64bit guests
|
||||
may behave in a wrong way) for example by simply executing following
|
||||
nasm-demo-application:
|
||||
|
||||
[bits 32]
|
||||
global _start
|
||||
SECTION .text
|
||||
_start: syscall
|
||||
|
||||
(I tested it with winxp and linux - both always crashed)
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
00000000 <_start>:
|
||||
0: 0f 05 syscall
|
||||
|
||||
The reason seems a missing "invalid opcode"-trap (int6) for the
|
||||
syscall opcode "0f05", which is not available on Intel CPUs
|
||||
within non-longmodes, as also on some AMD CPUs within legacy-mode.
|
||||
(depending on CPU vendor, MSR_EFER and cpuid)
|
||||
|
||||
Because previous mentioned OSs may not engage corresponding
|
||||
syscall target-registers (STAR, LSTAR, CSTAR), they remain
|
||||
NULL and (non trapping) syscalls are leading to multiple
|
||||
faults and finally crashs.
|
||||
|
||||
Depending on the architecture (AMD or Intel) pretended by
|
||||
guests, various checks according to vendor's documentation
|
||||
are implemented to overcome the current issue and behave
|
||||
like the CPUs physical counterparts.
|
||||
|
||||
[mtosatti: cleanup/beautify code]
|
||||
|
||||
Signed-off-by: Stephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
|
||||
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
---
|
||||
arch/x86/include/asm/kvm_emulate.h | 13 +++++++++
|
||||
arch/x86/kvm/emulate.c | 51 ++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 64 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
|
||||
index c8b2868..7b9cfc4 100644
|
||||
--- a/arch/x86/include/asm/kvm_emulate.h
|
||||
+++ b/arch/x86/include/asm/kvm_emulate.h
|
||||
@@ -301,6 +301,19 @@ struct x86_emulate_ctxt {
|
||||
#define X86EMUL_MODE_PROT (X86EMUL_MODE_PROT16|X86EMUL_MODE_PROT32| \
|
||||
X86EMUL_MODE_PROT64)
|
||||
|
||||
+/* CPUID vendors */
|
||||
+#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx 0x68747541
|
||||
+#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx 0x444d4163
|
||||
+#define X86EMUL_CPUID_VENDOR_AuthenticAMD_edx 0x69746e65
|
||||
+
|
||||
+#define X86EMUL_CPUID_VENDOR_AMDisbetterI_ebx 0x69444d41
|
||||
+#define X86EMUL_CPUID_VENDOR_AMDisbetterI_ecx 0x21726574
|
||||
+#define X86EMUL_CPUID_VENDOR_AMDisbetterI_edx 0x74656273
|
||||
+
|
||||
+#define X86EMUL_CPUID_VENDOR_GenuineIntel_ebx 0x756e6547
|
||||
+#define X86EMUL_CPUID_VENDOR_GenuineIntel_ecx 0x6c65746e
|
||||
+#define X86EMUL_CPUID_VENDOR_GenuineIntel_edx 0x49656e69
|
||||
+
|
||||
enum x86_intercept_stage {
|
||||
X86_ICTP_NONE = 0, /* Allow zero-init to not match anything */
|
||||
X86_ICPT_PRE_EXCEPT,
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 05a562b..0982507 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -1891,6 +1891,51 @@ setup_syscalls_segments(struct x86_emulate_ctxt *ctxt,
|
||||
ss->p = 1;
|
||||
}
|
||||
|
||||
+static bool em_syscall_is_enabled(struct x86_emulate_ctxt *ctxt)
|
||||
+{
|
||||
+ struct x86_emulate_ops *ops = ctxt->ops;
|
||||
+ u32 eax, ebx, ecx, edx;
|
||||
+
|
||||
+ /*
|
||||
+ * syscall should always be enabled in longmode - so only become
|
||||
+ * vendor specific (cpuid) if other modes are active...
|
||||
+ */
|
||||
+ if (ctxt->mode == X86EMUL_MODE_PROT64)
|
||||
+ return true;
|
||||
+
|
||||
+ eax = 0x00000000;
|
||||
+ ecx = 0x00000000;
|
||||
+ if (ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx)) {
|
||||
+ /*
|
||||
+ * Intel ("GenuineIntel")
|
||||
+ * remark: Intel CPUs only support "syscall" in 64bit
|
||||
+ * longmode. Also an 64bit guest with a
|
||||
+ * 32bit compat-app running will #UD !! While this
|
||||
+ * behaviour can be fixed (by emulating) into AMD
|
||||
+ * response - CPUs of AMD can't behave like Intel.
|
||||
+ */
|
||||
+ if (ebx == X86EMUL_CPUID_VENDOR_GenuineIntel_ebx &&
|
||||
+ ecx == X86EMUL_CPUID_VENDOR_GenuineIntel_ecx &&
|
||||
+ edx == X86EMUL_CPUID_VENDOR_GenuineIntel_edx)
|
||||
+ return false;
|
||||
+
|
||||
+ /* AMD ("AuthenticAMD") */
|
||||
+ if (ebx == X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx &&
|
||||
+ ecx == X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx &&
|
||||
+ edx == X86EMUL_CPUID_VENDOR_AuthenticAMD_edx)
|
||||
+ return true;
|
||||
+
|
||||
+ /* AMD ("AMDisbetter!") */
|
||||
+ if (ebx == X86EMUL_CPUID_VENDOR_AMDisbetterI_ebx &&
|
||||
+ ecx == X86EMUL_CPUID_VENDOR_AMDisbetterI_ecx &&
|
||||
+ edx == X86EMUL_CPUID_VENDOR_AMDisbetterI_edx)
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /* default: (not Intel, not AMD), apply Intel's stricter rules... */
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static int em_syscall(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
struct x86_emulate_ops *ops = ctxt->ops;
|
||||
@@ -1904,9 +1949,15 @@ static int em_syscall(struct x86_emulate_ctxt *ctxt)
|
||||
ctxt->mode == X86EMUL_MODE_VM86)
|
||||
return emulate_ud(ctxt);
|
||||
|
||||
+ if (!(em_syscall_is_enabled(ctxt)))
|
||||
+ return emulate_ud(ctxt);
|
||||
+
|
||||
ops->get_msr(ctxt, MSR_EFER, &efer);
|
||||
setup_syscalls_segments(ctxt, &cs, &ss);
|
||||
|
||||
+ if (!(efer & EFER_SCE))
|
||||
+ return emulate_ud(ctxt);
|
||||
+
|
||||
ops->get_msr(ctxt, MSR_STAR, &msr_data);
|
||||
msr_data >>= 32;
|
||||
cs_sel = (u16)(msr_data & 0xfffc);
|
||||
--
|
||||
1.7.7.5
|
||||
|
2
Makefile
2
Makefile
|
@ -100,7 +100,7 @@ debug:
|
|||
|
||||
@perl -pi -e 's/# CONFIG_MAXSMP is not set/CONFIG_MAXSMP=y/' config-x86-generic
|
||||
|
||||
# Try out UAS in rawhide builds.
|
||||
@# Try out UAS in rawhide builds.
|
||||
@perl -pi -e 's/# CONFIG_USB_UAS is not set/CONFIG_USB_UAS=m/' config-generic
|
||||
|
||||
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
|
||||
|
|
|
@ -10,10 +10,11 @@ CONFIGFILES = \
|
|||
$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
|
||||
$(CFG)-s390x.config \
|
||||
$(CFG)-arm.config $(CFG)-armv5tel.config $(CFG)-armv7hl.config \
|
||||
$(CFG)-armv5tel-kirkwood.config $(CFG)-armv7l-imx.config \
|
||||
$(CFG)-armv7l-omap.config $(CFG)-armv7l-tegra.config \
|
||||
$(CFG)-armv7hl-imx.config $(CFG)-armv7hl-highbank.config \
|
||||
$(CFG)-armv7hl-omap.config $(CFG)-armv7hl-tegra.config \
|
||||
$(CFG)-armv5tel-kirkwood.config \
|
||||
$(CFG)-armv7l-imx.config $(CFG)-armv7l-omap.config \
|
||||
$(CFG)-armv7l-tegra.config $(CFG)-armv7l-highbank.config \
|
||||
$(CFG)-armv7hl-imx.config $(CFG)-armv7hl-omap.config \
|
||||
$(CFG)-armv7hl-tegra.config $(CFG)-armv7hl-highbank.config \
|
||||
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
|
||||
$(CFG)-sparc64.config \
|
||||
$(CFG)-ppc64.config $(CFG)-ppc64-debug.config
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-03-14 13:08:37.462928792 -0400
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-03-14 13:10:17.076030982 -0400
|
||||
@@ -365,7 +365,7 @@ struct idmap_hashent {
|
||||
|
||||
struct idmap_hashtable {
|
||||
__u8 h_type;
|
||||
- struct idmap_hashent h_entries[IDMAP_HASH_SZ];
|
||||
+ struct idmap_hashent *h_entries;
|
||||
};
|
||||
|
||||
struct idmap {
|
||||
@@ -420,20 +420,39 @@ nfs_idmap_new(struct nfs_client *clp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void
|
||||
+idmap_alloc_hashtable(struct idmap_hashtable *h)
|
||||
+{
|
||||
+ if (h->h_entries != NULL)
|
||||
+ return;
|
||||
+ h->h_entries = kcalloc(IDMAP_HASH_SZ,
|
||||
+ sizeof(*h->h_entries),
|
||||
+ GFP_KERNEL);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+idmap_free_hashtable(struct idmap_hashtable *h)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return;
|
||||
+ for (i = 0; i < IDMAP_HASH_SZ; i++)
|
||||
+ kfree(h->h_entries[i].ih_name);
|
||||
+ kfree(h->h_entries);
|
||||
+}
|
||||
+
|
||||
void
|
||||
nfs_idmap_delete(struct nfs_client *clp)
|
||||
{
|
||||
struct idmap *idmap = clp->cl_idmap;
|
||||
- int i;
|
||||
|
||||
if (!idmap)
|
||||
return;
|
||||
rpc_unlink(idmap->idmap_dentry);
|
||||
clp->cl_idmap = NULL;
|
||||
- for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++)
|
||||
- kfree(idmap->idmap_user_hash.h_entries[i].ih_name);
|
||||
- for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++)
|
||||
- kfree(idmap->idmap_group_hash.h_entries[i].ih_name);
|
||||
+ idmap_free_hashtable(&idmap->idmap_user_hash);
|
||||
+ idmap_free_hashtable(&idmap->idmap_group_hash);
|
||||
kfree(idmap);
|
||||
}
|
||||
|
||||
@@ -443,6 +462,8 @@ nfs_idmap_delete(struct nfs_client *clp)
|
||||
static inline struct idmap_hashent *
|
||||
idmap_name_hash(struct idmap_hashtable* h, const char *name, size_t len)
|
||||
{
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return NULL;
|
||||
return &h->h_entries[fnvhash32(name, len) % IDMAP_HASH_SZ];
|
||||
}
|
||||
|
||||
@@ -451,6 +472,8 @@ idmap_lookup_name(struct idmap_hashtable
|
||||
{
|
||||
struct idmap_hashent *he = idmap_name_hash(h, name, len);
|
||||
|
||||
+ if (he == NULL)
|
||||
+ return NULL;
|
||||
if (he->ih_namelen != len || memcmp(he->ih_name, name, len) != 0)
|
||||
return NULL;
|
||||
if (time_after(jiffies, he->ih_expires))
|
||||
@@ -461,6 +484,8 @@ idmap_lookup_name(struct idmap_hashtable
|
||||
static inline struct idmap_hashent *
|
||||
idmap_id_hash(struct idmap_hashtable* h, __u32 id)
|
||||
{
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return NULL;
|
||||
return &h->h_entries[fnvhash32(&id, sizeof(id)) % IDMAP_HASH_SZ];
|
||||
}
|
||||
|
||||
@@ -468,6 +493,9 @@ static struct idmap_hashent *
|
||||
idmap_lookup_id(struct idmap_hashtable *h, __u32 id)
|
||||
{
|
||||
struct idmap_hashent *he = idmap_id_hash(h, id);
|
||||
+
|
||||
+ if (he == NULL)
|
||||
+ return NULL;
|
||||
if (he->ih_id != id || he->ih_namelen == 0)
|
||||
return NULL;
|
||||
if (time_after(jiffies, he->ih_expires))
|
||||
@@ -483,12 +511,14 @@ idmap_lookup_id(struct idmap_hashtable *
|
||||
static inline struct idmap_hashent *
|
||||
idmap_alloc_name(struct idmap_hashtable *h, char *name, size_t len)
|
||||
{
|
||||
+ idmap_alloc_hashtable(h);
|
||||
return idmap_name_hash(h, name, len);
|
||||
}
|
||||
|
||||
static inline struct idmap_hashent *
|
||||
idmap_alloc_id(struct idmap_hashtable *h, __u32 id)
|
||||
{
|
||||
+ idmap_alloc_hashtable(h);
|
||||
return idmap_id_hash(h, id);
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-02-07 07:12:52.585471833 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-03-14 13:08:37.462928792 -0400
|
||||
@@ -360,7 +360,7 @@ struct idmap_hashent {
|
||||
unsigned long ih_expires;
|
||||
__u32 ih_id;
|
||||
size_t ih_namelen;
|
||||
- char ih_name[IDMAP_NAMESZ];
|
||||
+ const char *ih_name;
|
||||
};
|
||||
|
||||
struct idmap_hashtable {
|
||||
@@ -424,11 +424,16 @@ void
|
||||
nfs_idmap_delete(struct nfs_client *clp)
|
||||
{
|
||||
struct idmap *idmap = clp->cl_idmap;
|
||||
+ int i;
|
||||
|
||||
if (!idmap)
|
||||
return;
|
||||
rpc_unlink(idmap->idmap_dentry);
|
||||
clp->cl_idmap = NULL;
|
||||
+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++)
|
||||
+ kfree(idmap->idmap_user_hash.h_entries[i].ih_name);
|
||||
+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++)
|
||||
+ kfree(idmap->idmap_group_hash.h_entries[i].ih_name);
|
||||
kfree(idmap);
|
||||
}
|
||||
|
||||
@@ -491,9 +496,14 @@ static void
|
||||
idmap_update_entry(struct idmap_hashent *he, const char *name,
|
||||
size_t namelen, __u32 id)
|
||||
{
|
||||
+ char *str = kmalloc(namelen + 1, GFP_KERNEL);
|
||||
+ if (str == NULL)
|
||||
+ return;
|
||||
+ kfree(he->ih_name);
|
||||
he->ih_id = id;
|
||||
- memcpy(he->ih_name, name, namelen);
|
||||
- he->ih_name[namelen] = '\0';
|
||||
+ memcpy(str, name, namelen);
|
||||
+ str[namelen] = '\0';
|
||||
+ he->ih_name = str;
|
||||
he->ih_namelen = namelen;
|
||||
he->ih_expires = jiffies + nfs_idmap_cache_timeout;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
--- linux-3.3.0-0.rc6.git2.3.fc15.armv7hl_percpu_problem/arch/arm/kernel/vmlinux.lds.S 2012-03-24 21:59:47.000000000 -0400
|
||||
+++ linux-3.3.0-0.rc6.git2.3.fc15.armv7hl_test1/arch/arm/kernel/vmlinux.lds.S 2012-03-24 15:24:50.000000000 -0400
|
||||
@@ -183,7 +183,9 @@ SECTIONS
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef CONFIG_SMP
|
||||
PERCPU_SECTION(L1_CACHE_BYTES)
|
||||
+#endif
|
||||
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
__data_loc = ALIGN(4); /* location in binary */
|
|
@ -0,0 +1,10 @@
|
|||
--- linux-2.6.42.noarch/drivers/staging/nvec/Kconfig.orig 2012-02-02 08:16:12.512727480 -0600
|
||||
+++ linux-2.6.42.noarch/drivers/staging/nvec/Kconfig 2012-02-01 18:44:56.674990109 -0600
|
||||
@@ -1,6 +1,6 @@
|
||||
config MFD_NVEC
|
||||
bool "NV Tegra Embedded Controller SMBus Interface"
|
||||
- depends on I2C && GPIOLIB && ARCH_TEGRA
|
||||
+ depends on I2C && GPIOLIB && ARCH_TEGRA && MFD_CORE=y
|
||||
help
|
||||
Say Y here to enable support for a nVidia compliant embedded
|
||||
controller.
|
|
@ -0,0 +1,105 @@
|
|||
From 2a5a5ec620a29d4ba07743c3151cdf0a417c8f8c Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Date: Thu, 2 Feb 2012 10:32:18 +0200
|
||||
Subject: [PATCH] Bluetooth: Use list _safe deleting from conn chan_list
|
||||
|
||||
Fixes possible bug when deleting element from the list in
|
||||
function hci_chan_list_flush. list_for_each_entry_rcu is used
|
||||
and after deleting element from the list we also free pointer
|
||||
and then list_entry_rcu is taken from freed pointer.
|
||||
|
||||
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Acked-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
---
|
||||
net/bluetooth/hci_conn.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
|
||||
index b074bd6..b4ecdde 100644
|
||||
--- a/net/bluetooth/hci_conn.c
|
||||
+++ b/net/bluetooth/hci_conn.c
|
||||
@@ -975,10 +975,10 @@ int hci_chan_del(struct hci_chan *chan)
|
||||
|
||||
void hci_chan_list_flush(struct hci_conn *conn)
|
||||
{
|
||||
- struct hci_chan *chan;
|
||||
+ struct hci_chan *chan, *n;
|
||||
|
||||
BT_DBG("conn %p", conn);
|
||||
|
||||
- list_for_each_entry_rcu(chan, &conn->chan_list, list)
|
||||
+ list_for_each_entry_safe(chan, n, &conn->chan_list, list)
|
||||
hci_chan_del(chan);
|
||||
}
|
||||
--
|
||||
1.7.6.5
|
||||
|
||||
From 3c4e0df028935618d052235ba85bc7079be13394 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Date: Thu, 2 Feb 2012 10:32:17 +0200
|
||||
Subject: [PATCH] Bluetooth: Use list _safe deleting from conn_hash_list
|
||||
|
||||
Use list_for_each_entry_safe which is safe version against removal
|
||||
of list entry. Otherwise we remove hci_conn element and reference
|
||||
next element which result in accessing LIST_POISON.
|
||||
|
||||
[ 95.571834] Bluetooth: unknown link type 127
|
||||
[ 95.578349] BUG: unable to handle kernel paging request at 20002000
|
||||
[ 95.580236] IP: [<20002000>] 0x20001fff
|
||||
[ 95.580763] *pde = 00000000
|
||||
[ 95.581196] Oops: 0000 [#1] SMP
|
||||
...
|
||||
[ 95.582298] Pid: 3355, comm: hciconfig Tainted: G O 3.2.0-VirttualBox
|
||||
[ 95.582298] EIP: 0060:[<20002000>] EFLAGS: 00210206 CPU: 0
|
||||
[ 95.582298] EIP is at 0x20002000
|
||||
...
|
||||
[ 95.582298] Call Trace:
|
||||
[ 95.582298] [<f8231ab6>] ? hci_conn_hash_flush+0x76/0xf0 [bluetooth]
|
||||
[ 95.582298] [<f822bcb1>] hci_dev_do_close+0xc1/0x2e0 [bluetooth]
|
||||
[ 95.582298] [<f822d679>] ? hci_dev_get+0x69/0xb0 [bluetooth]
|
||||
[ 95.582298] [<f822e1da>] hci_dev_close+0x2a/0x50 [bluetooth]
|
||||
[ 95.582298] [<f824102f>] hci_sock_ioctl+0x1af/0x3f0 [bluetooth]
|
||||
[ 95.582298] [<c11153ea>] ? handle_pte_fault+0x8a/0x8f0
|
||||
[ 95.582298] [<c146becf>] sock_ioctl+0x5f/0x260
|
||||
[ 95.582298] [<c146be70>] ? sock_fasync+0x90/0x90
|
||||
[ 95.582298] [<c1152b33>] do_vfs_ioctl+0x83/0x5b0
|
||||
[ 95.582298] [<c1563f87>] ? do_page_fault+0x297/0x500
|
||||
[ 95.582298] [<c1563cf0>] ? spurious_fault+0xd0/0xd0
|
||||
[ 95.582298] [<c107165b>] ? up_read+0x1b/0x30
|
||||
[ 95.582298] [<c1563f87>] ? do_page_fault+0x297/0x500
|
||||
[ 95.582298] [<c100aa9f>] ? init_fpu+0xef/0x160
|
||||
[ 95.582298] [<c15617c0>] ? do_debug+0x180/0x180
|
||||
[ 95.582298] [<c100a958>] ? fpu_finit+0x28/0x80
|
||||
[ 95.582298] [<c11530e7>] sys_ioctl+0x87/0x90
|
||||
[ 95.582298] [<c156795f>] sysenter_do_call+0x12/0x38
|
||||
...
|
||||
|
||||
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Acked-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
---
|
||||
net/bluetooth/hci_conn.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
|
||||
index aca71c0..b074bd6 100644
|
||||
--- a/net/bluetooth/hci_conn.c
|
||||
+++ b/net/bluetooth/hci_conn.c
|
||||
@@ -795,11 +795,11 @@ timer:
|
||||
void hci_conn_hash_flush(struct hci_dev *hdev)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
- struct hci_conn *c;
|
||||
+ struct hci_conn *c, *n;
|
||||
|
||||
BT_DBG("hdev %s", hdev->name);
|
||||
|
||||
- list_for_each_entry_rcu(c, &h->list, list) {
|
||||
+ list_for_each_entry_safe(c, n, &h->list, list) {
|
||||
c->state = BT_CLOSED;
|
||||
|
||||
hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
diff -up compat-wireless-2012-02-05/config.mk.orig compat-wireless-2012-02-05/config.mk
|
||||
--- compat-wireless-2012-02-05/config.mk.orig 2012-02-05 16:10:31.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/config.mk 2012-02-06 11:43:46.142222712 -0500
|
||||
@@ -14,6 +14,9 @@ else
|
||||
include $(KLIB_BUILD)/.config
|
||||
endif
|
||||
|
||||
+# Enable SSB module (needs to be visible in compat_autoconf.h)
|
||||
+CONFIG_SSB=m
|
||||
+
|
||||
ifneq ($(wildcard $(KLIB_BUILD)/Makefile),)
|
||||
|
||||
COMPAT_LATEST_VERSION = 3
|
||||
diff -up compat-wireless-2012-02-05/drivers/misc/eeprom/Makefile.orig compat-wireless-2012-02-05/drivers/misc/eeprom/Makefile
|
||||
--- compat-wireless-2012-02-05/drivers/misc/eeprom/Makefile.orig 2012-02-05 16:10:39.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/misc/eeprom/Makefile 2012-02-06 11:43:46.143222699 -0500
|
||||
@@ -1 +1 @@
|
||||
-obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o
|
||||
+#obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/ethernet/atheros/Makefile.orig compat-wireless-2012-02-05/drivers/net/ethernet/atheros/Makefile
|
||||
--- compat-wireless-2012-02-05/drivers/net/ethernet/atheros/Makefile.orig 2012-02-05 16:10:37.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/ethernet/atheros/Makefile 2012-02-06 11:43:46.143222699 -0500
|
||||
@@ -2,7 +2,7 @@
|
||||
# Makefile for the Atheros network device drivers.
|
||||
#
|
||||
|
||||
-obj-$(CONFIG_ATL1) += atlx/
|
||||
-obj-$(CONFIG_ATL2) += atlx/
|
||||
-obj-$(CONFIG_ATL1E) += atl1e/
|
||||
-obj-$(CONFIG_ATL1C) += atl1c/
|
||||
+#obj-$(CONFIG_ATL1) += atlx/
|
||||
+#obj-$(CONFIG_ATL2) += atlx/
|
||||
+#obj-$(CONFIG_ATL1E) += atl1e/
|
||||
+#obj-$(CONFIG_ATL1C) += atl1c/
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/usb/Makefile.orig compat-wireless-2012-02-05/drivers/net/usb/Makefile
|
||||
--- compat-wireless-2012-02-05/drivers/net/usb/Makefile.orig 2012-02-05 16:10:39.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/usb/Makefile 2012-02-06 11:45:23.531005184 -0500
|
||||
@@ -2,6 +2,6 @@
|
||||
# Makefile for USB Network drivers
|
||||
#
|
||||
|
||||
-obj-$(CONFIG_USB_NET_COMPAT_CDCETHER) += cdc_ether.o
|
||||
-obj-$(CONFIG_USB_NET_COMPAT_RNDIS_HOST) += rndis_host.o
|
||||
-obj-$(CONFIG_USB_COMPAT_USBNET) += usbnet.o
|
||||
+#obj-$(CONFIG_USB_NET_COMPAT_CDCETHER) += cdc_ether.o
|
||||
+#obj-$(CONFIG_USB_NET_COMPAT_RNDIS_HOST) += rndis_host.o
|
||||
+#obj-$(CONFIG_USB_COMPAT_USBNET) += usbnet.o
|
||||
diff -up compat-wireless-2012-02-05/Makefile.orig compat-wireless-2012-02-05/Makefile
|
||||
--- compat-wireless-2012-02-05/Makefile.orig 2012-02-05 16:10:31.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/Makefile 2012-02-06 11:43:46.145222675 -0500
|
||||
@@ -10,8 +10,8 @@ export KLIB_BUILD ?= $(KLIB)/build
|
||||
MODPROBE := /sbin/modprobe
|
||||
|
||||
ifneq ($(wildcard $(MODPROBE)),)
|
||||
-MADWIFI=$(shell $(MODPROBE) -l ath_pci)
|
||||
-OLD_IWL=$(shell $(MODPROBE) -l iwl4965)
|
||||
+MADWIFI=""
|
||||
+OLD_IWL=""
|
||||
endif
|
||||
|
||||
DESTDIR?=
|
||||
@@ -44,8 +44,8 @@ endif
|
||||
|
||||
endif
|
||||
|
||||
-obj-$(CONFIG_COMPAT_BLUETOOTH) += net/bluetooth/
|
||||
-obj-$(CONFIG_COMPAT_BLUETOOTH_MODULES) += drivers/bluetooth/
|
||||
+#obj-$(CONFIG_COMPAT_BLUETOOTH) += net/bluetooth/
|
||||
+#obj-$(CONFIG_COMPAT_BLUETOOTH_MODULES) += drivers/bluetooth/
|
||||
|
||||
else
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
diff -up compat-wireless-2011-12-01/Makefile.orig compat-wireless-2011-12-01/Makefile
|
||||
--- compat-wireless-2011-12-01/Makefile.orig 2011-12-14 09:10:01.377297637 -0500
|
||||
+++ compat-wireless-2011-12-01/Makefile 2011-12-14 09:47:36.834100534 -0500
|
||||
@@ -68,7 +68,7 @@ all: modules
|
||||
|
||||
modules: $(CREL_CHECK)
|
||||
@./scripts/check_config.sh
|
||||
- $(MAKE) -C $(KLIB_BUILD) M=$(PWD) modules
|
||||
+ $(MAKE) -C $(KLIB_BUILD) M=$(PWD) INTEGRATED_BUILD=1 modules
|
||||
@touch $@
|
||||
|
||||
bt: $(CREL_CHECK)
|
|
@ -1,611 +0,0 @@
|
|||
diff -up compat-wireless-2012-02-05/compat/crc8.c.orig compat-wireless-2012-02-05/compat/crc8.c
|
||||
--- compat-wireless-2012-02-05/compat/crc8.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/compat/crc8.c 2012-02-06 11:53:01.617278318 -0500
|
||||
@@ -14,6 +14,7 @@
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/bcma/bcma_private.h.orig compat-wireless-2012-02-05/drivers/bcma/bcma_private.h
|
||||
--- compat-wireless-2012-02-05/drivers/bcma/bcma_private.h.orig 2012-02-05 16:10:33.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/bcma/bcma_private.h 2012-02-06 11:53:01.618278306 -0500
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef LINUX_BCMA_PRIVATE_H_
|
||||
#define LINUX_BCMA_PRIVATE_H_
|
||||
|
||||
+#undef pr_fmt
|
||||
#ifndef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
#endif
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/ethernet/broadcom/b44.c.orig compat-wireless-2012-02-05/drivers/net/ethernet/broadcom/b44.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/ethernet/broadcom/b44.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/ethernet/broadcom/b44.c 2012-02-06 11:53:01.620278282 -0500
|
||||
@@ -10,6 +10,7 @@
|
||||
* Distribute under GPL.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c.orig compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c.orig 2012-02-05 16:10:33.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 2012-02-06 11:53:01.621278269 -0500
|
||||
@@ -16,6 +16,7 @@
|
||||
* File contents: support functions for PCI/PCIe
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/delay.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/dma.c.orig compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/dma.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/dma.c.orig 2012-02-05 16:10:33.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/brcm80211/brcmsmac/dma.c 2012-02-06 11:53:01.622278256 -0500
|
||||
@@ -14,6 +14,7 @@
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/slab.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/3945-mac.c.orig compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/3945-mac.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/3945-mac.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/3945-mac.c 2012-02-06 11:53:01.625278218 -0500
|
||||
@@ -27,6 +27,7 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/4965-mac.c.orig compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/4965-mac.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/4965-mac.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/iwlegacy/4965-mac.c 2012-02-06 11:53:01.630278156 -0500
|
||||
@@ -27,6 +27,7 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/cfg.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/cfg.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/cfg.c.orig 2012-02-05 16:10:35.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/cfg.c 2012-02-06 11:53:01.630278156 -0500
|
||||
@@ -6,6 +6,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/hardirq.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_cs.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_cs.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_cs.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_cs.c 2012-02-06 11:53:01.631278143 -0500
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_sdio.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_sdio.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_sdio.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_sdio.c 2012-02-06 11:53:01.631278143 -0500
|
||||
@@ -26,6 +26,7 @@
|
||||
* if_sdio_card_to_host() to pad the data.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_spi.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_spi.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_spi.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_spi.c 2012-02-06 11:53:01.631278143 -0500
|
||||
@@ -17,6 +17,7 @@
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/hardirq.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_usb.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_usb.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_usb.c.orig 2012-02-05 16:10:35.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/if_usb.c 2012-02-06 11:53:01.632278130 -0500
|
||||
@@ -2,6 +2,7 @@
|
||||
* This file contains functions used in USB interface module.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/delay.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/main.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/main.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/main.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/main.c 2012-02-06 11:53:01.632278130 -0500
|
||||
@@ -4,6 +4,7 @@
|
||||
* thread etc..
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/mesh.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/mesh.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/mesh.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/mesh.c 2012-02-06 11:53:01.633278118 -0500
|
||||
@@ -1,3 +1,4 @@
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/delay.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas/rx.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas/rx.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas/rx.c.orig 2012-02-05 16:10:35.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas/rx.c 2012-02-06 11:53:01.633278118 -0500
|
||||
@@ -2,6 +2,7 @@
|
||||
* This file contains the handling of RX in wlan driver.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/etherdevice.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/cmd.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/cmd.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/cmd.c.orig 2012-02-05 16:10:36.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/cmd.c 2012-02-06 11:53:01.633278118 -0500
|
||||
@@ -7,6 +7,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*/
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/hardirq.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/if_usb.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/if_usb.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/if_usb.c.orig 2012-02-05 16:10:36.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/if_usb.c 2012-02-06 11:53:01.634278106 -0500
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
#define DRV_NAME "lbtf_usb"
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include "libertas_tf.h"
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/main.c.orig compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/main.c
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/main.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/libertas_tf/main.c 2012-02-06 11:53:01.634278106 -0500
|
||||
@@ -7,6 +7,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*/
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/hardirq.h>
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/base.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/base.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/cam.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/cam.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192de/sw.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/hw.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/phy.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/phy.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/rf.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/rf.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/sw.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/usb.c.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/usb.c
|
||||
diff -up compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/wifi.h.orig compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/wifi.h
|
||||
--- compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/wifi.h.orig 2012-02-06 11:53:38.798813484 -0500
|
||||
+++ compat-wireless-2012-02-05/drivers/net/wireless/rtlwifi/wifi.h 2012-02-06 11:53:47.489704835 -0500
|
||||
@@ -30,6 +30,7 @@
|
||||
#ifndef __RTL_WIFI_H__
|
||||
#define __RTL_WIFI_H__
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/sched.h>
|
||||
diff -up compat-wireless-2012-02-05/net/wireless/core.c.orig compat-wireless-2012-02-05/net/wireless/core.c
|
||||
--- compat-wireless-2012-02-05/net/wireless/core.c.orig 2012-02-05 16:10:38.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/net/wireless/core.c 2012-02-06 11:53:01.640278030 -0500
|
||||
@@ -4,6 +4,7 @@
|
||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/if.h>
|
||||
diff -up compat-wireless-2012-02-05/net/wireless/lib80211.c.orig compat-wireless-2012-02-05/net/wireless/lib80211.c
|
||||
--- compat-wireless-2012-02-05/net/wireless/lib80211.c.orig 2012-02-05 16:10:31.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/net/wireless/lib80211.c 2012-02-06 11:53:01.640278030 -0500
|
||||
@@ -13,6 +13,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
diff -up compat-wireless-2012-02-05/net/wireless/lib80211_crypt_tkip.c.orig compat-wireless-2012-02-05/net/wireless/lib80211_crypt_tkip.c
|
||||
--- compat-wireless-2012-02-05/net/wireless/lib80211_crypt_tkip.c.orig 2012-02-05 16:10:31.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/net/wireless/lib80211_crypt_tkip.c 2012-02-06 11:53:01.641278018 -0500
|
||||
@@ -10,6 +10,7 @@
|
||||
* more details.
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/err.h>
|
||||
diff -up compat-wireless-2012-02-05/net/wireless/reg.c.orig compat-wireless-2012-02-05/net/wireless/reg.c
|
||||
--- compat-wireless-2012-02-05/net/wireless/reg.c.orig 2012-02-05 16:10:31.000000000 -0500
|
||||
+++ compat-wireless-2012-02-05/net/wireless/reg.c 2012-02-06 11:53:01.641278018 -0500
|
||||
@@ -42,6 +42,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
diff -up compat-wireless-2012-02-05/patches/98-pr_fmt.patch.orig compat-wireless-2012-02-05/patches/98-pr_fmt.patch
|
||||
--- compat-wireless-2012-02-05/patches/98-pr_fmt.patch.orig 2012-02-06 11:53:01.641278018 -0500
|
||||
+++ compat-wireless-2012-02-05/patches/98-pr_fmt.patch 2012-02-06 11:53:01.641278018 -0500
|
||||
@@ -0,0 +1,346 @@
|
||||
+The way the compat-* header files are included causes the default
|
||||
+pr_fmt definition from <linux/kernel.h> to be evaluated for every file.
|
||||
+Files that define pr_fmt then generate a lot of build SPAM about
|
||||
+pr_fmt being redefined.
|
||||
+
|
||||
+Eliminate the build noise by preemptively undefining pr_fmt in those
|
||||
+files that define it.
|
||||
+
|
||||
+diff -up compat-wireless-3.2-rc1-1/compat/crc8.c.pr_fmt compat-wireless-3.2-rc1-1/compat/crc8.c
|
||||
+--- compat-wireless-3.2-rc1-1/compat/crc8.c.pr_fmt 2011-11-18 15:08:04.497812086 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/compat/crc8.c 2011-11-18 15:20:09.450522691 -0500
|
||||
+@@ -14,6 +14,7 @@
|
||||
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/module.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/bcma/bcma_private.h.pr_fmt compat-wireless-3.2-rc1-1/drivers/bcma/bcma_private.h
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/bcma/bcma_private.h.pr_fmt 2011-11-18 15:08:04.522323679 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/bcma/bcma_private.h 2011-11-18 15:20:09.451522757 -0500
|
||||
+@@ -1,6 +1,7 @@
|
||||
+ #ifndef LINUX_BCMA_PRIVATE_H_
|
||||
+ #define LINUX_BCMA_PRIVATE_H_
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #ifndef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+ #endif
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/ethernet/broadcom/b44.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/ethernet/broadcom/b44.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/ethernet/broadcom/b44.c.pr_fmt 2011-11-18 15:08:04.529757401 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/ethernet/broadcom/b44.c 2011-11-18 15:20:09.453522618 -0500
|
||||
+@@ -10,6 +10,7 @@
|
||||
+ * Distribute under GPL.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/kernel.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl3945-base.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl3945-base.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl3945-base.c.pr_fmt 2011-11-18 15:08:04.531811389 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl3945-base.c 2011-11-18 15:20:09.455522411 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/kernel.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl4965-base.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl4965-base.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl4965-base.c.pr_fmt 2011-11-18 15:08:04.533811528 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/iwlegacy/iwl4965-base.c 2011-11-18 15:20:09.456520247 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/kernel.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/cfg.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/cfg.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/cfg.c.pr_fmt 2011-11-18 15:08:04.534811319 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/cfg.c 2011-11-18 15:20:09.456520247 -0500
|
||||
+@@ -6,6 +6,7 @@
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/hardirq.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_cs.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_cs.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_cs.c.pr_fmt 2011-11-18 15:08:04.534811319 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_cs.c 2011-11-18 15:20:09.457520945 -0500
|
||||
+@@ -21,6 +21,7 @@
|
||||
+
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/module.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_sdio.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_sdio.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_sdio.c.pr_fmt 2011-11-18 15:08:04.535829198 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_sdio.c 2011-11-18 15:20:09.457520945 -0500
|
||||
+@@ -26,6 +26,7 @@
|
||||
+ * if_sdio_card_to_host() to pad the data.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/kernel.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_spi.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_spi.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_spi.c.pr_fmt 2011-11-18 15:08:04.536811878 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_spi.c 2011-11-18 15:20:09.457520945 -0500
|
||||
+@@ -17,6 +17,7 @@
|
||||
+ * (at your option) any later version.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/hardirq.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_usb.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_usb.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_usb.c.pr_fmt 2011-11-18 15:08:04.536811878 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/if_usb.c 2011-11-18 15:20:09.458521084 -0500
|
||||
+@@ -2,6 +2,7 @@
|
||||
+ * This file contains functions used in USB interface module.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/delay.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/main.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/main.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/main.c.pr_fmt 2011-11-18 15:08:04.537812436 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/main.c 2011-11-18 15:20:09.458521084 -0500
|
||||
+@@ -4,6 +4,7 @@
|
||||
+ * thread etc..
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/module.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/mesh.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/mesh.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/mesh.c.pr_fmt 2011-11-18 15:08:04.537812436 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/mesh.c 2011-11-18 15:20:09.458521084 -0500
|
||||
+@@ -1,3 +1,4 @@
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/delay.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/rx.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/rx.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/rx.c.pr_fmt 2011-11-18 15:08:04.538812017 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas/rx.c 2011-11-18 15:20:09.459520455 -0500
|
||||
+@@ -2,6 +2,7 @@
|
||||
+ * This file contains the handling of RX in wlan driver.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/etherdevice.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/cmd.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/cmd.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/cmd.c.pr_fmt 2011-11-18 15:08:04.544819700 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/cmd.c 2011-11-18 15:20:09.459520455 -0500
|
||||
+@@ -7,6 +7,7 @@
|
||||
+ * the Free Software Foundation; either version 2 of the License, or (at
|
||||
+ * your option) any later version.
|
||||
+ */
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/hardirq.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/if_usb.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/if_usb.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/if_usb.c.pr_fmt 2011-11-18 15:08:04.545747064 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/if_usb.c 2011-11-18 15:20:09.459520455 -0500
|
||||
+@@ -9,6 +9,7 @@
|
||||
+ */
|
||||
+ #define DRV_NAME "lbtf_usb"
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include "libertas_tf.h"
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/main.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/main.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/main.c.pr_fmt 2011-11-18 15:08:04.545747064 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/libertas_tf/main.c 2011-11-18 15:20:09.459520455 -0500
|
||||
+@@ -7,6 +7,7 @@
|
||||
+ * the Free Software Foundation; either version 2 of the License, or (at
|
||||
+ * your option) any later version.
|
||||
+ */
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/hardirq.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/base.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/base.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/base.c.pr_fmt 2011-11-18 15:08:04.565011903 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/base.c 2011-11-18 15:20:55.315644844 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/ip.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/cam.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/cam.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/cam.c.pr_fmt 2011-11-18 15:08:04.565812364 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/cam.c 2011-11-18 15:20:55.322652946 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/export.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c.pr_fmt 2011-11-18 15:08:04.565812364 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c 2011-11-18 15:20:55.334647078 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/firmware.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c.pr_fmt 2011-11-18 15:08:04.567811877 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c 2011-11-18 15:20:55.341625637 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include "../wifi.h"
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c.pr_fmt 2011-11-18 15:08:04.567811877 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c 2011-11-18 15:20:55.342644635 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ ****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/module.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192de/sw.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192de/sw.c.pr_fmt 2011-11-18 15:08:04.568814042 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192de/sw.c 2011-11-18 15:20:55.350617325 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/vmalloc.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/hw.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/hw.c.pr_fmt 2011-11-18 15:08:04.569828848 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/hw.c 2011-11-18 15:20:55.358645682 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include "../wifi.h"
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/phy.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/phy.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/phy.c.pr_fmt 2011-11-18 15:08:04.570818023 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/phy.c 2011-11-18 15:20:55.365635904 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include "../wifi.h"
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/rf.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/rf.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/rf.c.pr_fmt 2011-11-18 15:08:04.571812156 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/rf.c 2011-11-18 15:20:55.371549230 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include "../wifi.h"
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/sw.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/sw.c.pr_fmt 2011-11-18 15:08:04.571812156 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/rtl8192se/sw.c 2011-11-18 15:20:55.379720621 -0500
|
||||
+@@ -27,6 +27,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/vmalloc.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/usb.c.pr_fmt compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/usb.c
|
||||
+--- compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/usb.c.pr_fmt 2011-11-18 15:08:04.572718638 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/drivers/net/wireless/rtlwifi/usb.c 2011-11-18 15:20:55.389173129 -0500
|
||||
+@@ -25,6 +25,7 @@
|
||||
+ *
|
||||
+ *****************************************************************************/
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/usb.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/net/wireless/core.c.pr_fmt compat-wireless-3.2-rc1-1/net/wireless/core.c
|
||||
+--- compat-wireless-3.2-rc1-1/net/wireless/core.c.pr_fmt 2011-11-18 15:08:04.573774302 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/net/wireless/core.c 2011-11-18 15:20:55.395647078 -0500
|
||||
+@@ -4,6 +4,7 @@
|
||||
+ * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/if.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/net/wireless/lib80211.c.pr_fmt compat-wireless-3.2-rc1-1/net/wireless/lib80211.c
|
||||
+--- compat-wireless-3.2-rc1-1/net/wireless/lib80211.c.pr_fmt 2011-11-18 15:08:04.573774302 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/net/wireless/lib80211.c 2011-11-18 15:20:55.405646450 -0500
|
||||
+@@ -13,6 +13,7 @@
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/module.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/net/wireless/lib80211_crypt_tkip.c.pr_fmt compat-wireless-3.2-rc1-1/net/wireless/lib80211_crypt_tkip.c
|
||||
+--- compat-wireless-3.2-rc1-1/net/wireless/lib80211_crypt_tkip.c.pr_fmt 2011-11-18 15:08:04.574811667 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/net/wireless/lib80211_crypt_tkip.c 2011-11-18 15:20:55.406648475 -0500
|
||||
+@@ -10,6 +10,7 @@
|
||||
+ * more details.
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/err.h>
|
||||
+diff -up compat-wireless-3.2-rc1-1/net/wireless/reg.c.pr_fmt compat-wireless-3.2-rc1-1/net/wireless/reg.c
|
||||
+--- compat-wireless-3.2-rc1-1/net/wireless/reg.c.pr_fmt 2011-11-18 15:08:04.575716473 -0500
|
||||
++++ compat-wireless-3.2-rc1-1/net/wireless/reg.c 2011-11-18 15:20:55.408647986 -0500
|
||||
+@@ -33,6 +33,7 @@
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
++#undef pr_fmt
|
||||
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+ #include <linux/kernel.h>
|
|
@ -26,6 +26,13 @@ CONFIG_ZBOOT_ROM_BSS=0
|
|||
|
||||
CONFIG_ATAGS_PROC=y
|
||||
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
ONFIG_CPU_IDLE_GOV_MENU=y
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_FPE_NWFPE is not set
|
||||
CONFIG_FPE_FASTFPE=y
|
||||
CONFIG_VFP=y
|
||||
|
@ -42,15 +49,12 @@ CONFIG_ARM_THUMB=y
|
|||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
|
||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
|
||||
|
||||
CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
|
||||
|
@ -104,6 +108,7 @@ CONFIG_RTC_DRV_PL031=m
|
|||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_ERRORS is not set
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
|
||||
CONFIG_ARM_UNWIND=y
|
||||
|
||||
|
@ -179,6 +184,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768
|
|||
# CONFIG_DRM_RADEON is not set
|
||||
# CONFIG_ATM_HE is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
# CONFIG_SFC is not set
|
||||
|
||||
# these all currently fail due to missing symbols __bad_udelay or
|
||||
# error: implicit declaration of function ‘iowrite32be’
|
||||
|
@ -189,11 +195,13 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768
|
|||
# drivers/input/touchscreen/eeti_ts.c:65:2: error: implicit declaration of function 'irq_to_gpio' [-Werror=implicit-function-declaration]
|
||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||
# CONFIG_TOUCHSCREEN_EGALAX is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
#
|
||||
# FIXME: Guesses, need checking
|
||||
# CONFIG_MACH_EUKREA_CPUIMX35SD is not set
|
||||
CONFIG_ARM_ERRATA_720789=y
|
||||
CONFIG_ARM_ERRATA_751472=y
|
||||
CONFIG_OMAP4_ERRATA_I688=y
|
||||
# CONFIG_FB_MX3 is not set
|
||||
# CONFIG_MX3_IPU is not set
|
||||
# CONFIG_MX3_IPU_IRQS is not set
|
||||
|
@ -209,3 +217,5 @@ CONFIG_ARM_ERRATA_751472=y
|
|||
# CONFIG_MACH_MX53_LOCO is not set
|
||||
# CONFIG_MACH_MX53_ARD is not set
|
||||
# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
|
||||
|
||||
CONFIG_OF_GPIO=y
|
||||
|
|
|
@ -1,16 +1,37 @@
|
|||
ONFIG_ARCH_HIGHBANK=y
|
||||
CONFIG_ARCH_HIGHBANK=y
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_ARM_THUMBEE is not set
|
||||
CONFIG_SWP_EMULATE=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
# CONFIG_PL310_ERRATA_588369 is not set
|
||||
# CONFIG_PL310_ERRATA_727915 is not set
|
||||
# CONFIG_ARM_ERRATA_743622 is not set
|
||||
# CONFIG_PL310_ERRATA_753970 is not set
|
||||
# CONFIG_ARM_ERRATA_754322 is not set
|
||||
# CONFIG_PL310_ERRATA_769419 is not set
|
||||
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
|
||||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
CONFIG_SATA_AHCI_PLATFORM=y
|
||||
CONFIG_ATA_SFF=y
|
||||
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_BROADCOM=y
|
||||
CONFIG_NET_CALXEDA_XGMAC=y
|
||||
|
||||
CONFIG_GPIO_PL061=y
|
||||
|
||||
CONFIG_SERIAL_AMBA_PL010=y
|
||||
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
|
||||
|
||||
# CONFIG_DVB_TDA1004X is not set
|
||||
# CONFIG_DVB_PLL is not set
|
||||
|
|
|
@ -39,7 +39,6 @@ CONFIG_ARM_ERRATA_411920=y
|
|||
CONFIG_PL310_ERRATA_588369=y
|
||||
CONFIG_PL310_ERRATA_727915=y
|
||||
CONFIG_ARM_ERRATA_364296=y
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
CONFIG_PATA_IMX=m
|
||||
CONFIG_ETHERNET=y
|
||||
|
@ -81,24 +80,10 @@ CONFIG_IMX2_WDT=m
|
|||
CONFIG_SND_SOC_PHYCORE_AC97=m
|
||||
CONFIG_SND_SOC_EUKREA_TLV320=m
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
|
||||
CONFIG_PL310_ERRATA_769419=y
|
||||
CONFIG_LEDS_RENESAS_TPU=y
|
||||
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@ CONFIG_RTC_DRV_MV=m
|
|||
CONFIG_MV_XOR=y
|
||||
CONFIG_CRYPTO_DEV_MV_CESA=m
|
||||
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ CONFIG_RCU_FANOUT=32
|
|||
# CONFIG_RCU_BOOST is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_BLK_CGROUP is not set
|
||||
# CONFIG_SCHED_AUTOGROUP is not set
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
|
@ -143,9 +142,7 @@ CONFIG_LOCAL_TIMERS=y
|
|||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=128
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_KSM is not set
|
||||
# CONFIG_CC_STACKPROTECTOR is not set
|
||||
|
@ -153,23 +150,6 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
|
|||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE=""
|
||||
# CONFIG_AUTO_ZRELADDR is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
|
@ -1050,7 +1030,6 @@ CONFIG_LIBCRC32C=y
|
|||
# CONFIG_LCD_LD9040 is not set
|
||||
# CONFIG_RTC_DRV_M41T93 is not set
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_CGROUP_PERF is not set
|
||||
# CONFIG_OPROFILE is not set
|
||||
# CONFIG_OPROFILE is not set
|
||||
# CONFIG_PATA_ARASAN_CF is not set
|
||||
|
@ -1084,7 +1063,6 @@ CONFIG_LEDS_RENESAS_TPU=y
|
|||
CONFIG_USB_RENESAS_USBHS_HCD=m
|
||||
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_SOC_OMAPTI81XX is not set
|
||||
|
|
|
@ -1,15 +1,28 @@
|
|||
CONFIG_ARCH_TEGRA=y
|
||||
|
||||
CONFIG_ARCH_TEGRA_2x_SOC=y
|
||||
CONFIG_ARCH_TEGRA_3x_SOC=y
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
CONFIG_TEGRA_PCI=y
|
||||
|
||||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
|
||||
CONFIG_MACH_HARMONY=y
|
||||
CONFIG_MACH_KAEN=y
|
||||
CONFIG_MACH_PAZ00=y
|
||||
CONFIG_MACH_SEABOARD=y
|
||||
CONFIG_MACH_TEGRA_DT=y
|
||||
CONFIG_MACH_TRIMSLICE=y
|
||||
CONFIG_MACH_WARIO=y
|
||||
CONFIG_MACH_TEGRA_DT=y
|
||||
CONFIG_MACH_VENTANA=y
|
||||
|
||||
CONFIG_TEGRA_DEBUG_UARTD=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_ARM_CPU_TOPOLOGY=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
|
||||
|
@ -46,12 +59,11 @@ CONFIG_ARM_ERRATA_720789=y
|
|||
CONFIG_SMP_ON_UP=y
|
||||
CONFIG_LOCAL_TIMERS=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
# CONFIG_NEON is not set
|
||||
# CONFIG_RFKILL_GPIO is not set
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
CONFIG_KEYBOARD_TEGRA=y
|
||||
# CONFIG_KEYBOARD_TEGRA is not set
|
||||
# CONFIG_MPCORE_WATCHDOG is not set
|
||||
CONFIG_USB_EHCI_TEGRA=y
|
||||
CONFIG_RTC_DRV_TEGRA=m
|
||||
|
@ -68,31 +80,19 @@ CONFIG_KEYBOARD_NVEC=y
|
|||
CONFIG_SERIO_NVEC_PS2=y
|
||||
CONFIG_NVEC_POWER=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_NVEC_LEDS=y
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
|
||||
CONFIG_CRYSTALHD=m
|
||||
|
||||
CONFIG_MACH_VENTANA=y
|
||||
CONFIG_PL310_ERRATA_753970=y
|
||||
CONFIG_ARM_CPU_TOPOLOGY=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_LEDS_RENESAS_TPU=y
|
||||
|
||||
# CONFIG_ARCH_TEGRA_2x_SOC is not set
|
||||
# CONFIG_ARCH_TEGRA_3x_SOC is not set
|
||||
# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
|
||||
# CONFIG_ETHERNET is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
|
@ -102,3 +102,9 @@ CONFIG_LEDS_RENESAS_TPU=y
|
|||
# CONFIG_DVB_PLL is not set
|
||||
# CONFIG_SND_SOC_TEGRA_ALC5632 is not set
|
||||
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_SYSCALL=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_PCI=y
|
||||
CONFIG_OF_PCI_IRQ=y
|
||||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
# CONFIG_CFG80211 is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
|
||||
# CONFIG_MAC80211 is not set
|
||||
|
||||
# CONFIG_BCMA is not set
|
||||
|
||||
#
|
||||
# ssb and b44 share infrastructure with b43
|
||||
#
|
||||
# CONFIG_SSB is not set
|
||||
# CONFIG_B44 is not set
|
||||
|
||||
#
|
||||
# Prevent b43 and brcmsmac from competing
|
||||
#
|
||||
# CONFIG_B43_BCMA is not set
|
||||
|
||||
#
|
||||
# These have to be turned-on again since compat-wireless does not
|
||||
# provide them...
|
||||
#
|
||||
CONFIG_CRC7=m
|
||||
CONFIG_AVERAGE=y
|
|
@ -8,7 +8,6 @@ CONFIG_DEBUG_MUTEXES=y
|
|||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
# CONFIG_PROVE_RCU_REPEATEDLY is not set
|
||||
|
|
|
@ -1057,7 +1057,7 @@ CONFIG_NET_ACT_SIMP=m
|
|||
CONFIG_NET_ACT_SKBEDIT=m
|
||||
|
||||
CONFIG_DCB=y
|
||||
# CONFIG_OPENVSWITCH is not set
|
||||
CONFIG_OPENVSWITCH=m
|
||||
CONFIG_NETPRIO_CGROUP=m
|
||||
|
||||
|
||||
|
@ -1464,15 +1464,15 @@ CONFIG_B43=m
|
|||
CONFIG_B43_PCMCIA=y
|
||||
CONFIG_B43_SDIO=y
|
||||
CONFIG_B43_BCMA=y
|
||||
CONFIG_B43_BCMA_EXTRA=y
|
||||
# CONFIG_B43_BCMA_EXTRA is not set
|
||||
CONFIG_B43_BCMA_PIO=y
|
||||
CONFIG_B43_DEBUG=y
|
||||
# CONFIG_B43_DEBUG is not set
|
||||
CONFIG_B43_PHY_LP=y
|
||||
CONFIG_B43_PHY_N=y
|
||||
CONFIG_B43_PHY_HT=y
|
||||
# CONFIG_B43_FORCE_PIO is not set
|
||||
CONFIG_B43LEGACY=m
|
||||
CONFIG_B43LEGACY_DEBUG=y
|
||||
# CONFIG_B43LEGACY_DEBUG is not set
|
||||
CONFIG_B43LEGACY_DMA=y
|
||||
CONFIG_B43LEGACY_PIO=y
|
||||
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||
|
@ -2415,6 +2415,7 @@ CONFIG_DRM_NOUVEAU_DEBUG=y
|
|||
CONFIG_DRM_I2C_CH7006=m
|
||||
CONFIG_DRM_I2C_SIL164=m
|
||||
CONFIG_DRM_VMWGFX=m
|
||||
CONFIG_DRM_VGEM=m
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
|
@ -2520,7 +2521,7 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
|
|||
#
|
||||
CONFIG_RADIO_MAXIRADIO=m
|
||||
CONFIG_RADIO_WL1273=m
|
||||
CONFIG_RADIO_WL128X=m
|
||||
# CONFIG_RADIO_WL128X is not set # depends on TI_ST which we don't enable
|
||||
|
||||
CONFIG_MEDIA_ATTACH=y
|
||||
CONFIG_MEDIA_TUNER_CUSTOMISE=y
|
||||
|
@ -3021,7 +3022,10 @@ CONFIG_USB_SUPPORT=y
|
|||
#
|
||||
# Miscellaneous USB options
|
||||
#
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
|
||||
# Deprecated:
|
||||
# CONFIG_USB_DEVICEFS is not set
|
||||
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
CONFIG_USB_SUSPEND=y
|
||||
|
||||
|
@ -3072,7 +3076,7 @@ CONFIG_USB_STORAGE_REALTEK=m
|
|||
CONFIG_REALTEK_AUTOPM=y
|
||||
CONFIG_USB_STORAGE_ENE_UB6250=m
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
CONFIG_USB_UAS=m
|
||||
# CONFIG_USB_UAS is not set
|
||||
|
||||
|
||||
#
|
||||
|
@ -3756,6 +3760,7 @@ CONFIG_DEBUG_RODATA_TEST=y
|
|||
CONFIG_DEBUG_NX_TEST=m
|
||||
CONFIG_DEBUG_SET_MODULE_RONX=y
|
||||
CONFIG_DEBUG_BOOT_PARAMS=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
# CONFIG_DEBUG_INFO_REDUCED is not set
|
||||
|
@ -3976,7 +3981,7 @@ CONFIG_IBMASR=m
|
|||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_TRACE=y
|
||||
CONFIG_PM_TRACE_RTC=y
|
||||
CONFIG_PM_TEST_SUSPEND=y
|
||||
# CONFIG_PM_TEST_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
# CONFIG_PM_OPP is not set
|
||||
|
||||
|
@ -4000,7 +4005,20 @@ CONFIG_NET_VENDOR_SMC=y
|
|||
|
||||
# CONFIG_MOUSE_ATIXL is not set
|
||||
|
||||
# CONFIG_RADIO_ADAPTERS is not set
|
||||
CONFIG_RADIO_ADAPTERS=y
|
||||
CONFIG_RADIO_TEA5764=m
|
||||
CONFIG_RADIO_SAA7706H=m
|
||||
CONFIG_RADIO_CADET=m
|
||||
CONFIG_RADIO_RTRACK=m
|
||||
CONFIG_RADIO_RTRACK2=m
|
||||
CONFIG_RADIO_AZTECH=m
|
||||
CONFIG_RADIO_GEMTEK=m
|
||||
CONFIG_RADIO_SF16FMI=m
|
||||
CONFIG_RADIO_SF16FMR2=m
|
||||
CONFIG_RADIO_TERRATEC=m
|
||||
CONFIG_RADIO_TRUST=m
|
||||
CONFIG_RADIO_TYPHOON=m
|
||||
CONFIG_RADIO_ZOLTRIX=m
|
||||
|
||||
CONFIG_SND_DARLA20=m
|
||||
CONFIG_SND_GINA20=m
|
||||
|
@ -4259,7 +4277,8 @@ CONFIG_USB_ATMEL=m
|
|||
# CONFIG_EASYCAP is not set
|
||||
# CONFIG_SOLO6X10 is not set
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
# CONFIG_R8712U is not set
|
||||
CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618)
|
||||
# CONFIG_R8712_AP is not set
|
||||
# CONFIG_ATH6K_LEGACY is not set
|
||||
# CONFIG_USB_ENESTORAGE is not set
|
||||
# CONFIG_BCM_WIMAX is not set
|
||||
|
|
109
config-nodebug
109
config-nodebug
|
@ -2,110 +2,109 @@ CONFIG_SND_VERBOSE_PRINTK=y
|
|||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
|
||||
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_PROVE_RCU is not set
|
||||
# CONFIG_PROVE_RCU_REPEATEDLY is not set
|
||||
CONFIG_DEBUG_PER_CPU_MAPS=y
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
CONFIG_CPUMASK_OFFSTACK=y
|
||||
|
||||
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
|
||||
# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
|
||||
|
||||
CONFIG_FAULT_INJECTION=y
|
||||
CONFIG_FAILSLAB=y
|
||||
CONFIG_FAIL_PAGE_ALLOC=y
|
||||
CONFIG_FAIL_MAKE_REQUEST=y
|
||||
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||
CONFIG_FAIL_IO_TIMEOUT=y
|
||||
CONFIG_FAIL_MMC_REQUEST=y
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_FAILSLAB is not set
|
||||
# CONFIG_FAIL_PAGE_ALLOC is not set
|
||||
# CONFIG_FAIL_MAKE_REQUEST is not set
|
||||
# CONFIG_FAULT_INJECTION_DEBUG_FS is not set
|
||||
# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set
|
||||
# CONFIG_FAIL_IO_TIMEOUT is not set
|
||||
# CONFIG_FAIL_MMC_REQUEST is not set
|
||||
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
|
||||
CONFIG_LOCK_STAT=y
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
||||
CONFIG_ACPI_DEBUG=y
|
||||
# CONFIG_ACPI_DEBUG is not set
|
||||
# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
|
||||
|
||||
CONFIG_DEBUG_SG=y
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
||||
CONFIG_DEBUG_WRITECOUNT=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
|
||||
CONFIG_DEBUG_OBJECTS_FREE=y
|
||||
CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
# CONFIG_DEBUG_OBJECTS_FREE is not set
|
||||
# CONFIG_DEBUG_OBJECTS_TIMERS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
|
||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||
|
||||
CONFIG_X86_PTDUMP=y
|
||||
# CONFIG_X86_PTDUMP is not set
|
||||
|
||||
CONFIG_CAN_DEBUG_DEVICES=y
|
||||
# CONFIG_CAN_DEBUG_DEVICES is not set
|
||||
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
|
||||
CONFIG_DEBUG_NOTIFIERS=y
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
|
||||
CONFIG_DMA_API_DEBUG=y
|
||||
# CONFIG_DMA_API_DEBUG is not set
|
||||
|
||||
CONFIG_MMIOTRACE=y
|
||||
# CONFIG_MMIOTRACE is not set
|
||||
|
||||
CONFIG_DEBUG_CREDENTIALS=y
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
|
||||
# off in both production debug and nodebug builds,
|
||||
# on in rawhide nodebug builds
|
||||
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
|
||||
CONFIG_EXT4_DEBUG=y
|
||||
# CONFIG_EXT4_DEBUG is not set
|
||||
|
||||
CONFIG_DEBUG_PERF_USE_VMALLOC=y
|
||||
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
|
||||
|
||||
CONFIG_JBD2_DEBUG=y
|
||||
# CONFIG_JBD2_DEBUG is not set
|
||||
|
||||
CONFIG_DEBUG_BLK_CGROUP=y
|
||||
# CONFIG_DEBUG_BLK_CGROUP is not set
|
||||
|
||||
CONFIG_DRBD_FAULT_INJECTION=y
|
||||
# CONFIG_DRBD_FAULT_INJECTION is not set
|
||||
|
||||
CONFIG_ATH_DEBUG=y
|
||||
CONFIG_CARL9170_DEBUGFS=y
|
||||
CONFIG_IWLWIFI_DEVICE_TRACING=y
|
||||
# CONFIG_ATH_DEBUG is not set
|
||||
# CONFIG_CARL9170_DEBUGFS is not set
|
||||
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
# CONFIG_DEBUG_OBJECTS_WORK is not set
|
||||
|
||||
CONFIG_DMADEVICES_DEBUG=y
|
||||
CONFIG_DMADEVICES_VDEBUG=y
|
||||
# CONFIG_DMADEVICES_DEBUG is not set
|
||||
# CONFIG_DMADEVICES_VDEBUG is not set
|
||||
|
||||
CONFIG_PM_ADVANCED_DEBUG=y
|
||||
|
||||
CONFIG_CEPH_LIB_PRETTYDEBUG=y
|
||||
CONFIG_QUOTA_DEBUG=y
|
||||
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
|
||||
# CONFIG_QUOTA_DEBUG is not set
|
||||
|
||||
CONFIG_PCI_DEFAULT_USE_CRS=y
|
||||
|
||||
CONFIG_KGDB_KDB=y
|
||||
CONFIG_KDB_KEYBOARD=y
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
|
||||
CONFIG_TEST_LIST_SORT=y
|
||||
# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set
|
||||
# CONFIG_TEST_LIST_SORT is not set
|
||||
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_DETECT_HUNG_TASK is not set
|
||||
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
|
||||
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
|
||||
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
|
||||
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024
|
||||
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
|
||||
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
|
||||
|
|
|
@ -199,6 +199,8 @@ CONFIG_PANASONIC_LAPTOP=m
|
|||
CONFIG_SAMSUNG_LAPTOP=m
|
||||
CONFIG_SONY_LAPTOP=m
|
||||
CONFIG_TOPSTAR_LAPTOP=m
|
||||
CONFIG_FUJITSU_TABLET=m
|
||||
CONFIG_AMILO_RFKILL=m
|
||||
|
||||
CONFIG_ACPI_WMI=m
|
||||
CONFIG_ACER_WMI=m
|
||||
|
@ -310,7 +312,7 @@ CONFIG_STRICT_DEVMEM=y
|
|||
# CONFIG_NO_BOOTMEM is not set
|
||||
|
||||
# CONFIG_MEMTEST is not set
|
||||
CONFIG_MAXSMP=y
|
||||
# CONFIG_MAXSMP is not set
|
||||
|
||||
|
||||
CONFIG_HP_ILO=m
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
From 04a43e2598db35b3d0ec25925bb8475b5c0a3809 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Fri, 16 Mar 2012 16:39:11 -0400
|
||||
Subject: [PATCH] drm/i915/dp: Use DRM_ERROR not WARN for sanity checks
|
||||
|
||||
These are noisy as shit and creating a ton of abrt reports. I don't
|
||||
need more, thanks. Proper fix upstream eventually.
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_dp.c | 14 ++++++++------
|
||||
1 files changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 94f860c..6bf27c9 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -331,7 +331,7 @@ intel_dp_check_edp(struct intel_dp *intel_dp)
|
||||
if (!is_edp(intel_dp))
|
||||
return;
|
||||
if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
|
||||
- WARN(1, "eDP powered off while attempting aux channel communication.\n");
|
||||
+ DRM_ERROR("eDP powered off while attempting aux channel communication.\n");
|
||||
DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
|
||||
I915_READ(PCH_PP_STATUS),
|
||||
I915_READ(PCH_PP_CONTROL));
|
||||
@@ -386,7 +386,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
|
||||
}
|
||||
|
||||
if (try == 3) {
|
||||
- WARN(1, "dp_aux_ch not started status 0x%08x\n",
|
||||
+ DRM_ERROR("dp_aux_ch not started status 0x%08x\n",
|
||||
I915_READ(ch_ctl));
|
||||
return -EBUSY;
|
||||
}
|
||||
@@ -992,8 +992,8 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
|
||||
return;
|
||||
DRM_DEBUG_KMS("Turn eDP VDD on\n");
|
||||
|
||||
- WARN(intel_dp->want_panel_vdd,
|
||||
- "eDP VDD already requested on\n");
|
||||
+ if (intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("eDP VDD already requested on\n");
|
||||
|
||||
intel_dp->want_panel_vdd = true;
|
||||
|
||||
@@ -1058,7 +1058,8 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
|
||||
return;
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
|
||||
- WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
|
||||
+ if (!intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("eDP VDD not forced on");
|
||||
|
||||
intel_dp->want_panel_vdd = false;
|
||||
|
||||
@@ -1128,7 +1129,8 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP power off\n");
|
||||
|
||||
- WARN(intel_dp->want_panel_vdd, "Cannot turn power off while VDD is on\n");
|
||||
+ if (intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("Cannot turn power off while VDD is on\n");
|
||||
|
||||
pp = ironlake_get_pp_control(dev_priv);
|
||||
pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,492 @@
|
|||
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
|
||||
index 2418429..566c468 100644
|
||||
--- a/drivers/gpu/drm/Kconfig
|
||||
+++ b/drivers/gpu/drm/Kconfig
|
||||
@@ -159,6 +159,14 @@ config DRM_SAVAGE
|
||||
Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
|
||||
chipset. If M is selected the module will be called savage.
|
||||
|
||||
+config DRM_VGEM
|
||||
+ tristate "Virtual GEM provider"
|
||||
+ depends on DRM
|
||||
+ help
|
||||
+ Choose this option to get a virtual graphics memory manager,
|
||||
+ as used by Mesa's software renderer for enhanced performance.
|
||||
+ If M is selected the module will be called vgem.
|
||||
+
|
||||
source "drivers/gpu/drm/exynos/Kconfig"
|
||||
|
||||
source "drivers/gpu/drm/vmwgfx/Kconfig"
|
||||
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
|
||||
index 0cde1b8..021bf8a 100644
|
||||
--- a/drivers/gpu/drm/Makefile
|
||||
+++ b/drivers/gpu/drm/Makefile
|
||||
@@ -34,6 +34,7 @@ obj-$(CONFIG_DRM_SIS) += sis/
|
||||
obj-$(CONFIG_DRM_SAVAGE)+= savage/
|
||||
obj-$(CONFIG_DRM_VMWGFX)+= vmwgfx/
|
||||
obj-$(CONFIG_DRM_VIA) +=via/
|
||||
+obj-$(CONFIG_DRM_VGEM) += vgem/
|
||||
obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/
|
||||
obj-$(CONFIG_DRM_EXYNOS) +=exynos/
|
||||
obj-$(CONFIG_DRM_GMA500) += gma500/
|
||||
diff --git a/drivers/gpu/drm/vgem/Makefile b/drivers/gpu/drm/vgem/Makefile
|
||||
new file mode 100644
|
||||
index 0000000..3f4c7b8
|
||||
--- /dev/null
|
||||
+++ b/drivers/gpu/drm/vgem/Makefile
|
||||
@@ -0,0 +1,4 @@
|
||||
+ccflags-y := -Iinclude/drm
|
||||
+vgem-y := vgem_drv.o
|
||||
+
|
||||
+obj-$(CONFIG_DRM_VGEM) += vgem.o
|
||||
diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
|
||||
new file mode 100644
|
||||
index 0000000..16f88ee
|
||||
--- /dev/null
|
||||
+++ b/drivers/gpu/drm/vgem/vgem_drv.c
|
||||
@@ -0,0 +1,377 @@
|
||||
+/*
|
||||
+ * Copyright 2011 Red Hat, Inc.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+ * copy of this software and associated documentation files (the "Software")
|
||||
+ * to deal in the software without restriction, including without limitation
|
||||
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
+ * license, and/or sell copies of the Software, and to permit persons to whom
|
||||
+ * them Software is furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice (including the next
|
||||
+ * paragraph) shall be included in all copies or substantial portions of the
|
||||
+ * Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER
|
||||
+ * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ *
|
||||
+ * Authors:
|
||||
+ * Adam Jackson <ajax@redhat.com>
|
||||
+ */
|
||||
+
|
||||
+/**
|
||||
+ * This is vgem, a (non-hardware-backed) GEM service. This is used by Mesa's
|
||||
+ * software renderer and the X server for efficient buffer sharing.
|
||||
+ */
|
||||
+
|
||||
+#include "drmP.h"
|
||||
+#include "drm.h"
|
||||
+#include "vgem_drm.h"
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/ramfs.h>
|
||||
+#include <linux/shmem_fs.h>
|
||||
+
|
||||
+#define DRIVER_NAME "vgem"
|
||||
+#define DRIVER_DESC "Virtual GEM provider"
|
||||
+#define DRIVER_DATE "20120112"
|
||||
+#define DRIVER_MAJOR 1
|
||||
+#define DRIVER_MINOR 0
|
||||
+
|
||||
+#define to_vgem_bo(x) container_of(x, struct drm_vgem_gem_object, base)
|
||||
+
|
||||
+struct drm_vgem_gem_object {
|
||||
+ struct drm_gem_object base;
|
||||
+ struct page **pages;
|
||||
+};
|
||||
+
|
||||
+static int vgem_load(struct drm_device *dev, unsigned long flags)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int vgem_unload(struct drm_device *dev)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void vgem_preclose(struct drm_device *dev, struct drm_file *file)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static void vgem_lastclose(struct drm_device *dev)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_init_object(struct drm_gem_object *obj)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void vgem_gem_put_pages(struct drm_vgem_gem_object *obj)
|
||||
+{
|
||||
+ int num_pages = obj->base.size / PAGE_SIZE;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < num_pages; i++) {
|
||||
+ page_cache_release(obj->pages[i]);
|
||||
+ }
|
||||
+
|
||||
+ drm_free_large(obj->pages);
|
||||
+ obj->pages = NULL;
|
||||
+}
|
||||
+
|
||||
+static void vgem_gem_free_object(struct drm_gem_object *obj)
|
||||
+{
|
||||
+ struct drm_vgem_gem_object *vgem_obj = to_vgem_bo(obj);
|
||||
+
|
||||
+ if (obj)
|
||||
+ drm_gem_free_mmap_offset(obj);
|
||||
+
|
||||
+ drm_gem_object_release(obj);
|
||||
+
|
||||
+ if (vgem_obj->pages)
|
||||
+ vgem_gem_put_pages(vgem_obj);
|
||||
+
|
||||
+ kfree(vgem_obj);
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_get_pages(struct drm_vgem_gem_object *obj)
|
||||
+{
|
||||
+ struct address_space *mapping;
|
||||
+ gfp_t gfpmask = __GFP_NORETRY | __GFP_NOWARN;
|
||||
+ int num_pages, i, ret = 0;
|
||||
+
|
||||
+ num_pages = obj->base.size / PAGE_SIZE;
|
||||
+
|
||||
+ if (!obj->pages) {
|
||||
+ obj->pages = drm_malloc_ab(num_pages, sizeof(struct page *));
|
||||
+ if (obj->pages == NULL)
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping;
|
||||
+ gfpmask |= mapping_gfp_mask(mapping);
|
||||
+
|
||||
+ if (WARN_ON(mapping == NULL))
|
||||
+ return VM_FAULT_SIGBUS;
|
||||
+
|
||||
+ for (i = 0; i < num_pages; i++) {
|
||||
+ struct page *page;
|
||||
+ page = shmem_read_mapping_page_gfp(mapping, i, gfpmask);
|
||||
+ if (IS_ERR(page)) {
|
||||
+ ret = PTR_ERR(page);
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+ obj->pages[i] = page;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+err_out:
|
||||
+ while (i--)
|
||||
+ page_cache_release(obj->pages[i]);
|
||||
+ drm_free_large(obj->pages);
|
||||
+ obj->pages = NULL;
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||
+{
|
||||
+ struct drm_vgem_gem_object *obj = to_vgem_bo(vma->vm_private_data);
|
||||
+ loff_t num_pages;
|
||||
+ pgoff_t page_offset;
|
||||
+ int ret;
|
||||
+
|
||||
+ /* We don't use vmf->pgoff since that has the fake offset */
|
||||
+ page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >>
|
||||
+ PAGE_SHIFT;
|
||||
+
|
||||
+ num_pages = obj->base.size / PAGE_SIZE;
|
||||
+
|
||||
+ if (WARN_ON(page_offset > num_pages))
|
||||
+ return VM_FAULT_SIGBUS;
|
||||
+
|
||||
+ ret = vgem_gem_get_pages(obj);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = vm_insert_page(vma, (unsigned long)vmf->virtual_address,
|
||||
+ obj->pages[page_offset]);
|
||||
+
|
||||
+ /* Pretty dumb handler for now */
|
||||
+ switch (ret) {
|
||||
+ case 0:
|
||||
+ case -ERESTARTSYS:
|
||||
+ case -EINTR:
|
||||
+ return VM_FAULT_NOPAGE;
|
||||
+ default:
|
||||
+ return VM_FAULT_SIGBUS;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const struct vm_operations_struct vgem_gem_vm_ops = {
|
||||
+ .fault = vgem_gem_fault,
|
||||
+ .open = drm_gem_vm_open,
|
||||
+ .close = drm_gem_vm_close,
|
||||
+};
|
||||
+
|
||||
+/* ioctls */
|
||||
+
|
||||
+static struct drm_gem_object *vgem_gem_create(struct drm_device *dev,
|
||||
+ struct drm_file *file,
|
||||
+ unsigned int *handle,
|
||||
+ unsigned long size)
|
||||
+{
|
||||
+ struct drm_vgem_gem_object *obj;
|
||||
+ struct drm_gem_object *gem_object;
|
||||
+ int err;
|
||||
+
|
||||
+ size = roundup(size, PAGE_SIZE);
|
||||
+
|
||||
+ obj = kzalloc(sizeof(*obj), GFP_KERNEL);
|
||||
+ if (!obj)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ gem_object = &obj->base;
|
||||
+
|
||||
+ if ((err = drm_gem_object_init(dev, gem_object, size)))
|
||||
+ goto out;
|
||||
+
|
||||
+ if ((err = drm_gem_create_mmap_offset(gem_object)))
|
||||
+ goto mmap_out;
|
||||
+
|
||||
+ if ((err = drm_gem_handle_create(file, gem_object, handle)))
|
||||
+ goto handle_out;
|
||||
+
|
||||
+ drm_gem_object_unreference_unlocked(gem_object);
|
||||
+
|
||||
+ return gem_object;
|
||||
+
|
||||
+handle_out:
|
||||
+ drm_gem_free_mmap_offset(gem_object);
|
||||
+
|
||||
+mmap_out:
|
||||
+ drm_gem_object_release(gem_object);
|
||||
+
|
||||
+out:
|
||||
+ kfree(gem_object);
|
||||
+
|
||||
+ return ERR_PTR(err);
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_create_ioctl(struct drm_device *dev, void *data,
|
||||
+ struct drm_file *file)
|
||||
+{
|
||||
+ struct vgem_gem_create *args = data;
|
||||
+ struct drm_gem_object *gem_object;
|
||||
+
|
||||
+ gem_object = vgem_gem_create(dev, file, &args->handle, args->size);
|
||||
+
|
||||
+ if (IS_ERR(gem_object))
|
||||
+ return PTR_ERR(gem_object);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_mmap_ioctl(struct drm_device *dev, void *data,
|
||||
+ struct drm_file *file)
|
||||
+{
|
||||
+ struct vgem_gem_mmap *args = data;
|
||||
+ struct drm_gem_object *obj;
|
||||
+
|
||||
+ obj = drm_gem_object_lookup(dev, file, args->handle);
|
||||
+ if (!obj)
|
||||
+ return -ENOENT;
|
||||
+
|
||||
+ obj->filp->private_data = obj;
|
||||
+
|
||||
+ BUG_ON(!obj->map_list.map);
|
||||
+
|
||||
+ args->mapped = (uint64_t)obj->map_list.hash.key << PAGE_SHIFT;
|
||||
+
|
||||
+ drm_gem_object_unreference_unlocked(obj);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int vgem_gem_getparam_ioctl(struct drm_device *dev, void *data,
|
||||
+ struct drm_file *file)
|
||||
+{
|
||||
+ struct vgem_gem_getparam *args = data;
|
||||
+ int value=0, ret;
|
||||
+
|
||||
+ switch (args->param) {
|
||||
+ case VGEM_PARAM_IS_VGEM:
|
||||
+ value = 1;
|
||||
+ }
|
||||
+
|
||||
+ ret = copy_to_user(args->value, &value, sizeof(int));
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static struct drm_ioctl_desc vgem_ioctls[] = {
|
||||
+ DRM_IOCTL_DEF_DRV(VGEM_GEM_CREATE, vgem_gem_create_ioctl,
|
||||
+ DRM_UNLOCKED | DRM_AUTH),
|
||||
+ DRM_IOCTL_DEF_DRV(VGEM_GEM_MMAP, vgem_gem_mmap_ioctl,
|
||||
+ DRM_UNLOCKED | DRM_AUTH),
|
||||
+ DRM_IOCTL_DEF_DRV(VGEM_GEM_GETPARAM, vgem_gem_getparam_ioctl,
|
||||
+ DRM_UNLOCKED),
|
||||
+};
|
||||
+
|
||||
+static const struct file_operations vgem_driver_fops = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .open = drm_open,
|
||||
+ .mmap = drm_gem_mmap,
|
||||
+ .poll = drm_poll,
|
||||
+ .read = drm_read,
|
||||
+ .unlocked_ioctl = drm_ioctl,
|
||||
+ .release = drm_release,
|
||||
+};
|
||||
+
|
||||
+static struct drm_driver vgem_driver = {
|
||||
+ .driver_features = DRIVER_BUS_PLATFORM | DRIVER_GEM,
|
||||
+ .load = vgem_load,
|
||||
+ .unload = vgem_unload,
|
||||
+ .preclose = vgem_preclose,
|
||||
+ .lastclose = vgem_lastclose,
|
||||
+ .gem_init_object = vgem_gem_init_object,
|
||||
+ .gem_free_object = vgem_gem_free_object,
|
||||
+ .gem_vm_ops = &vgem_gem_vm_ops,
|
||||
+ .ioctls = vgem_ioctls,
|
||||
+ .fops = &vgem_driver_fops,
|
||||
+ .name = DRIVER_NAME,
|
||||
+ .desc = DRIVER_DESC,
|
||||
+ .date = DRIVER_DATE,
|
||||
+ .major = DRIVER_MAJOR,
|
||||
+ .minor = DRIVER_MINOR,
|
||||
+};
|
||||
+
|
||||
+static int vgem_platform_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ vgem_driver.num_ioctls = DRM_ARRAY_SIZE(vgem_ioctls);
|
||||
+
|
||||
+ return drm_platform_init(&vgem_driver, pdev);
|
||||
+}
|
||||
+
|
||||
+static int vgem_platform_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ drm_platform_exit(&vgem_driver, pdev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct platform_driver vgem_platform_driver = {
|
||||
+ .probe = vgem_platform_probe,
|
||||
+ .remove = __devexit_p(vgem_platform_remove),
|
||||
+ .driver = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .name = DRIVER_NAME,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct platform_device *vgem_device;
|
||||
+
|
||||
+static int __init vgem_init(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if ((ret = platform_driver_register(&vgem_platform_driver)))
|
||||
+ return ret;
|
||||
+
|
||||
+ vgem_device = platform_device_alloc("vgem", -1);
|
||||
+ if (!vgem_device) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ret = platform_device_add(vgem_device);
|
||||
+ if (!ret)
|
||||
+ return 0;
|
||||
+
|
||||
+out:
|
||||
+ platform_device_put(vgem_device);
|
||||
+ platform_driver_unregister(&vgem_platform_driver);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void __exit vgem_exit(void)
|
||||
+{
|
||||
+ platform_device_unregister(vgem_device);
|
||||
+ platform_driver_unregister(&vgem_platform_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(vgem_init);
|
||||
+module_exit(vgem_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Red Hat, Inc.");
|
||||
+MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
+MODULE_LICENSE("GPL and additional rights");
|
||||
diff --git a/include/drm/vgem_drm.h b/include/drm/vgem_drm.h
|
||||
new file mode 100644
|
||||
index 0000000..df83503
|
||||
--- /dev/null
|
||||
+++ b/include/drm/vgem_drm.h
|
||||
@@ -0,0 +1,62 @@
|
||||
+/*
|
||||
+ * Copyright 2011 Red Hat, Inc.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+ * copy of this software and associated documentation files (the "Software")
|
||||
+ * to deal in the software without restriction, including without limitation
|
||||
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
+ * license, and/or sell copies of the Software, and to permit persons to whom
|
||||
+ * them Software is furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice (including the next
|
||||
+ * paragraph) shall be included in all copies or substantial portions of the
|
||||
+ * Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER
|
||||
+ * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef VGEM_DRM_H
|
||||
+#define VGEM_DRM_H
|
||||
+
|
||||
+/* Bare API largely ripped off from exynos driver */
|
||||
+
|
||||
+struct vgem_gem_create {
|
||||
+ unsigned int size;
|
||||
+ unsigned int flags;
|
||||
+ unsigned int handle;
|
||||
+};
|
||||
+
|
||||
+struct vgem_gem_mmap {
|
||||
+ unsigned int handle;
|
||||
+ unsigned int size;
|
||||
+ uint64_t mapped;
|
||||
+};
|
||||
+
|
||||
+struct vgem_gem_getparam {
|
||||
+#define VGEM_PARAM_IS_VGEM 1
|
||||
+ unsigned int param;
|
||||
+ unsigned int *value;
|
||||
+};
|
||||
+
|
||||
+#define DRM_VGEM_GEM_CREATE 0x00
|
||||
+#define DRM_VGEM_GEM_MMAP 0x01
|
||||
+#define DRM_VGEM_GEM_GETPARAM 0x02
|
||||
+
|
||||
+#define DRM_IOCTL_VGEM_GEM_CREATE \
|
||||
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VGEM_GEM_CREATE, \
|
||||
+ struct vgem_gem_create)
|
||||
+
|
||||
+#define DRM_IOCTL_VGEM_GEM_MMAP \
|
||||
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VGEM_GEM_MMAP, \
|
||||
+ struct vgem_gem_mmap)
|
||||
+
|
||||
+#define DRM_IOCTL_VGEM_GEM_GETPARAM \
|
||||
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VGEM_GEM_GETPARAM, \
|
||||
+ struct vgem_gem_getparam)
|
||||
+
|
||||
+#endif
|
|
@ -0,0 +1,82 @@
|
|||
From a0ade1deb86d2325aecc36272bb4505a6eec9235 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Mon, 20 Feb 2012 23:02:06 -0500
|
||||
Subject: [PATCH] ext4: fix resize when resizing within single group
|
||||
|
||||
When resizing file system in the way that the new size of the file
|
||||
system is still in the same group (no new groups are added), then we can
|
||||
hit a BUG_ON in ext4_alloc_group_tables()
|
||||
|
||||
BUG_ON(flex_gd->count == 0 || group_data == NULL);
|
||||
|
||||
because flex_gd->count is zero. The reason is the missing check for such
|
||||
case, so the code always extend the last group fully and then attempt to
|
||||
add more groups, but at that time n_blocks_count is actually smaller
|
||||
than o_blocks_count.
|
||||
|
||||
It can be easily reproduced like this:
|
||||
|
||||
mkfs.ext4 -b 4096 /dev/sda 30M
|
||||
mount /dev/sda /mnt/test
|
||||
resize2fs /dev/sda 50M
|
||||
|
||||
Fix this by checking whether the resize happens within the singe group
|
||||
and only add that many blocks into the last group to satisfy user
|
||||
request. Then o_blocks_count == n_blocks_count and the resize will exit
|
||||
successfully without and attempt to add more groups into the fs.
|
||||
|
||||
Also fix mixing together block number and blocks count which might be
|
||||
confusing and can easily lead to off-by-one errors (but it is actually
|
||||
not the case here since the two occurrence of this mix-up will cancel
|
||||
each other).
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Reported-by: Milan Broz <mbroz@redhat.com>
|
||||
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
---
|
||||
fs/ext4/resize.c | 14 ++++++++------
|
||||
1 files changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
|
||||
index f9d948f..3fed79d 100644
|
||||
--- a/fs/ext4/resize.c
|
||||
+++ b/fs/ext4/resize.c
|
||||
@@ -1582,7 +1582,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
||||
ext4_fsblk_t o_blocks_count;
|
||||
ext4_group_t o_group;
|
||||
ext4_group_t n_group;
|
||||
- ext4_grpblk_t offset;
|
||||
+ ext4_grpblk_t offset, add;
|
||||
unsigned long n_desc_blocks;
|
||||
unsigned long o_desc_blocks;
|
||||
unsigned long desc_blocks;
|
||||
@@ -1605,7 +1605,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
||||
return 0;
|
||||
|
||||
ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset);
|
||||
- ext4_get_group_no_and_offset(sb, o_blocks_count, &o_group, &offset);
|
||||
+ ext4_get_group_no_and_offset(sb, o_blocks_count - 1, &o_group, &offset);
|
||||
|
||||
n_desc_blocks = (n_group + EXT4_DESC_PER_BLOCK(sb)) /
|
||||
EXT4_DESC_PER_BLOCK(sb);
|
||||
@@ -1634,10 +1634,12 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
||||
}
|
||||
brelse(bh);
|
||||
|
||||
- if (offset != 0) {
|
||||
- /* extend the last group */
|
||||
- ext4_grpblk_t add;
|
||||
- add = EXT4_BLOCKS_PER_GROUP(sb) - offset;
|
||||
+ /* extend the last group */
|
||||
+ if (n_group == o_group)
|
||||
+ add = n_blocks_count - o_blocks_count;
|
||||
+ else
|
||||
+ add = EXT4_BLOCKS_PER_GROUP(sb) - (offset + 1);
|
||||
+ if (add > 0) {
|
||||
err = ext4_group_extend_no_check(sb, o_blocks_count, add);
|
||||
if (err)
|
||||
goto out;
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -0,0 +1,287 @@
|
|||
commit b94887bbc0621e1e8402e7f0ec4bc3adf46c9a6e
|
||||
Author: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Date: Fri Feb 17 12:42:08 2012 -0500
|
||||
|
||||
Freeze all filesystems during system suspend and (kernel-driven)
|
||||
hibernation by calling freeze_supers() for all superblocks and thaw
|
||||
them during the subsequent resume with the help of thaw_supers().
|
||||
|
||||
This makes filesystems stay in a consistent state in case something
|
||||
goes wrong between system suspend (or hibernation) and the subsequent
|
||||
resume (e.g. journal replays won't be necessary in those cases). In
|
||||
particular, this should help to solve a long-standing issue that, in
|
||||
some cases, during resume from hibernation the boot loader causes the
|
||||
journal to be replied for the filesystem containing the kernel image
|
||||
and/or initrd causing it to become inconsistent with the information
|
||||
stored in the hibernation image.
|
||||
|
||||
The user-space-driven hibernation (s2disk) is not covered by this
|
||||
change, because the freezing of filesystems prevents s2disk from
|
||||
accessing device special files it needs to do its job.
|
||||
|
||||
This change is based on earlier work by Nigel Cunningham.
|
||||
|
||||
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
|
||||
Rebased to 3.3-rc3 by Josh Boyer <jwboyer@redhat.com>
|
||||
|
||||
diff --git a/fs/super.c b/fs/super.c
|
||||
index 6015c02..c8057fa 100644
|
||||
--- a/fs/super.c
|
||||
+++ b/fs/super.c
|
||||
@@ -594,6 +594,79 @@ void iterate_supers_type(struct file_system_type *type,
|
||||
EXPORT_SYMBOL(iterate_supers_type);
|
||||
|
||||
/**
|
||||
+ * thaw_supers - call thaw_super() for all superblocks
|
||||
+ */
|
||||
+void thaw_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ list_for_each_entry(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_flags & MS_FROZEN) {
|
||||
+ thaw_super(sb);
|
||||
+ sb->s_flags &= ~MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * freeze_supers - call freeze_super() for all superblocks
|
||||
+ */
|
||||
+int freeze_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+ int error = 0;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ /*
|
||||
+ * Freeze in reverse order so filesystems depending on others are
|
||||
+ * frozen in the right order (eg. loopback on ext3).
|
||||
+ */
|
||||
+ list_for_each_entry_reverse(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_root && sb->s_frozen != SB_FREEZE_TRANS
|
||||
+ && !(sb->s_flags & MS_RDONLY)) {
|
||||
+ error = freeze_super(sb);
|
||||
+ if (!error)
|
||||
+ sb->s_flags |= MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (error)
|
||||
+ break;
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (error)
|
||||
+ thaw_supers();
|
||||
+
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
* get_super - get the superblock of a device
|
||||
* @bdev: device to get the superblock for
|
||||
*
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index 386da09..a164f4a 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -210,6 +210,7 @@ struct inodes_stat_t {
|
||||
#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
|
||||
#define MS_I_VERSION (1<<23) /* Update inode I_version field */
|
||||
#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
|
||||
+#define MS_FROZEN (1<<25) /* Frozen filesystem */
|
||||
#define MS_NOSEC (1<<28)
|
||||
#define MS_BORN (1<<29)
|
||||
#define MS_ACTIVE (1<<30)
|
||||
@@ -2501,6 +2502,8 @@ extern void drop_super(struct super_block *sb);
|
||||
extern void iterate_supers(void (*)(struct super_block *, void *), void *);
|
||||
extern void iterate_supers_type(struct file_system_type *,
|
||||
void (*)(struct super_block *, void *), void *);
|
||||
+extern int freeze_supers(void);
|
||||
+extern void thaw_supers(void);
|
||||
|
||||
extern int dcache_dir_open(struct inode *, struct file *);
|
||||
extern int dcache_dir_close(struct inode *, struct file *);
|
||||
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
|
||||
index 6d6d288..492fc62 100644
|
||||
--- a/kernel/power/hibernate.c
|
||||
+++ b/kernel/power/hibernate.c
|
||||
@@ -626,12 +626,17 @@ int hibernate(void)
|
||||
if (error)
|
||||
goto Finish;
|
||||
|
||||
- error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ error = freeze_supers();
|
||||
if (error)
|
||||
goto Thaw;
|
||||
+
|
||||
+ error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ if (error)
|
||||
+ goto Thaw_fs;
|
||||
+
|
||||
if (freezer_test_done) {
|
||||
freezer_test_done = false;
|
||||
- goto Thaw;
|
||||
+ goto Thaw_fs;
|
||||
}
|
||||
|
||||
if (in_suspend) {
|
||||
@@ -655,6 +660,8 @@ int hibernate(void)
|
||||
pr_debug("PM: Image restored successfully.\n");
|
||||
}
|
||||
|
||||
+ Thaw_fs:
|
||||
+ thaw_supers();
|
||||
Thaw:
|
||||
thaw_processes();
|
||||
Finish:
|
||||
diff --git a/kernel/power/power.h b/kernel/power/power.h
|
||||
index 21724ee..40d6f64 100644
|
||||
--- a/kernel/power/power.h
|
||||
+++ b/kernel/power/power.h
|
||||
@@ -1,3 +1,4 @@
|
||||
+#include <linux/fs.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/suspend_ioctls.h>
|
||||
#include <linux/utsname.h>
|
||||
@@ -227,45 +228,3 @@ enum {
|
||||
#define TEST_MAX (__TEST_AFTER_LAST - 1)
|
||||
|
||||
extern int pm_test_level;
|
||||
-
|
||||
-#ifdef CONFIG_SUSPEND_FREEZER
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- int error;
|
||||
-
|
||||
- error = freeze_processes();
|
||||
-
|
||||
- /*
|
||||
- * freeze_processes() automatically thaws every task if freezing
|
||||
- * fails. So we need not do anything extra upon error.
|
||||
- */
|
||||
- if (error)
|
||||
- goto Finish;
|
||||
-
|
||||
- error = freeze_kernel_threads();
|
||||
-
|
||||
- /*
|
||||
- * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
- * failure. So we have to thaw the userspace tasks ourselves.
|
||||
- */
|
||||
- if (error)
|
||||
- thaw_processes();
|
||||
-
|
||||
- Finish:
|
||||
- return error;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
- thaw_processes();
|
||||
-}
|
||||
-#else
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
-}
|
||||
-#endif
|
||||
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
||||
index 4fd51be..5f51fc7 100644
|
||||
--- a/kernel/power/suspend.c
|
||||
+++ b/kernel/power/suspend.c
|
||||
@@ -29,6 +29,62 @@
|
||||
|
||||
#include "power.h"
|
||||
|
||||
+#ifdef CONFIG_SUSPEND_FREEZER
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ error = freeze_processes();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_processes() automatically thaws every task if freezing
|
||||
+ * fails. So we need not do anything extra upon error.
|
||||
+ */
|
||||
+
|
||||
+ if (error)
|
||||
+ goto Finish;
|
||||
+
|
||||
+ error = freeze_supers();
|
||||
+ if (error) {
|
||||
+ thaw_processes();
|
||||
+ goto Finish;
|
||||
+ }
|
||||
+
|
||||
+ error = freeze_kernel_threads();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
+ * failure. So we have to thaw the userspace tasks ourselves.
|
||||
+ */
|
||||
+ if (error) {
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+ }
|
||||
+
|
||||
+Finish:
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+}
|
||||
+
|
||||
+#else /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#endif /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
const char *const pm_states[PM_SUSPEND_MAX] = {
|
||||
[PM_SUSPEND_STANDBY] = "standby",
|
||||
[PM_SUSPEND_MEM] = "mem",
|
|
@ -0,0 +1,43 @@
|
|||
From 81a06eed2491273b7d6d274ae4be1d333c100ab0 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Langsdorf <mark.langsdorf@calxeda.com>
|
||||
Date: Mon, 12 Mar 2012 06:28:19 -0400
|
||||
Subject: [PATCH] highbank: export clock functions
|
||||
|
||||
Signed-off-by: Mark Langsdorf <mark.langsdorf@calxeda.com>
|
||||
---
|
||||
arch/arm/mach-highbank/clock.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git diff -up linux-3.2-rc4.orig/arch/arm/mach-highbank/clock.c diff -up linux-3.2-rc4/arch/arm/mach-highbank/clock.c
|
||||
index c25a2ae..cdbc575 100644
|
||||
--- a/arch/arm/mach-highbank/clock.c
|
||||
+++ b/arch/arm/mach-highbank/clock.c
|
||||
@@ -27,14 +27,17 @@ int clk_enable(struct clk *clk)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(clk_enable);
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{}
|
||||
+EXPORT_SYMBOL_GPL(clk_disable);
|
||||
|
||||
unsigned long clk_get_rate(struct clk *clk)
|
||||
{
|
||||
return clk->rate;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(clk_get_rate);
|
||||
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
@@ -45,6 +48,7 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(clk_set_rate);
|
||||
|
||||
static struct clk eclk = { .rate = 200000000 };
|
||||
static struct clk pclk = { .rate = 150000000 };
|
||||
--
|
||||
1.7.9.1
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
--- a/drivers/platform/x86/intel_ips.c
|
||||
+++ a/drivers/platform/x86/intel_ips.c
|
||||
@@ -1603,6 +1603,12 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
goto error_unmap;
|
||||
}
|
||||
|
||||
+ /* No IRQ assigned is a BIOS failure... */
|
||||
+ if (dev->irq <= 0) {
|
||||
+ ret = -ENODEV;
|
||||
+ goto error_unmap;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* IRQ handler for ME interaction
|
||||
* Note: don't use MSI here as the PCH has bugs.
|
|
@ -0,0 +1,91 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Eric Sandeen <sandeen@redhat.com>
|
||||
Newsgroups: gmane.comp.file-systems.ext4
|
||||
Subject: [PATCH] jbd2: clear BH_Delay & BH_Unwritten in journal_unmap_buffer
|
||||
Date: Tue, 07 Feb 2012 16:07:20 -0600
|
||||
Lines: 42
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <4F31A098.4050601@redhat.com>
|
||||
NNTP-Posting-Host: plane.gmane.org
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset=ISO-8859-1
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Trace: dough.gmane.org 1328656072 12026 80.91.229.3 (7 Feb 2012 23:07:52 GMT)
|
||||
X-Complaints-To: usenet@dough.gmane.org
|
||||
NNTP-Posting-Date: Tue, 7 Feb 2012 23:07:52 +0000 (UTC)
|
||||
To: ext4 development <linux-ext4@vger.kernel.org>
|
||||
Original-X-From: linux-ext4-owner@vger.kernel.org Wed Feb 08 00:07:52 2012
|
||||
Return-path: <linux-ext4-owner@vger.kernel.org>
|
||||
Envelope-to: gcfe-linux-ext4@plane.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by plane.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-ext4-owner@vger.kernel.org>)
|
||||
id 1Ruu8d-0000lK-5P
|
||||
for gcfe-linux-ext4@plane.gmane.org; Wed, 08 Feb 2012 00:07:51 +0100
|
||||
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1756187Ab2BGXHt (ORCPT <rfc822;gcfe-linux-ext4@m.gmane.org>);
|
||||
Tue, 7 Feb 2012 18:07:49 -0500
|
||||
Original-Received: from mx1.redhat.com ([209.132.183.28]:19432 "EHLO mx1.redhat.com"
|
||||
rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
|
||||
id S1753992Ab2BGXHs (ORCPT <rfc822;linux-ext4@vger.kernel.org>);
|
||||
Tue, 7 Feb 2012 18:07:48 -0500
|
||||
Original-Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])
|
||||
by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q17N7dj0027622
|
||||
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
|
||||
for <linux-ext4@vger.kernel.org>; Tue, 7 Feb 2012 18:07:48 -0500
|
||||
Original-Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1])
|
||||
by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q17M7Kgt001990
|
||||
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
|
||||
for <linux-ext4@vger.kernel.org>; Tue, 7 Feb 2012 17:07:21 -0500
|
||||
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0
|
||||
X-Enigmail-Version: 1.3.5
|
||||
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11
|
||||
Original-Sender: linux-ext4-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-ext4.vger.kernel.org>
|
||||
X-Mailing-List: linux-ext4@vger.kernel.org
|
||||
Xref: news.gmane.org gmane.comp.file-systems.ext4:30623
|
||||
Archived-At: <http://permalink.gmane.org/gmane.comp.file-systems.ext4/30623>
|
||||
|
||||
journal_unmap_buffer()'s zap_buffer: code clears a lot of buffer head
|
||||
state ala discard_buffer(), but does not touch _Delay or _Unwritten
|
||||
as discard_buffer() does.
|
||||
|
||||
This can be problematic in some areas of the ext4 code which assume
|
||||
that if they have found a buffer marked unwritten or delay, then it's
|
||||
a live one. Perhaps those spots should check whether it is mapped
|
||||
as well, but if jbd2 is going to tear down a buffer, let's really
|
||||
tear it down completely.
|
||||
|
||||
Without this I get some fsx failures on sub-page-block filesystems
|
||||
up until v3.2, at which point 4e96b2dbbf1d7e81f22047a50f862555a6cb87cb
|
||||
and 189e868fa8fdca702eb9db9d8afc46b5cb9144c9 make the failures go
|
||||
away, because buried within that large change is some more flag
|
||||
clearing. I still think it's worth doing in jbd2, since
|
||||
->invalidatepage leads here directly, and it's the right place
|
||||
to clear away these flags.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
|
||||
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
|
||||
index 35ae096..52653306 100644
|
||||
--- a/fs/jbd2/transaction.c
|
||||
+++ b/fs/jbd2/transaction.c
|
||||
@@ -1949,6 +1949,8 @@ zap_buffer_unlocked:
|
||||
clear_buffer_mapped(bh);
|
||||
clear_buffer_req(bh);
|
||||
clear_buffer_new(bh);
|
||||
+ clear_buffer_delay(bh);
|
||||
+ clear_buffer_unwritten(bh);
|
||||
bh->b_bdev = NULL;
|
||||
return may_free;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
|
549
kernel.spec
549
kernel.spec
|
@ -6,7 +6,7 @@ Summary: The Linux kernel
|
|||
# For a stable, released kernel, released_kernel should be 1. For rawhide
|
||||
# and/or a kernel built from an rc or git snapshot, released_kernel should
|
||||
# be 0.
|
||||
%global released_kernel 0
|
||||
%global released_kernel 1
|
||||
|
||||
# Save original buildid for later if it's defined
|
||||
%if 0%{?buildid:1}
|
||||
|
@ -23,7 +23,7 @@ Summary: The Linux kernel
|
|||
#
|
||||
# (Uncomment the '#' and both spaces below to set the buildid.)
|
||||
#
|
||||
# % define buildid .local
|
||||
%define buildid .jcm2
|
||||
###################################################################
|
||||
|
||||
# The buildid can also be specified on the rpmbuild command line
|
||||
|
@ -54,13 +54,13 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 2
|
||||
%global baserelease 5
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
|
||||
# which yields a base_sublevel of 21.
|
||||
%define base_sublevel 2
|
||||
%define base_sublevel 3
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
@ -85,9 +85,9 @@ Summary: The Linux kernel
|
|||
# The next upstream release sublevel (base_sublevel+1)
|
||||
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
|
||||
# The rc snapshot level
|
||||
%define rcrev 2
|
||||
%define rcrev 0
|
||||
# The git snapshot level
|
||||
%define gitrev 5
|
||||
%define gitrev 0
|
||||
# Set rpm version accordingly
|
||||
%define rpmversion 3.%{upstream_sublevel}.0
|
||||
%endif
|
||||
|
@ -152,13 +152,10 @@ Summary: The Linux kernel
|
|||
# build a release kernel on rawhide
|
||||
%define with_release %{?_with_release: 1} %{?!_with_release: 0}
|
||||
|
||||
# Include driver backports (e.g. compat-wireless) in the kernel build.
|
||||
%define with_backports %{?_without_backports: 0} %{?!_without_backports: 1}
|
||||
|
||||
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
|
||||
# and 0 for rawhide (all kernels are debug kernels).
|
||||
# See also 'make debug' and 'make release'.
|
||||
%define debugbuildsenabled 0
|
||||
%define debugbuildsenabled 1
|
||||
|
||||
# Want to build a vanilla kernel build without any non-upstream patches?
|
||||
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
|
||||
|
@ -171,7 +168,7 @@ Summary: The Linux kernel
|
|||
%define doc_build_fail true
|
||||
%endif
|
||||
|
||||
%define rawhide_skip_docs 1
|
||||
%define rawhide_skip_docs 0
|
||||
%if 0%{?rawhide_skip_docs}
|
||||
%define with_doc 0
|
||||
%define doc_build_fail true
|
||||
|
@ -207,20 +204,6 @@ Summary: The Linux kernel
|
|||
# The kernel tarball/base version
|
||||
%define kversion 3.%{base_sublevel}
|
||||
|
||||
# The compat-wireless version
|
||||
%define cwversion 2012-02-05
|
||||
|
||||
#######################################################################
|
||||
# If cwversion is less than kversion, make sure with_backports is
|
||||
# turned-off.
|
||||
#
|
||||
# For rawhide, disable with_backports immediately after a rebase...
|
||||
#
|
||||
# (Uncomment the '#' and both spaces below to disable with_backports.)
|
||||
#
|
||||
# % define with_backports 0
|
||||
#######################################################################
|
||||
|
||||
%define make_target bzImage
|
||||
|
||||
%define KVERREL %{version}-%{release}.%{_target_cpu}
|
||||
|
@ -388,7 +371,6 @@ Summary: The Linux kernel
|
|||
%define make_target image
|
||||
%define kernel_image arch/s390/boot/image
|
||||
%define with_tools 0
|
||||
%define with_backports 0
|
||||
%endif
|
||||
|
||||
%ifarch sparc64
|
||||
|
@ -421,7 +403,6 @@ Summary: The Linux kernel
|
|||
%define hdrarch arm
|
||||
%define make_target bzImage
|
||||
%define kernel_image arch/arm/boot/zImage
|
||||
%define with_backports 0
|
||||
# we build a up kernel on base softfp/hardfp platforms. its used for qemu.
|
||||
%ifnarch armv5tel armv7hl
|
||||
%define with_up 0
|
||||
|
@ -459,7 +440,6 @@ Summary: The Linux kernel
|
|||
%define with_debuginfo 0
|
||||
%define with_perf 0
|
||||
%define with_tools 0
|
||||
%define with_backports 0
|
||||
%define _enable_debug_packages 0
|
||||
%endif
|
||||
|
||||
|
@ -516,7 +496,7 @@ Provides: kernel-modeset = 1\
|
|||
Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
|
||||
Requires(pre): %{kernel_prereq}\
|
||||
Requires(pre): %{initrd_prereq}\
|
||||
Requires(pre): linux-firmware >= 20100806-2\
|
||||
Requires(pre): linux-firmware >= 20120206-0.1.git06c8f81\
|
||||
Requires(post): /sbin/new-kernel-pkg\
|
||||
Requires(preun): /sbin/new-kernel-pkg\
|
||||
Conflicts: %{kernel_dot_org_conflicts}\
|
||||
|
@ -564,12 +544,14 @@ BuildRequires: pciutils-devel gettext
|
|||
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
|
||||
%if %{with_debuginfo}
|
||||
# Fancy new debuginfo generation introduced in Fedora 8/RHEL 6.
|
||||
BuildRequires: rpm-build >= 4.4.2.1-4
|
||||
%define debuginfo_args --strict-build-id
|
||||
# The -r flag to find-debuginfo.sh to invoke eu-strip --reloc-debug-sections
|
||||
# reduces the number of relocations in kernel module .ko.debug files and was
|
||||
# introduced with rpm 4.9 and elfutils 0.153.
|
||||
BuildRequires: rpm-build >= 4.9.0-1, elfutils >= elfutils-0.153-1
|
||||
%define debuginfo_args --strict-build-id -r
|
||||
%endif
|
||||
|
||||
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
|
||||
Source1: compat-wireless-%{cwversion}.tar.bz2
|
||||
|
||||
Source15: merge.pl
|
||||
Source16: mod-extra.list
|
||||
|
@ -602,8 +584,6 @@ Source112: config-arm-kirkwood
|
|||
Source113: config-arm-imx
|
||||
Source114: config-arm-highbank
|
||||
|
||||
Source200: config-backports
|
||||
|
||||
# This file is intentionally left empty in the stock kernel. Its a nicety
|
||||
# added for those wanting to do custom rebuilds with altered config opts.
|
||||
Source1000: config-local
|
||||
|
@ -684,7 +664,6 @@ Patch471: floppy-Remove-_hlt-related-functions.patch
|
|||
Patch510: linux-2.6-silence-noise.patch
|
||||
Patch520: quite-apm.patch
|
||||
Patch530: linux-2.6-silence-fbcon-logo.patch
|
||||
Patch540: modpost-add-option-to-allow-external-modules-to-avoi.patch
|
||||
|
||||
Patch700: linux-2.6-e1000-ich9-montevina.patch
|
||||
|
||||
|
@ -698,10 +677,12 @@ Patch1556: linux-3.3-virtio-scsi.patch
|
|||
|
||||
# DRM
|
||||
#atch1700: drm-edid-try-harder-to-fix-up-broken-headers.patch
|
||||
Patch1800: drm-vgem.patch
|
||||
|
||||
# nouveau + drm fixes
|
||||
# intel drm is all merged upstream
|
||||
Patch1824: drm-intel-next.patch
|
||||
Patch1825: drm-i915-dp-stfu.patch
|
||||
|
||||
Patch1900: linux-2.6-intel-iommu-igfx.patch
|
||||
|
||||
|
@ -715,9 +696,15 @@ Patch2900: linux-2.6-v4l-dvb-update.patch
|
|||
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
||||
|
||||
# fs fixes
|
||||
Patch4000: ext4-fix-resize-when-resizing-within-single-group.patch
|
||||
|
||||
# NFSv4
|
||||
Patch1101: linux-3.1-keys-remove-special-keyring.patch
|
||||
Patch4101: linux-3.1-keys-remove-special-keyring.patch
|
||||
Patch4102: linux-3.3-newidmapper-01.patch
|
||||
Patch4103: linux-3.3-newidmapper-02.patch
|
||||
Patch4104: linux-3.3-newidmapper-03.patch
|
||||
Patch4105: NFSv4-Reduce-the-footprint-of-the-idmapper.patch
|
||||
Patch4106: NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch
|
||||
|
||||
# patches headed upstream
|
||||
Patch12016: disable-i8042-check-on-apple-mac.patch
|
||||
|
@ -726,18 +713,28 @@ Patch12303: dmar-disable-when-ricoh-multifunction.patch
|
|||
|
||||
Patch13003: efi-dont-map-boot-services-on-32bit.patch
|
||||
|
||||
Patch14000: hibernate-freeze-filesystems.patch
|
||||
|
||||
Patch14010: lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
Patch15000: bluetooth-use-after-free.patch
|
||||
|
||||
Patch19000: ips-noirq.patch
|
||||
|
||||
Patch20000: utrace.patch
|
||||
|
||||
# Flattened devicetree support
|
||||
Patch21000: arm-omap-dt-compat.patch
|
||||
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
Patch21004: arm-tegra-nvec-kconfig.patch
|
||||
Patch21005: arm-nosmp-fix-per_cpu-data-type-kallsyms.patch
|
||||
|
||||
# highbank patches
|
||||
# Highbank clock functions need to be EXPORT for module builds
|
||||
Patch21010: highbank-export-clock-functions.patch
|
||||
|
||||
Patch21070: ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
#rhbz 773392
|
||||
Patch21073: KVM-x86-extend-struct-x86_emulate_ops-with-get_cpuid.patch
|
||||
Patch21074: KVM-x86-fix-missing-checks-in-syscall-emulation.patch
|
||||
|
||||
Patch21092: udlfb-remove-sysfs-framebuffer-device-with-USB-disconnect.patch
|
||||
|
||||
Patch21093: rt2x00_fix_MCU_request_failures.patch
|
||||
|
@ -747,10 +744,36 @@ Patch21094: power-x86-destdir.patch
|
|||
Patch21095: hfsplus-Change-finder_info-to-u32.patch
|
||||
Patch21096: hfsplus-Add-an-ioctl-to-bless-files.patch
|
||||
|
||||
# compat-wireless patches
|
||||
Patch50000: compat-wireless-config-fixups.patch
|
||||
Patch50001: compat-wireless-pr_fmt-warning-avoidance.patch
|
||||
Patch50002: compat-wireless-integrated-build.patch
|
||||
#rhbz 788260
|
||||
Patch21233: jbd2-clear-BH_Delay-and-BH_Unwritten-in-journal_unmap_buf.patch
|
||||
|
||||
#rhbz 754518
|
||||
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
Patch21250: mcelog-rcu-splat.patch
|
||||
Patch21270: x86-Avoid-invoking-RCU-when-CPU-is-idle.patch
|
||||
|
||||
#rhbz 795544
|
||||
Patch21290: ums_realtek-do-not-use-stack-memory-for-DMA-in-__do_.patch
|
||||
|
||||
#rhbz 727865 730007
|
||||
Patch21300: ACPICA-Fix-regression-in-FADT-revision-checks.patch
|
||||
|
||||
#rhbz 728478
|
||||
Patch21302: sony-laptop-Enable-keyboard-backlight-by-default.patch
|
||||
|
||||
#rhbz 803809 CVE-2012-1179
|
||||
Patch21304: mm-thp-fix-pmd_bad-triggering.patch
|
||||
|
||||
#rhbz 804007
|
||||
Patch21305: mac80211-fix-possible-tid_rx-reorder_timer-use-after-free.patch
|
||||
|
||||
#rhbz 804957 CVE-2012-1568
|
||||
Patch21306: shlib_base_randomize.patch
|
||||
|
||||
Patch21400: unhandled-irqs-switch-to-polling.patch
|
||||
|
||||
Patch22000: weird-root-dentry-name-debug.patch
|
||||
|
||||
%endif
|
||||
|
||||
|
@ -1228,17 +1251,17 @@ else
|
|||
fi
|
||||
|
||||
# Now build the fedora kernel tree.
|
||||
if [ -d linux-%{kversion}.%{_target_cpu} ]; then
|
||||
if [ -d linux-%{KVERREL} ]; then
|
||||
# Just in case we ctrl-c'd a prep already
|
||||
rm -rf deleteme.%{_target_cpu}
|
||||
# Move away the stale away, and delete in background.
|
||||
mv linux-%{kversion}.%{_target_cpu} deleteme.%{_target_cpu}
|
||||
mv linux-%{KVERREL} deleteme.%{_target_cpu}
|
||||
rm -rf deleteme.%{_target_cpu} &
|
||||
fi
|
||||
|
||||
cp -rl vanilla-%{vanillaversion} linux-%{kversion}.%{_target_cpu}
|
||||
cp -rl vanilla-%{vanillaversion} linux-%{KVERREL}
|
||||
|
||||
cd linux-%{kversion}.%{_target_cpu}
|
||||
cd linux-%{KVERREL}
|
||||
|
||||
# released_kernel with possible stable updates
|
||||
%if 0%{?stable_base}
|
||||
|
@ -1267,16 +1290,6 @@ make -f %{SOURCE19} config-release
|
|||
# Dynamically generate kernel .config files from config-* files
|
||||
make -f %{SOURCE20} VERSION=%{version} configs
|
||||
|
||||
%if %{with_backports}
|
||||
# Turn-off bits provided by compat-wireless
|
||||
for i in %{all_arch_configs}
|
||||
do
|
||||
mv $i $i.tmp
|
||||
./merge.pl %{SOURCE200} $i.tmp > $i
|
||||
rm $i.tmp
|
||||
done
|
||||
%endif
|
||||
|
||||
# Merge in any user-provided local config option changes
|
||||
%if %{?all_arch_configs:1}%{!?all_arch_configs:0}
|
||||
for i in %{all_arch_configs}
|
||||
|
@ -1312,12 +1325,15 @@ ApplyPatch linux-2.6-i386-nx-emulation.patch
|
|||
#
|
||||
#pplyPatch arm-omap-dt-compat.patch
|
||||
ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
ApplyPatch arm-tegra-nvec-kconfig.patch
|
||||
ApplyPatch arm-nosmp-fix-per_cpu-data-type-kallsyms.patch
|
||||
|
||||
#
|
||||
# bugfixes to drivers and filesystems
|
||||
#
|
||||
|
||||
# ext4
|
||||
ApplyPatch ext4-fix-resize-when-resizing-within-single-group.patch
|
||||
|
||||
# xfs
|
||||
|
||||
|
@ -1328,6 +1344,11 @@ ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
|||
|
||||
# NFSv4
|
||||
ApplyPatch linux-3.1-keys-remove-special-keyring.patch
|
||||
ApplyPatch linux-3.3-newidmapper-01.patch
|
||||
ApplyPatch linux-3.3-newidmapper-02.patch
|
||||
ApplyPatch linux-3.3-newidmapper-03.patch
|
||||
ApplyPatch NFSv4-Reduce-the-footprint-of-the-idmapper.patch
|
||||
ApplyPatch NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch
|
||||
|
||||
# USB
|
||||
|
||||
|
@ -1375,11 +1396,6 @@ ApplyPatch linux-2.6-silence-noise.patch
|
|||
# Make fbcon not show the penguins with 'quiet'
|
||||
ApplyPatch linux-2.6-silence-fbcon-logo.patch
|
||||
|
||||
%if %{with_backports}
|
||||
# modpost: add option to allow external modules to avoid taint
|
||||
ApplyPatch modpost-add-option-to-allow-external-modules-to-avoi.patch
|
||||
%endif
|
||||
|
||||
# Changes to upstream defaults.
|
||||
|
||||
|
||||
|
@ -1396,11 +1412,13 @@ ApplyPatch fix_xen_guest_on_old_EC2.patch
|
|||
|
||||
# DRM core
|
||||
#ApplyPatch drm-edid-try-harder-to-fix-up-broken-headers.patch
|
||||
ApplyPatch drm-vgem.patch
|
||||
|
||||
# Nouveau DRM
|
||||
|
||||
# Intel DRM
|
||||
ApplyOptionalPatch drm-intel-next.patch
|
||||
ApplyPatch drm-i915-dp-stfu.patch
|
||||
|
||||
ApplyPatch linux-2.6-intel-iommu-igfx.patch
|
||||
|
||||
|
@ -1423,15 +1441,19 @@ ApplyPatch dmar-disable-when-ricoh-multifunction.patch
|
|||
|
||||
ApplyPatch efi-dont-map-boot-services-on-32bit.patch
|
||||
|
||||
ApplyPatch hibernate-freeze-filesystems.patch
|
||||
|
||||
ApplyPatch lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
ApplyPatch bluetooth-use-after-free.patch
|
||||
|
||||
ApplyPatch ips-noirq.patch
|
||||
|
||||
# utrace.
|
||||
ApplyPatch utrace.patch
|
||||
|
||||
ApplyPatch ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
#rhbz 773392
|
||||
ApplyPatch KVM-x86-extend-struct-x86_emulate_ops-with-get_cpuid.patch
|
||||
ApplyPatch KVM-x86-fix-missing-checks-in-syscall-emulation.patch
|
||||
|
||||
ApplyPatch udlfb-remove-sysfs-framebuffer-device-with-USB-disconnect.patch
|
||||
|
||||
#rhbz 772772
|
||||
|
@ -1442,6 +1464,39 @@ ApplyPatch power-x86-destdir.patch
|
|||
ApplyPatch hfsplus-Change-finder_info-to-u32.patch
|
||||
ApplyPatch hfsplus-Add-an-ioctl-to-bless-files.patch
|
||||
|
||||
#rhbz 788269
|
||||
ApplyPatch jbd2-clear-BH_Delay-and-BH_Unwritten-in-journal_unmap_buf.patch
|
||||
|
||||
#rhbz 754518
|
||||
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
ApplyPatch mcelog-rcu-splat.patch
|
||||
|
||||
#rhbz 795544
|
||||
ApplyPatch ums_realtek-do-not-use-stack-memory-for-DMA-in-__do_.patch
|
||||
|
||||
#rhbz 727865 730007
|
||||
ApplyPatch ACPICA-Fix-regression-in-FADT-revision-checks.patch
|
||||
|
||||
#rhbz 728478
|
||||
ApplyPatch sony-laptop-Enable-keyboard-backlight-by-default.patch
|
||||
|
||||
#rhbz 804007
|
||||
ApplyPatch mac80211-fix-possible-tid_rx-reorder_timer-use-after-free.patch
|
||||
|
||||
#rhbz 804957 CVE-2012-1568
|
||||
ApplyPatch shlib_base_randomize.patch
|
||||
|
||||
ApplyPatch unhandled-irqs-switch-to-polling.patch
|
||||
|
||||
ApplyPatch weird-root-dentry-name-debug.patch
|
||||
|
||||
#rhbz 803809 CVE-2012-1179
|
||||
ApplyPatch mm-thp-fix-pmd_bad-triggering.patch
|
||||
|
||||
#Highbank clock functions
|
||||
ApplyPatch highbank-export-clock-functions.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -1489,34 +1544,14 @@ done
|
|||
# end of kernel config
|
||||
%endif
|
||||
|
||||
# get rid of unwanted files resulting from patch fuzz
|
||||
find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
|
||||
|
||||
# remove unnecessary SCM files
|
||||
find . -name .gitignore -exec rm -f {} \; >/dev/null
|
||||
|
||||
cd ..
|
||||
|
||||
%if %{with_backports}
|
||||
|
||||
# Always start fresh
|
||||
rm -rf compat-wireless-%{cwversion}
|
||||
|
||||
# Extract the compat-wireless bits
|
||||
%setup -q -n kernel-%{kversion}%{?dist} -T -D -a 1
|
||||
|
||||
cd compat-wireless-%{cwversion}
|
||||
|
||||
ApplyPatch compat-wireless-config-fixups.patch
|
||||
ApplyPatch compat-wireless-pr_fmt-warning-avoidance.patch
|
||||
ApplyPatch compat-wireless-integrated-build.patch
|
||||
|
||||
ApplyPatch rt2x00_fix_MCU_request_failures.patch
|
||||
|
||||
cd ..
|
||||
|
||||
%endif
|
||||
|
||||
# get rid of unwanted files resulting from patch fuzz
|
||||
find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
|
||||
|
||||
###
|
||||
### build
|
||||
###
|
||||
|
@ -1639,9 +1674,6 @@ BuildKernel() {
|
|||
# dirs for additional modules per module-init-tools, kbuild/modules.txt
|
||||
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
|
||||
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
|
||||
%if %{with_backports}
|
||||
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/backports
|
||||
%endif
|
||||
# first copy everything
|
||||
cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
|
||||
cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
|
||||
|
@ -1782,6 +1814,12 @@ BuildKernel() {
|
|||
rm mod-extra.list mod-extra2.list mod-extra3.list
|
||||
popd
|
||||
|
||||
# remove files that will be auto generated by depmod at rpm -i time
|
||||
for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap
|
||||
do
|
||||
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$i
|
||||
done
|
||||
|
||||
# Move the devel headers out of the root file system
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
|
||||
mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
|
||||
|
@ -1794,33 +1832,6 @@ BuildKernel() {
|
|||
|
||||
# prune junk from kernel-devel
|
||||
find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
|
||||
|
||||
%if %{with_backports}
|
||||
|
||||
cd ../compat-wireless-%{cwversion}/
|
||||
|
||||
install -m 644 config.mk \
|
||||
$RPM_BUILD_ROOT/boot/config.mk-compat-wireless-%{cwversion}-$KernelVer
|
||||
|
||||
make -s ARCH=$Arch V=1 %{?_smp_mflags} \
|
||||
KLIB_BUILD=../linux-%{kversion}.%{_target_cpu} \
|
||||
KMODPATH_ARG="INSTALL_MOD_PATH=$RPM_BUILD_ROOT" \
|
||||
KMODDIR="backports" install-modules %{?sparse_mflags}
|
||||
|
||||
# mark modules executable so that strip-to-file can strip them
|
||||
find $RPM_BUILD_ROOT/lib/modules/$KernelVer/backports -name "*.ko" \
|
||||
-type f | xargs --no-run-if-empty chmod u+x
|
||||
|
||||
cd -
|
||||
|
||||
%endif
|
||||
|
||||
# remove files that will be auto generated by depmod at rpm -i time
|
||||
for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap
|
||||
do
|
||||
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$i
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
###
|
||||
|
@ -1832,7 +1843,7 @@ rm -rf $RPM_BUILD_ROOT
|
|||
mkdir -p $RPM_BUILD_ROOT/boot
|
||||
mkdir -p $RPM_BUILD_ROOT%{_libexecdir}
|
||||
|
||||
cd linux-%{kversion}.%{_target_cpu}
|
||||
cd linux-%{KVERREL}
|
||||
|
||||
%if %{with_debug}
|
||||
BuildKernel %make_target %kernel_image debug
|
||||
|
@ -1943,7 +1954,7 @@ find Documentation -type d | xargs chmod u+w
|
|||
|
||||
%install
|
||||
|
||||
cd linux-%{kversion}.%{_target_cpu}
|
||||
cd linux-%{KVERREL}
|
||||
|
||||
%if %{with_doc}
|
||||
docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}
|
||||
|
@ -2193,6 +2204,7 @@ fi
|
|||
%dir %{_libexecdir}/perf-core
|
||||
%{_libexecdir}/perf-core/*
|
||||
%{_mandir}/man[1-8]/perf*
|
||||
%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt
|
||||
|
||||
%files -n python-perf
|
||||
%defattr(-,root,root)
|
||||
|
@ -2262,10 +2274,6 @@ fi
|
|||
/lib/modules/%{KVERREL}%{?2:.%{2}}/build\
|
||||
/lib/modules/%{KVERREL}%{?2:.%{2}}/source\
|
||||
/lib/modules/%{KVERREL}%{?2:.%{2}}/updates\
|
||||
%if %{with_backports}\
|
||||
/boot/config.mk-compat-wireless-%{cwversion}-%{KVERREL}%{?2:.%{2}}\
|
||||
/lib/modules/%{KVERREL}%{?2:.%{2}}/backports\
|
||||
%endif\
|
||||
%ifarch %{vdso_arches}\
|
||||
/lib/modules/%{KVERREL}%{?2:.%{2}}/vdso\
|
||||
/etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:.%{2}}.conf\
|
||||
|
@ -2302,16 +2310,287 @@ fi
|
|||
# plz don't put in a version string unless you're going to tag
|
||||
# and build.
|
||||
|
||||
# ___________________________________________________________
|
||||
# / This branch is for Fedora 17. You probably want to commit \
|
||||
# \ to the F-16 branch instead, or in addition to this one. /
|
||||
# -----------------------------------------------------------
|
||||
# \ ^__^
|
||||
# \ (@@)\_______
|
||||
# (__)\ )\/\
|
||||
# ||----w |
|
||||
# || ||
|
||||
#
|
||||
# .---. __
|
||||
# , / \ \ ||||
|
||||
# \\\\ |O___O | | \\||||
|
||||
# \ // | \_/ | | \ /
|
||||
# '--/----/| / | |-'
|
||||
# // // / -----'
|
||||
# // \\ / /
|
||||
# // // / /
|
||||
# // \\ / /
|
||||
# // // / /
|
||||
# /| ' / /
|
||||
# //\___/ /
|
||||
# // ||\ /
|
||||
# \\_ || '---'
|
||||
# /' / \\_.-
|
||||
# / / --| |
|
||||
# '-' | |
|
||||
# '-'
|
||||
%changelog
|
||||
* Fri Mar 23 2012 Dave Jones <davej@redhat.com> 3.3.0-5
|
||||
- Apply patches that should solve the bluetooth use-after-free oopses. (rhbz 806033)
|
||||
|
||||
* Wed Mar 21 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Ship hmac file for vmlinuz for FIPS-140 (rhbz 805538)
|
||||
|
||||
* Tue Mar 20 2012 Dave Jones <davej@redhat.com>
|
||||
- Don't bind the IPS driver if no irq is assigned (typically BIOS bug). (rhbz 804353)
|
||||
|
||||
* Tue Mar 20 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- CVE-2012-1568: execshield: predictable ascii armour base address (rhbz 804957)
|
||||
- mac80211: fix possible tid_rx->reorder_timer use after free
|
||||
from Stanislaw Gruska (rhbz 804007)
|
||||
|
||||
* Sun Mar 18 2012 Dave Jones <davej@redhat.com>
|
||||
- Linux 3.3
|
||||
|
||||
* Fri Mar 16 2012 Adam Jackson <ajax@redhat.com> - 3.3.0-0.rc7.git2.3
|
||||
- drm-i915-dp-stfu.patch: Muzzle a bunch of DP WARN()s. They're not wrong,
|
||||
but they're not helpful at this point.
|
||||
|
||||
* Fri Mar 16 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc7.git2.2
|
||||
- Disable debugging options.
|
||||
|
||||
* Fri Mar 16 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc7.git2.1
|
||||
- Linux v3.3-rc7-103-g0c4d067
|
||||
|
||||
* Fri Mar 16 2012 Justin M. Forbes <jforbes@redhat.com>
|
||||
- re-enable threading on hibernate compression/decompression
|
||||
|
||||
* Fri Mar 16 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Fix irqpoll patch to really only apply for ASM108x machines (rhbz 800520)
|
||||
|
||||
* Thu Mar 15 2012 Justin M. Forbes <jforbes@redhat.com>
|
||||
- CVE-2012-1179 fix pmd_bad() triggering in code paths holding mmap_sem read mode (rhbz 803809)
|
||||
|
||||
* Wed Mar 14 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Fixup irqpoll patch to only activate on machines with ASM108x PCI bridge
|
||||
|
||||
* Wed Mar 14 2012 Steve Dickson <steved@redhat.com> - 3.3.0-0.rc7.git1.2
|
||||
- Reduce the foot print of the NFSv4 idmapping coda (bz 593035)
|
||||
|
||||
* Wed Mar 14 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc7.git1.1
|
||||
- Linux v3.3-rc7-48-g762ad8a
|
||||
|
||||
* Tue Mar 13 2012 John W. Linville <linville@redhat.com>
|
||||
- Remove infrastructure related to compat-wireless integration
|
||||
|
||||
* Mon Mar 12 2012 Mark Langsdorf <mark.langsdorf@calxeda.com>
|
||||
- Re-enable highbank config option and add new config file to support it
|
||||
|
||||
* Mon Mar 12 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc7.git0.3
|
||||
- Reenable debugging options.
|
||||
|
||||
* Mon Mar 12 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc7.git0.2
|
||||
- Disable debugging options.
|
||||
|
||||
* Mon Mar 12 2012 Dave Jones <davej@redhat.com> 3.3.0-0.rc7.git0.1
|
||||
- Linux 3.3-rc7
|
||||
|
||||
* Wed Mar 07 2012 Dave Jones <davej@redhat.com>
|
||||
- Add debug patch for bugs 787171/766277
|
||||
|
||||
* Wed Mar 07 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc6.git2.1
|
||||
- Linux v3.3-rc6-132-g55062d0
|
||||
|
||||
* Wed Mar 07 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc6.git1.1
|
||||
- Linux v3.3-rc6-131-g097d591
|
||||
|
||||
* Mon Mar 05 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc6.git0.3
|
||||
- Reenable debugging options.
|
||||
|
||||
* Mon Mar 05 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc6.git0.2
|
||||
- Disable debugging options.
|
||||
|
||||
* Mon Mar 05 2012 Dave Jones <davej@redhat.com>
|
||||
- Linux 3.3-rc6
|
||||
|
||||
* Mon Mar 05 2012 John W. Linville <linville@redhat.com>
|
||||
- Turn-off CONFIG_B43_BCMA_EXTRA to avoid b43/brcmsmac overlap
|
||||
|
||||
* Mon Mar 05 2012 Mark Wielaard <mark@klomp.org>
|
||||
- Add -r to debuginfo_args to invoke eu-strip --reloc-debug-sections.
|
||||
|
||||
* Fri Mar 02 2012 Justin M. Forbes <jforbes@redhat.com>
|
||||
- Disable threading in hibernate compression/decompression
|
||||
|
||||
* Fri Mar 02 2012 Adam Jackson <ajax@redhat.com>
|
||||
- drm-intel-crtc-dpms-fix.patch: Fix system hang on gen2 kit on DPMS (#730853)
|
||||
|
||||
* Thu Mar 01 2012 Dave Jones <davej@redhat.com>
|
||||
- temporarily switch to low-performance polling IRQ mode when
|
||||
unexpected IRQs occur.
|
||||
|
||||
* Wed Feb 29 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc5.git3.1
|
||||
- Linux v3.3-rc5-101-g88ebdda
|
||||
|
||||
* Tue Feb 28 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Add patch to enable keyboard backlight on Sony laptops (rhbz 728478)
|
||||
|
||||
* Tue Feb 28 2012 Dave Jones <davej@redhat.com>
|
||||
- Disable CONFIG_USB_DEVICEFS (Deprecated).
|
||||
|
||||
* Tue Feb 28 2012 Justin M. Forbes <jforbes@redhat.com>
|
||||
- CVE-2012-1090 CIFS: fix dentry refcount leak when opening a FIFO on lookup (rhbz 798296)
|
||||
|
||||
* Tue Feb 28 2012 Dave Jones <davej@redhat.com> - 3.3.0-0.rc5.git2.1
|
||||
- Linux v3.3-rc5-88-g586c6e7
|
||||
|
||||
* Mon Feb 27 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Add patch to fix regression in FADT revision checks (rhbz 730007 727865)
|
||||
|
||||
* Mon Feb 27 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc5.git1.1
|
||||
- Linux 3.3-rc5-git1 (upstream 500dd2370e77c9551ba298bdeeb91b02d8402199)
|
||||
- Reenable debugging options.
|
||||
|
||||
* Sun Feb 26 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc5.git0.3
|
||||
- Add patch from Linus Torvalds to fix 32-bit autofs4 build
|
||||
|
||||
* Sat Feb 25 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc5.git0.2
|
||||
- Disable debugging options.
|
||||
|
||||
* Sat Feb 25 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc5.git0.1
|
||||
- Linux 3.3-rc5
|
||||
|
||||
* Sat Feb 25 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git5.1
|
||||
- Linux 3.3-rc4-git5 (upstream b52b80023f262ce8a0ffdcb490acb23e8678377a)
|
||||
|
||||
* Fri Feb 24 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Linux 3.3-rc4-git4 (upstream bb4c7e9a9908548b458f34afb2fee74dc0d49f90)
|
||||
|
||||
* Thu Feb 23 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Further ARM config updates
|
||||
|
||||
* Wed Feb 22 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git3.1
|
||||
- Linux 3.3-rc4-git3 (upstream 45196cee28a5bcfb6ddbe2bffa4270cbed66ae4b)
|
||||
|
||||
* Wed Feb 22 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git2.1
|
||||
- Linux 3.3-rc4-git2 (upstream 719741d9986572d64b47c35c09f5e7bb8d389400)
|
||||
|
||||
* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git1.4
|
||||
- Drop x86-Avoid-invoking-RCU-when-CPU-is-idle.patch (rhbz 795050)
|
||||
|
||||
* Tue Feb 21 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Update ARM configs
|
||||
|
||||
* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- ext4: fix resize when resizing within single group (rhbz 786454)
|
||||
- imon: don't wedge hardware after early callbacks (rhbz 781832)
|
||||
|
||||
* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git1.2
|
||||
- Enable rtl8712 driver (rhbz 699618)
|
||||
- Linux 3.3-rc4-git1 (upstream 27e74da9800289e69ba907777df1e2085231eff7)
|
||||
|
||||
* Tue Feb 21 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Disable ARM highbank kernels for the time being
|
||||
|
||||
* Mon Feb 20 2012 Dave Jones <davej@redhat.com>
|
||||
- Do not call drivers when invalidating partitions for -ENOMEDIUM
|
||||
|
||||
* Mon Feb 20 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Disable sfc ethernet driver on ARM
|
||||
|
||||
* Mon Feb 20 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Avoid using stack variables in ums_realtek (again) (rhbz 795544)
|
||||
|
||||
* Mon Feb 20 2012 Dave Jones <davej@redhat.com>
|
||||
- NFSv4: Fix an Oops in the NFSv4 getacl code
|
||||
|
||||
* Mon Feb 20 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git0.2
|
||||
- Reenable debugging options.
|
||||
|
||||
* Sun Feb 19 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git0.1
|
||||
- Linux 3.3-rc4
|
||||
- Disable debugging options.
|
||||
|
||||
* Sun Feb 19 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Further updates to ARM config
|
||||
- Fix and re-enable Tegra NVEC patch
|
||||
|
||||
* Fri Feb 17 2012 Dave Jones <davej@redhat.com>
|
||||
- improve handling of null rate in LIS3LV02Dx accelerometer driver. (rhbz 785814)
|
||||
|
||||
* Fri Feb 17 2012 Dave Jones <davej@redhat.com>
|
||||
- Reenable radio drivers. (rhbz 784824)
|
||||
|
||||
* Fri Feb 17 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git7.2
|
||||
- Freeze all filesystems during system suspend/hibernate.
|
||||
|
||||
* Fri Feb 17 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git7.1
|
||||
- Linux 3.3-rc3-git7 (upstream 4903062b5485f0e2c286a23b44c9b59d9b017d53)
|
||||
|
||||
* Wed Feb 15 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Update ARM configs to 3.3 kernel
|
||||
- use mainline cpu freq options on ARM
|
||||
|
||||
* Wed Feb 15 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git6.2
|
||||
- Linux 3.3-rc3-git6 (upstream c38e23456278e967f094b08247ffc3711b1029b2)
|
||||
- Require newer linux-firmware package for updated bnx2/bnx2x drivers
|
||||
|
||||
* Wed Feb 15 2012 Adam Jackson <ajax@redhat.com>
|
||||
- Add patch and config change for vgem.ko
|
||||
|
||||
* Wed Feb 15 2012 John W. Linville <linville@redhat.com>
|
||||
- Disable with_backports to help things to stabilize
|
||||
|
||||
* Tue Feb 14 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Add patch to fix RCU usage during cpu idle (rhbz 789641)
|
||||
- Add patch to fix mce rcu splat (rhbz 789644)
|
||||
- Patch to enable CONFIG_KEYS_COMPAT on s390 from David Howells (rhbz 790367)
|
||||
- Modify sd_revalidate_disk patch to do a WARN_ONCE instead of silently skip
|
||||
- Install perf examples as suggested by Jason Baron
|
||||
|
||||
* Tue Feb 14 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git5.1
|
||||
- Linux 3.3-rc3-git5 (upstream ce5afed937f0a823d3b00c9459409c3f5f2fbd5d)
|
||||
|
||||
* Tue Feb 14 2012 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Update ARM components in Makefile.config
|
||||
|
||||
* Mon Feb 13 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Apply patch to fix autofs4 lockdep splat (rhbz 714828)
|
||||
|
||||
* Mon Feb 13 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git4.1
|
||||
- Linux 3.3-rc3-git4 (upstream 3ec1e88b33a3bdd852ce8e014052acec7a9da8b5)
|
||||
|
||||
* Sat Feb 11 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git3.1
|
||||
- Linux 3.3-rc3-git3 (upstream 8df54d622a120058ee8bec38743c9b8f091c8e58)
|
||||
|
||||
* Fri Feb 10 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Patch to prevent NULL pointer dereference in sd_revalidate_disk (rhbz 754518)
|
||||
|
||||
* Fri Feb 10 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git2.1
|
||||
- Linux 3.3-rc3-git2 (upstream 612b8507c5d545feed2437b3d2239929cac7688d)
|
||||
|
||||
* Fri Feb 10 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc3.git1.2
|
||||
- Reenable debugging options.
|
||||
|
||||
* Fri Feb 10 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Linux 3.3-rc3-git1 (upstream 19e00f2f1d5273dbc52eab0ebc315cae3aa44b2a)
|
||||
|
||||
* Thu Feb 09 2012 Dave Jones <davej@redhat.com>
|
||||
- bsg: fix sysfs link remove warning (#787281)
|
||||
|
||||
* Thu Feb 09 2012 Josh Boyer <jwboyer@gmail.com> - 3.3.0-0.rc3.git0.2
|
||||
- Disable debugging options.
|
||||
|
||||
* Thu Feb 09 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Linux 3.3-rc3
|
||||
|
||||
* Wed Feb 08 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Remove a bogus inline declaration that broke ARM and ppc builds (rhbz 787373)
|
||||
- CVE-2011-4086 jbd2: unmapped buffer with _Unwritten or _Delay flags set can
|
||||
lead to DoS (rhbz 788260)
|
||||
- Add new upstream NFS id mapping patches from Steve Dickson
|
||||
|
||||
* Tue Feb 07 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Linux 3.3-rc2-git6 (upstream 6bd113f1f4a8c0d05c4dbadb300319e0e3526db4)
|
||||
|
||||
* Tue Feb 07 2012 Chris Wright <chrisw@redhat.com>
|
||||
- Enable Open vSwitch
|
||||
|
||||
* Tue Feb 07 2012 Justin M. Forbes <jforbes@redhat.com>
|
||||
- Add virtio-scsi support
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
|
||||
index e95822d..00b222f 100644
|
||||
--- a/arch/x86/include/asm/desc.h
|
||||
+++ b/arch/x86/include/asm/desc.h
|
||||
@@ -5,6 +5,7 @@
|
||||
|
@ -8,7 +10,7 @@
|
|||
#include <linux/smp.h>
|
||||
|
||||
static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info)
|
||||
@@ -97,6 +98,9 @@ static inline int desc_empty(const void *ptr)
|
||||
@@ -99,6 +100,9 @@ static inline int desc_empty(const void *ptr)
|
||||
|
||||
#define load_TLS(t, cpu) native_load_tls(t, cpu)
|
||||
#define set_ldt native_set_ldt
|
||||
|
@ -18,7 +20,7 @@
|
|||
|
||||
#define write_ldt_entry(dt, entry, desc) native_write_ldt_entry(dt, entry, desc)
|
||||
#define write_gdt_entry(dt, entry, desc, type) native_write_gdt_entry(dt, entry, desc, type)
|
||||
@@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
|
||||
@@ -404,4 +408,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
|
||||
_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
|
||||
}
|
||||
|
||||
|
@ -44,6 +46,8 @@
|
|||
+#endif /* CONFIG_X86_32 */
|
||||
+
|
||||
#endif /* _ASM_X86_DESC_H */
|
||||
diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
|
||||
index 5f55e69..aba94f0 100644
|
||||
--- a/arch/x86/include/asm/mmu.h
|
||||
+++ b/arch/x86/include/asm/mmu.h
|
||||
@@ -7,6 +7,9 @@
|
||||
|
@ -68,9 +72,11 @@
|
|||
} mm_context_t;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
|
||||
index a7d2db9..cc4ad60 100644
|
||||
--- a/arch/x86/include/asm/paravirt.h
|
||||
+++ b/arch/x86/include/asm/paravirt.h
|
||||
@@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
||||
@@ -298,6 +298,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
||||
{
|
||||
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
|
||||
}
|
||||
|
@ -83,9 +89,11 @@
|
|||
static inline void store_gdt(struct desc_ptr *dtr)
|
||||
{
|
||||
PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
|
||||
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
|
||||
index 8e8b9a4..cca421e 100644
|
||||
--- a/arch/x86/include/asm/paravirt_types.h
|
||||
+++ b/arch/x86/include/asm/paravirt_types.h
|
||||
@@ -118,6 +118,9 @@ struct pv_cpu_ops {
|
||||
@@ -125,6 +125,9 @@ struct pv_cpu_ops {
|
||||
void (*store_gdt)(struct desc_ptr *);
|
||||
void (*store_idt)(struct desc_ptr *);
|
||||
void (*set_ldt)(const void *desc, unsigned entries);
|
||||
|
@ -95,9 +103,11 @@
|
|||
unsigned long (*store_tr)(void);
|
||||
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
|
||||
#ifdef CONFIG_X86_64
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index d43cad7..07da281 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -802,6 +802,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||
@@ -839,6 +839,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||
/* Filter out anything that depends on CPUID levels we don't have */
|
||||
filter_cpuid_features(c, true);
|
||||
|
||||
|
@ -120,9 +130,11 @@
|
|||
/* If the model name is still unset, do table lookup. */
|
||||
if (!c->x86_model_id[0]) {
|
||||
const char *p;
|
||||
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
|
||||
index d90272e..cc594fc 100644
|
||||
--- a/arch/x86/kernel/paravirt.c
|
||||
+++ b/arch/x86/kernel/paravirt.c
|
||||
@@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
||||
@@ -358,6 +358,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
||||
.read_tscp = native_read_tscp,
|
||||
.load_tr_desc = native_load_tr_desc,
|
||||
.set_ldt = native_set_ldt,
|
||||
|
@ -132,9 +144,11 @@
|
|||
.load_gdt = native_load_gdt,
|
||||
.load_idt = native_load_idt,
|
||||
.store_gdt = native_store_gdt,
|
||||
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
|
||||
index 324cd72..95618a4 100644
|
||||
--- a/arch/x86/kernel/process_32.c
|
||||
+++ b/arch/x86/kernel/process_32.c
|
||||
@@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||
@@ -249,7 +249,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||
void
|
||||
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
{
|
||||
|
@ -145,7 +159,7 @@
|
|||
regs->fs = 0;
|
||||
regs->ds = __USER_DS;
|
||||
regs->es = __USER_DS;
|
||||
@@ -252,6 +255,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
@@ -257,6 +260,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
regs->cs = __USER_CS;
|
||||
regs->ip = new_ip;
|
||||
regs->sp = new_sp;
|
||||
|
@ -157,17 +171,17 @@
|
|||
/*
|
||||
* Free the old FP and other extended state
|
||||
*/
|
||||
@@ -311,6 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
||||
if (preload_fpu)
|
||||
prefetch(next->fpu.state);
|
||||
@@ -321,6 +329,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
||||
*/
|
||||
lazy_save_gs(prev->gs);
|
||||
|
||||
+ if (next_p->mm)
|
||||
+ load_user_cs_desc(cpu, next_p->mm);
|
||||
+
|
||||
/*
|
||||
* Reload esp0.
|
||||
* Load the per-thread Thread-Local Storage descriptor.
|
||||
*/
|
||||
@@ -404,3 +415,40 @@ unsigned long get_wchan(struct task_struct *p)
|
||||
@@ -389,3 +400,40 @@ unsigned long get_wchan(struct task_struct *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -208,9 +222,11 @@
|
|||
+ mm->context.exec_limit = 0;
|
||||
+ set_user_cs(&mm->context.user_cs, 0);
|
||||
+}
|
||||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
|
||||
index 4d42300..4cb14a1 100644
|
||||
--- a/arch/x86/kernel/traps.c
|
||||
+++ b/arch/x86/kernel/traps.c
|
||||
@@ -109,6 +109,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
||||
@@ -107,6 +107,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
||||
dec_preempt_count();
|
||||
}
|
||||
|
||||
|
@ -289,7 +305,7 @@
|
|||
static void __kprobes
|
||||
do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
|
||||
long error_code, siginfo_t *info)
|
||||
@@ -265,6 +337,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
||||
@@ -263,6 +335,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
||||
if (!user_mode(regs))
|
||||
goto gp_in_kernel;
|
||||
|
||||
|
@ -319,7 +335,7 @@
|
|||
tsk->thread.error_code = error_code;
|
||||
tsk->thread.trap_no = 13;
|
||||
|
||||
@@ -792,19 +887,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||
@@ -650,19 +745,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
|
@ -366,6 +382,8 @@
|
|||
}
|
||||
#endif
|
||||
|
||||
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
|
||||
index 410531d..eb040ad 100644
|
||||
--- a/arch/x86/mm/setup_nx.c
|
||||
+++ b/arch/x86/mm/setup_nx.c
|
||||
@@ -1,3 +1,4 @@
|
||||
|
@ -373,16 +391,16 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
@@ -6,7 +6,7 @@
|
||||
@@ -5,7 +6,7 @@
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/proto.h>
|
||||
|
||||
|
||||
-static int disable_nx __cpuinitdata;
|
||||
+int disable_nx __cpuinitdata;
|
||||
|
||||
|
||||
/*
|
||||
* noexec = on|off
|
||||
@@ -40,6 +42,10 @@ void __cpuinit x86_configure_nx(void)
|
||||
@@ -40,6 +41,10 @@ void __cpuinit x86_configure_nx(void)
|
||||
void __init x86_report_nx(void)
|
||||
{
|
||||
if (!cpu_has_nx) {
|
||||
|
@ -393,9 +411,11 @@
|
|||
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
|
||||
"missing in CPU!\n");
|
||||
} else {
|
||||
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
|
||||
index d6c0418..c15b765 100644
|
||||
--- a/arch/x86/mm/tlb.c
|
||||
+++ b/arch/x86/mm/tlb.c
|
||||
@@ -6,6 +6,7 @@
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
|
@ -403,7 +423,7 @@
|
|||
#include <asm/tlbflush.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/cache.h>
|
||||
@@ -131,6 +132,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||
@@ -134,6 +135,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||
union smp_flush_state *f;
|
||||
|
||||
cpu = smp_processor_id();
|
||||
|
@ -416,9 +436,11 @@
|
|||
/*
|
||||
* orig_rax contains the negated interrupt vector.
|
||||
* Use that to determine where the sender put the data.
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 12eb07b..c48ed49 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -335,6 +335,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
||||
@@ -354,6 +354,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
||||
xen_mc_issue(PARAVIRT_LAZY_CPU);
|
||||
}
|
||||
|
||||
|
@ -443,7 +465,7 @@
|
|||
static void xen_load_gdt(const struct desc_ptr *dtr)
|
||||
{
|
||||
unsigned long va = dtr->address;
|
||||
@@ -961,6 +979,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
|
||||
@@ -994,6 +1012,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
|
||||
|
||||
.load_tr_desc = paravirt_nop,
|
||||
.set_ldt = xen_set_ldt,
|
||||
|
@ -453,9 +475,11 @@
|
|||
.load_gdt = xen_load_gdt,
|
||||
.load_idt = xen_load_idt,
|
||||
.load_tls = xen_load_tls,
|
||||
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
|
||||
index bcb884e..94e82fa 100644
|
||||
--- a/fs/binfmt_elf.c
|
||||
+++ b/fs/binfmt_elf.c
|
||||
@@ -717,6 +722,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
@@ -711,6 +711,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
if (retval)
|
||||
goto out_free_dentry;
|
||||
|
||||
|
@ -471,9 +495,11 @@
|
|||
/* OK, This is the point of no return */
|
||||
current->flags &= ~PF_FORKNOEXEC;
|
||||
current->mm->def_flags = def_flags;
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 7d379a6..90ccb05 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -101,6 +101,9 @@ struct bio_list;
|
||||
@@ -102,6 +102,9 @@ struct fs_struct;
|
||||
struct perf_event_context;
|
||||
struct blk_plug;
|
||||
|
||||
|
@ -483,9 +509,11 @@
|
|||
/*
|
||||
* List of flags we want to share for kernel threads,
|
||||
* if only because they are not used by them anyway.
|
||||
--- b/mm/mmap.c
|
||||
diff --git a/mm/mmap.c b/mm/mmap.c
|
||||
index 3f758c7..0e29e1b 100644
|
||||
--- a/mm/mmap.c
|
||||
+++ b/mm/mmap.c
|
||||
@@ -44,6 +45,18 @@
|
||||
@@ -46,6 +46,18 @@
|
||||
#define arch_rebalance_pgtables(addr, len) (addr)
|
||||
#endif
|
||||
|
||||
|
@ -504,7 +532,7 @@
|
|||
static void unmap_region(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
||||
unsigned long start, unsigned long end);
|
||||
@@ -432,6 +432,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
@@ -424,6 +436,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
struct vm_area_struct *prev, struct rb_node **rb_link,
|
||||
struct rb_node *rb_parent)
|
||||
{
|
||||
|
@ -513,7 +541,7 @@
|
|||
__vma_link_list(mm, vma, prev, rb_parent);
|
||||
__vma_link_rb(mm, vma, rb_link, rb_parent);
|
||||
}
|
||||
@@ -489,6 +504,8 @@
|
||||
@@ -478,6 +492,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
rb_erase(&vma->vm_rb, &mm->mm_rb);
|
||||
if (mm->mmap_cache == vma)
|
||||
mm->mmap_cache = prev;
|
||||
|
@ -522,7 +550,7 @@
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -790,6 +807,8 @@
|
||||
@@ -794,6 +810,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
|
||||
} else /* cases 2, 5, 7 */
|
||||
err = vma_adjust(prev, prev->vm_start,
|
||||
end, prev->vm_pgoff, NULL);
|
||||
|
@ -530,8 +558,8 @@
|
|||
+ arch_add_exec_range(mm, prev->vm_end);
|
||||
if (err)
|
||||
return NULL;
|
||||
return prev;
|
||||
@@ -1966,10 +2075,14 @@
|
||||
khugepaged_enter_vma_merge(prev);
|
||||
@@ -1952,10 +1970,14 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
|
||||
if (new->vm_ops && new->vm_ops->open)
|
||||
new->vm_ops->open(new);
|
||||
|
||||
|
@ -548,7 +576,7 @@
|
|||
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
|
||||
|
||||
/* Success. */
|
||||
@@ -2254,6 +2367,7 @@
|
||||
@@ -2243,6 +2265,7 @@ void exit_mmap(struct mm_struct *mm)
|
||||
|
||||
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||
tlb_finish_mmu(&tlb, 0, end);
|
||||
|
@ -556,6 +584,8 @@
|
|||
|
||||
/*
|
||||
* Walk the list again, actually closing and freeing it,
|
||||
diff --git a/mm/mprotect.c b/mm/mprotect.c
|
||||
index 5a688a2..128d996 100644
|
||||
--- a/mm/mprotect.c
|
||||
+++ b/mm/mprotect.c
|
||||
@@ -25,9 +25,14 @@
|
||||
|
@ -573,7 +603,7 @@
|
|||
#ifndef pgprot_modify
|
||||
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||
{
|
||||
@@ -138,7 +143,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||
@@ -148,7 +153,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
unsigned long oldflags = vma->vm_flags;
|
||||
long nrpages = (end - start) >> PAGE_SHIFT;
|
||||
|
@ -582,7 +612,7 @@
|
|||
pgoff_t pgoff;
|
||||
int error;
|
||||
int dirty_accountable = 0;
|
||||
@@ -203,6 +208,9 @@ success:
|
||||
@@ -213,6 +218,9 @@ success:
|
||||
dirty_accountable = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
commit e6499c6f4b5f56a16f8b8ef60529c1da28b13aea
|
||||
Author: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Date: Thu Jan 26 16:54:23 2012 -0500
|
||||
|
||||
NFS: Fall back on old idmapper if request_key() fails
|
||||
|
||||
This patch removes the CONFIG_NFS_USE_NEW_IDMAPPER compile option.
|
||||
First, the idmapper will attempt to map the id using /sbin/request-key
|
||||
and nfsidmap. If this fails (if /etc/request-key.conf is not configured
|
||||
properly) then the idmapper will call the legacy code to perform the
|
||||
mapping. I left a comment stating where the legacy code begins to make
|
||||
it easier for somebody to remove in the future.
|
||||
|
||||
Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-01-27 10:07:07.209851446 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-01-27 10:15:42.914563082 -0500
|
||||
@@ -142,8 +142,6 @@ static int nfs_map_numeric_to_string(__u
|
||||
return snprintf(buf, buflen, "%u", id);
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_NFS_USE_NEW_IDMAPPER
|
||||
-
|
||||
#include <linux/cred.h>
|
||||
#include <linux/sunrpc/sched.h>
|
||||
#include <linux/nfs4.h>
|
||||
@@ -328,43 +326,7 @@ static int nfs_idmap_lookup_id(const cha
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int nfs_map_name_to_uid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
|
||||
-{
|
||||
- if (nfs_map_string_to_numeric(name, namelen, uid))
|
||||
- return 0;
|
||||
- return nfs_idmap_lookup_id(name, namelen, "uid", uid);
|
||||
-}
|
||||
-
|
||||
-int nfs_map_group_to_gid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *gid)
|
||||
-{
|
||||
- if (nfs_map_string_to_numeric(name, namelen, gid))
|
||||
- return 0;
|
||||
- return nfs_idmap_lookup_id(name, namelen, "gid", gid);
|
||||
-}
|
||||
-
|
||||
-int nfs_map_uid_to_name(const struct nfs_server *server, __u32 uid, char *buf, size_t buflen)
|
||||
-{
|
||||
- int ret = -EINVAL;
|
||||
-
|
||||
- if (!(server->caps & NFS_CAP_UIDGID_NOMAP))
|
||||
- ret = nfs_idmap_lookup_name(uid, "user", buf, buflen);
|
||||
- if (ret < 0)
|
||||
- ret = nfs_map_numeric_to_string(uid, buf, buflen);
|
||||
- return ret;
|
||||
-}
|
||||
-int nfs_map_gid_to_group(const struct nfs_server *server, __u32 gid, char *buf, size_t buflen)
|
||||
-{
|
||||
- int ret = -EINVAL;
|
||||
-
|
||||
- if (!(server->caps & NFS_CAP_UIDGID_NOMAP))
|
||||
- ret = nfs_idmap_lookup_name(gid, "group", buf, buflen);
|
||||
- if (ret < 0)
|
||||
- ret = nfs_map_numeric_to_string(gid, buf, buflen);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-#else /* CONFIG_NFS_USE_NEW_IDMAPPER not defined */
|
||||
-
|
||||
+/* idmap classic begins here */
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/init.h>
|
||||
@@ -796,19 +758,27 @@ static unsigned int fnvhash32(const void
|
||||
int nfs_map_name_to_uid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
|
||||
{
|
||||
struct idmap *idmap = server->nfs_client->cl_idmap;
|
||||
+ int ret = -EINVAL;
|
||||
|
||||
if (nfs_map_string_to_numeric(name, namelen, uid))
|
||||
return 0;
|
||||
- return nfs_idmap_id(idmap, &idmap->idmap_user_hash, name, namelen, uid);
|
||||
+ ret = nfs_idmap_lookup_id(name, namelen, "uid", uid);
|
||||
+ if (ret < 0)
|
||||
+ ret = nfs_idmap_id(idmap, &idmap->idmap_user_hash, name, namelen, uid);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
-int nfs_map_group_to_gid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
|
||||
+int nfs_map_group_to_gid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *gid)
|
||||
{
|
||||
struct idmap *idmap = server->nfs_client->cl_idmap;
|
||||
+ int ret = -EINVAL;
|
||||
|
||||
- if (nfs_map_string_to_numeric(name, namelen, uid))
|
||||
+ if (nfs_map_string_to_numeric(name, namelen, gid))
|
||||
return 0;
|
||||
- return nfs_idmap_id(idmap, &idmap->idmap_group_hash, name, namelen, uid);
|
||||
+ ret = nfs_idmap_lookup_id(name, namelen, "gid", gid);
|
||||
+ if (ret < 0)
|
||||
+ ret = nfs_idmap_id(idmap, &idmap->idmap_group_hash, name, namelen, gid);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
int nfs_map_uid_to_name(const struct nfs_server *server, __u32 uid, char *buf, size_t buflen)
|
||||
@@ -816,22 +786,26 @@ int nfs_map_uid_to_name(const struct nfs
|
||||
struct idmap *idmap = server->nfs_client->cl_idmap;
|
||||
int ret = -EINVAL;
|
||||
|
||||
- if (!(server->caps & NFS_CAP_UIDGID_NOMAP))
|
||||
- ret = nfs_idmap_name(idmap, &idmap->idmap_user_hash, uid, buf);
|
||||
+ if (!(server->caps & NFS_CAP_UIDGID_NOMAP)) {
|
||||
+ ret = nfs_idmap_lookup_name(uid, "user", buf, buflen);
|
||||
+ if (ret < 0)
|
||||
+ ret = nfs_idmap_name(idmap, &idmap->idmap_user_hash, uid, buf);
|
||||
+ }
|
||||
if (ret < 0)
|
||||
ret = nfs_map_numeric_to_string(uid, buf, buflen);
|
||||
return ret;
|
||||
}
|
||||
-int nfs_map_gid_to_group(const struct nfs_server *server, __u32 uid, char *buf, size_t buflen)
|
||||
+int nfs_map_gid_to_group(const struct nfs_server *server, __u32 gid, char *buf, size_t buflen)
|
||||
{
|
||||
struct idmap *idmap = server->nfs_client->cl_idmap;
|
||||
int ret = -EINVAL;
|
||||
|
||||
- if (!(server->caps & NFS_CAP_UIDGID_NOMAP))
|
||||
- ret = nfs_idmap_name(idmap, &idmap->idmap_group_hash, uid, buf);
|
||||
+ if (!(server->caps & NFS_CAP_UIDGID_NOMAP)) {
|
||||
+ ret = nfs_idmap_lookup_name(gid, "group", buf, buflen);
|
||||
+ if (ret < 0)
|
||||
+ ret = nfs_idmap_name(idmap, &idmap->idmap_group_hash, gid, buf);
|
||||
+ }
|
||||
if (ret < 0)
|
||||
- ret = nfs_map_numeric_to_string(uid, buf, buflen);
|
||||
+ ret = nfs_map_numeric_to_string(gid, buf, buflen);
|
||||
return ret;
|
||||
}
|
||||
-
|
||||
-#endif /* CONFIG_NFS_USE_NEW_IDMAPPER */
|
||||
diff -up linux-3.2.noarch/fs/nfs/Kconfig.orig linux-3.2.noarch/fs/nfs/Kconfig
|
||||
--- linux-3.2.noarch/fs/nfs/Kconfig.orig 2012-01-04 18:55:44.000000000 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/Kconfig 2012-01-27 10:15:42.913562572 -0500
|
||||
@@ -132,14 +132,3 @@ config NFS_USE_KERNEL_DNS
|
||||
select DNS_RESOLVER
|
||||
select KEYS
|
||||
default y
|
||||
-
|
||||
-config NFS_USE_NEW_IDMAPPER
|
||||
- bool "Use the new idmapper upcall routine"
|
||||
- depends on NFS_V4 && KEYS
|
||||
- help
|
||||
- Say Y here if you want NFS to use the new idmapper upcall functions.
|
||||
- You will need /sbin/request-key (usually provided by the keyutils
|
||||
- package). For details, read
|
||||
- <file:Documentation/filesystems/nfs/idmapper.txt>.
|
||||
-
|
||||
- If you are unsure, say N.
|
||||
diff -up linux-3.2.noarch/fs/nfs/sysctl.c.orig linux-3.2.noarch/fs/nfs/sysctl.c
|
||||
--- linux-3.2.noarch/fs/nfs/sysctl.c.orig 2012-01-04 18:55:44.000000000 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/sysctl.c 2012-01-27 10:15:42.914563082 -0500
|
||||
@@ -32,7 +32,6 @@ static ctl_table nfs_cb_sysctls[] = {
|
||||
.extra1 = (int *)&nfs_set_port_min,
|
||||
.extra2 = (int *)&nfs_set_port_max,
|
||||
},
|
||||
-#ifndef CONFIG_NFS_USE_NEW_IDMAPPER
|
||||
{
|
||||
.procname = "idmap_cache_timeout",
|
||||
.data = &nfs_idmap_cache_timeout,
|
||||
@@ -40,7 +39,6 @@ static ctl_table nfs_cb_sysctls[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec_jiffies,
|
||||
},
|
||||
-#endif /* CONFIG_NFS_USE_NEW_IDMAPPER */
|
||||
#endif
|
||||
{
|
||||
.procname = "nfs_mountpoint_timeout",
|
||||
diff -up linux-3.2.noarch/include/linux/nfs_idmap.h.orig linux-3.2.noarch/include/linux/nfs_idmap.h
|
||||
--- linux-3.2.noarch/include/linux/nfs_idmap.h.orig 2012-01-27 10:06:46.783643915 -0500
|
||||
+++ linux-3.2.noarch/include/linux/nfs_idmap.h 2012-01-27 10:15:42.915563594 -0500
|
||||
@@ -69,36 +69,11 @@ struct nfs_server;
|
||||
struct nfs_fattr;
|
||||
struct nfs4_string;
|
||||
|
||||
-#ifdef CONFIG_NFS_USE_NEW_IDMAPPER
|
||||
-
|
||||
int nfs_idmap_init(void);
|
||||
void nfs_idmap_quit(void);
|
||||
-
|
||||
-static inline int nfs_idmap_new(struct nfs_client *clp)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void nfs_idmap_delete(struct nfs_client *clp)
|
||||
-{
|
||||
-}
|
||||
-
|
||||
-#else /* CONFIG_NFS_USE_NEW_IDMAPPER not set */
|
||||
-
|
||||
-static inline int nfs_idmap_init(void)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void nfs_idmap_quit(void)
|
||||
-{
|
||||
-}
|
||||
-
|
||||
int nfs_idmap_new(struct nfs_client *);
|
||||
void nfs_idmap_delete(struct nfs_client *);
|
||||
|
||||
-#endif /* CONFIG_NFS_USE_NEW_IDMAPPER */
|
||||
-
|
||||
void nfs_fattr_init_names(struct nfs_fattr *fattr,
|
||||
struct nfs4_string *owner_name,
|
||||
struct nfs4_string *group_name);
|
|
@ -0,0 +1,97 @@
|
|||
commit 3cd0f37a2cc9e4d6188df10041a2441eaa41d991
|
||||
Author: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Date: Thu Jan 26 16:54:24 2012 -0500
|
||||
|
||||
NFS: Keep idmapper include files in one place
|
||||
|
||||
Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-01-27 10:15:42.914563082 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-01-27 10:19:22.711401559 -0500
|
||||
@@ -39,6 +39,36 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/nfs_idmap.h>
|
||||
#include <linux/nfs_fs.h>
|
||||
+#include <linux/cred.h>
|
||||
+#include <linux/sunrpc/sched.h>
|
||||
+#include <linux/nfs4.h>
|
||||
+#include <linux/nfs_fs_sb.h>
|
||||
+#include <linux/keyctl.h>
|
||||
+#include <linux/key-type.h>
|
||||
+#include <linux/rcupdate.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <keys/user-type.h>
|
||||
+
|
||||
+/* include files needed by legacy idmapper */
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/socket.h>
|
||||
+#include <linux/in.h>
|
||||
+#include <linux/sched.h>
|
||||
+#include <linux/sunrpc/clnt.h>
|
||||
+#include <linux/workqueue.h>
|
||||
+#include <linux/sunrpc/rpc_pipe_fs.h>
|
||||
+#include <linux/nfs_fs.h>
|
||||
+#include "nfs4_fs.h"
|
||||
+
|
||||
+#define NFS_UINT_MAXLEN 11
|
||||
+#define IDMAP_HASH_SZ 128
|
||||
+
|
||||
+/* Default cache timeout is 10 minutes */
|
||||
+unsigned int nfs_idmap_cache_timeout = 600 * HZ;
|
||||
+const struct cred *id_resolver_cache;
|
||||
+
|
||||
|
||||
/**
|
||||
* nfs_fattr_init_names - initialise the nfs_fattr owner_name/group_name fields
|
||||
@@ -142,21 +172,6 @@ static int nfs_map_numeric_to_string(__u
|
||||
return snprintf(buf, buflen, "%u", id);
|
||||
}
|
||||
|
||||
-#include <linux/cred.h>
|
||||
-#include <linux/sunrpc/sched.h>
|
||||
-#include <linux/nfs4.h>
|
||||
-#include <linux/nfs_fs_sb.h>
|
||||
-#include <linux/keyctl.h>
|
||||
-#include <linux/key-type.h>
|
||||
-#include <linux/rcupdate.h>
|
||||
-#include <linux/err.h>
|
||||
-
|
||||
-#include <keys/user-type.h>
|
||||
-
|
||||
-#define NFS_UINT_MAXLEN 11
|
||||
-
|
||||
-const struct cred *id_resolver_cache;
|
||||
-
|
||||
struct key_type key_type_id_resolver = {
|
||||
.name = "id_resolver",
|
||||
.instantiate = user_instantiate,
|
||||
@@ -327,25 +342,6 @@ static int nfs_idmap_lookup_id(const cha
|
||||
}
|
||||
|
||||
/* idmap classic begins here */
|
||||
-#include <linux/module.h>
|
||||
-#include <linux/mutex.h>
|
||||
-#include <linux/init.h>
|
||||
-#include <linux/socket.h>
|
||||
-#include <linux/in.h>
|
||||
-#include <linux/sched.h>
|
||||
-#include <linux/sunrpc/clnt.h>
|
||||
-#include <linux/workqueue.h>
|
||||
-#include <linux/sunrpc/rpc_pipe_fs.h>
|
||||
-
|
||||
-#include <linux/nfs_fs.h>
|
||||
-
|
||||
-#include "nfs4_fs.h"
|
||||
-
|
||||
-#define IDMAP_HASH_SZ 128
|
||||
-
|
||||
-/* Default cache timeout is 10 minutes */
|
||||
-unsigned int nfs_idmap_cache_timeout = 600 * HZ;
|
||||
-
|
||||
static int param_set_idmap_timeout(const char *val, struct kernel_param *kp)
|
||||
{
|
||||
char *endp;
|
|
@ -0,0 +1,40 @@
|
|||
commit a602bea3e7ccc5ce3da61d2c18245c4058983926
|
||||
Author: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Date: Thu Jan 26 16:54:25 2012 -0500
|
||||
|
||||
NFS: Update idmapper documentation
|
||||
|
||||
Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
diff -up linux-3.2.noarch/Documentation/filesystems/nfs/idmapper.txt.orig linux-3.2.noarch/Documentation/filesystems/nfs/idmapper.txt
|
||||
--- linux-3.2.noarch/Documentation/filesystems/nfs/idmapper.txt.orig 2012-01-04 18:55:44.000000000 -0500
|
||||
+++ linux-3.2.noarch/Documentation/filesystems/nfs/idmapper.txt 2012-01-27 10:19:55.406740364 -0500
|
||||
@@ -4,13 +4,21 @@ ID Mapper
|
||||
=========
|
||||
Id mapper is used by NFS to translate user and group ids into names, and to
|
||||
translate user and group names into ids. Part of this translation involves
|
||||
-performing an upcall to userspace to request the information. Id mapper will
|
||||
-user request-key to perform this upcall and cache the result. The program
|
||||
-/usr/sbin/nfs.idmap should be called by request-key, and will perform the
|
||||
-translation and initialize a key with the resulting information.
|
||||
+performing an upcall to userspace to request the information. There are two
|
||||
+ways NFS could obtain this information: placing a call to /sbin/request-key
|
||||
+or by placing a call to the rpc.idmap daemon.
|
||||
+
|
||||
+NFS will attempt to call /sbin/request-key first. If this succeeds, the
|
||||
+result will be cached using the generic request-key cache. This call should
|
||||
+only fail if /etc/request-key.conf is not configured for the id_resolver key
|
||||
+type, see the "Configuring" section below if you wish to use the request-key
|
||||
+method.
|
||||
+
|
||||
+If the call to /sbin/request-key fails (if /etc/request-key.conf is not
|
||||
+configured with the id_resolver key type), then the idmapper will ask the
|
||||
+legacy rpc.idmap daemon for the id mapping. This result will be stored
|
||||
+in a custom NFS idmap cache.
|
||||
|
||||
- NFS_USE_NEW_IDMAPPER must be selected when configuring the kernel to use this
|
||||
- feature.
|
||||
|
||||
===========
|
||||
Configuring
|
|
@ -0,0 +1,79 @@
|
|||
>From 56fb161a9ca0129f8e266e4dbe79346552ff8089 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=C3=89ric=20Piel?= <eric.piel@tremplin-utc.net>
|
||||
Date: Thu, 3 Nov 2011 16:22:40 +0100
|
||||
Subject: [PATCH] lis3: Improve handling of null rate
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When obtaining a rate of 0, we would disable the device supposely
|
||||
because it seems to behave incorectly. It actually only comes from the
|
||||
fact that the device is off and on lis3dc it's reflected in the rate.
|
||||
So handle this nicely by just waiting a safe time, and then using the
|
||||
device as normally.
|
||||
|
||||
Signed-off-by: ??ric Piel <eric.piel@tremplin-utc.net>
|
||||
---
|
||||
drivers/misc/lis3lv02d/lis3lv02d.c | 16 ++++++++--------
|
||||
1 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
index 35c67e0..42dce2a 100644
|
||||
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
+++ b/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
@@ -188,7 +188,8 @@ static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z)
|
||||
/* conversion btw sampling rate and the register values */
|
||||
static int lis3_12_rates[4] = {40, 160, 640, 2560};
|
||||
static int lis3_8_rates[2] = {100, 400};
|
||||
-static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000};
|
||||
+/* LIS3DC: 0 = power off, above 9 = undefined */
|
||||
+static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000, -1, -1, -1, -1, -1, -1};
|
||||
|
||||
/* ODR is Output Data Rate */
|
||||
static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
|
||||
@@ -202,12 +203,11 @@ static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
|
||||
return lis3->odrs[(ctrl >> shift)];
|
||||
}
|
||||
|
||||
-static int lis3lv02d_get_pwron_wait(struct lis3lv02d *lis3)
|
||||
+static int lis3lv02d_wait_pwron(struct lis3lv02d *lis3)
|
||||
{
|
||||
int div = lis3lv02d_get_odr(lis3);
|
||||
-
|
||||
- if (WARN_ONCE(div == 0, "device returned spurious data"))
|
||||
- return -ENXIO;
|
||||
+ if (div <= 0)
|
||||
+ div = 1; /* maximum delay */
|
||||
|
||||
/* LIS3 power on delay is quite long */
|
||||
msleep(lis3->pwron_delay / div);
|
||||
@@ -274,7 +274,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
|
||||
|
||||
lis3->read(lis3, ctlreg, ®);
|
||||
lis3->write(lis3, ctlreg, (reg | selftest));
|
||||
- ret = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ ret = lis3lv02d_wait_pwron(lis3);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
@@ -285,7 +285,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
|
||||
|
||||
/* back to normal settings */
|
||||
lis3->write(lis3, ctlreg, reg);
|
||||
- ret = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ ret = lis3lv02d_wait_pwron(lis3);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
@@ -397,7 +397,7 @@ int lis3lv02d_poweron(struct lis3lv02d *lis3)
|
||||
lis3->write(lis3, CTRL_REG2, reg);
|
||||
}
|
||||
|
||||
- err = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ err = lis3lv02d_wait_pwron(lis3);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
--
|
||||
1.7.7.1
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
Is possible that we will arm the tid_rx->reorder_timer after
|
||||
del_timer_sync() in ___ieee80211_stop_rx_ba_session(). We need to stop
|
||||
timer after RCU grace period finish, so move it to
|
||||
ieee80211_free_tid_rx(). Timer will not be armed again, as
|
||||
rcu_dereference(sta->ampdu_mlme.tid_rx[tid]) will return NULL.
|
||||
|
||||
Debug object detected problem with the following warning:
|
||||
ODEBUG: free active (active state 0) object type: timer_list hint: sta_rx_agg_reorder_timer_expired+0x0/0xf0 [mac80211]
|
||||
|
||||
Bug report (with all warning messages):
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=804007
|
||||
|
||||
Reported-by: "jan p. springer" <jsd@igroup.org>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
net/mac80211/agg-rx.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
|
||||
index 1068f66..64d3ce5 100644
|
||||
--- a/net/mac80211/agg-rx.c
|
||||
+++ b/net/mac80211/agg-rx.c
|
||||
@@ -49,6 +49,8 @@ static void ieee80211_free_tid_rx(struct rcu_head *h)
|
||||
container_of(h, struct tid_ampdu_rx, rcu_head);
|
||||
int i;
|
||||
|
||||
+ del_timer_sync(&tid_rx->reorder_timer);
|
||||
+
|
||||
for (i = 0; i < tid_rx->buf_size; i++)
|
||||
dev_kfree_skb(tid_rx->reorder_buf[i]);
|
||||
kfree(tid_rx->reorder_buf);
|
||||
@@ -91,7 +93,6 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
|
||||
tid, WLAN_BACK_RECIPIENT, reason);
|
||||
|
||||
del_timer_sync(&tid_rx->session_timer);
|
||||
- del_timer_sync(&tid_rx->reorder_timer);
|
||||
|
||||
call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx);
|
||||
}
|
||||
--
|
||||
1.7.1
|
|
@ -0,0 +1,15 @@
|
|||
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
index f22a9f7..f525f99 100644
|
||||
--- a/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
@@ -191,7 +191,7 @@ static void drain_mcelog_buffer(void)
|
||||
{
|
||||
unsigned int next, i, prev = 0;
|
||||
|
||||
- next = rcu_dereference_check_mce(mcelog.next);
|
||||
+ next = ACCESS_ONCE(mcelog.next);
|
||||
|
||||
do {
|
||||
struct mce *m;
|
||||
|
||||
|
|
@ -0,0 +1,447 @@
|
|||
In some cases it may happen that pmd_none_or_clear_bad() is called
|
||||
with the mmap_sem hold in read mode. In those cases the huge page
|
||||
faults can allocate hugepmds under pmd_none_or_clear_bad() and that
|
||||
can trigger a false positive from pmd_bad() that will not like to see
|
||||
a pmd materializing as trans huge.
|
||||
|
||||
It's not khugepaged the problem, khugepaged holds the mmap_sem in
|
||||
write mode (and all those sites must hold the mmap_sem in read mode to
|
||||
prevent pagetables to go away from under them, during code review it
|
||||
seems vm86 mode on 32bit kernels requires that too unless it's
|
||||
restricted to 1 thread per process or UP builds). The race is only
|
||||
with the huge pagefaults that can convert a pmd_none() into a
|
||||
pmd_trans_huge().
|
||||
|
||||
Effectively all these pmd_none_or_clear_bad() sites running with
|
||||
mmap_sem in read mode are somewhat speculative with the page faults,
|
||||
and the result is always undefined when they run simultaneously. This
|
||||
is probably why it wasn't common to run into this. For example if the
|
||||
madvise(MADV_DONTNEED) runs zap_page_range() shortly before the page
|
||||
fault, the hugepage will not be zapped, if the page fault runs first
|
||||
it will be zapped.
|
||||
|
||||
Altering pmd_bad() not to error out if it finds hugepmds won't be
|
||||
enough to fix this, because zap_pmd_range would then proceed to call
|
||||
zap_pte_range (which would be incorrect if the pmd become a
|
||||
pmd_trans_huge()).
|
||||
|
||||
The simplest way to fix this is to read the pmd in the local stack
|
||||
(regardless of what we read, no need of actual CPU barriers, only
|
||||
compiler barrier needed), and be sure it is not changing under the
|
||||
code that computes its value. Even if the real pmd is changing under
|
||||
the value we hold on the stack, we don't care. If we actually end up
|
||||
in zap_pte_range it means the pmd was not none already and it was not
|
||||
huge, and it can't become huge from under us (khugepaged locking
|
||||
explained above).
|
||||
|
||||
All we need is to enforce that there is no way anymore that in a code
|
||||
path like below, pmd_trans_huge can be false, but
|
||||
pmd_none_or_clear_bad can run into a hugepmd. The overhead of a
|
||||
barrier() is just a compiler tweak and should not be measurable (I
|
||||
only added it for THP builds). I don't exclude different compiler
|
||||
versions may have prevented the race too by caching the value of *pmd
|
||||
on the stack (that hasn't been verified, but it wouldn't be impossible
|
||||
considering pmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none
|
||||
are all inlines and there's no external function called in between
|
||||
pmd_trans_huge and pmd_none_or_clear_bad).
|
||||
|
||||
if (pmd_trans_huge(*pmd)) {
|
||||
if (next-addr != HPAGE_PMD_SIZE) {
|
||||
VM_BUG_ON(!rwsem_is_locked(&tlb->mm->mmap_sem));
|
||||
split_huge_page_pmd(vma->vm_mm, pmd);
|
||||
} else if (zap_huge_pmd(tlb, vma, pmd, addr))
|
||||
continue;
|
||||
/* fall through */
|
||||
}
|
||||
if (pmd_none_or_clear_bad(pmd))
|
||||
|
||||
Because this race condition could be exercised without special
|
||||
privileges this was reported in CVE-2012-1179.
|
||||
|
||||
The race was identified and fully explained by Ulrich who debugged it.
|
||||
I'm quoting his accurate explanation below, for reference.
|
||||
|
||||
====== start quote =======
|
||||
mapcount 0 page_mapcount 1
|
||||
kernel BUG at mm/huge_memory.c:1384!
|
||||
|
||||
At some point prior to the panic, a "bad pmd ..." message similar to the
|
||||
following is logged on the console:
|
||||
|
||||
mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).
|
||||
|
||||
The "bad pmd ..." message is logged by pmd_clear_bad() before it clears
|
||||
the page's PMD table entry.
|
||||
|
||||
143 void pmd_clear_bad(pmd_t *pmd)
|
||||
144 {
|
||||
-> 145 pmd_ERROR(*pmd);
|
||||
146 pmd_clear(pmd);
|
||||
147 }
|
||||
|
||||
After the PMD table entry has been cleared, there is an inconsistency
|
||||
between the actual number of PMD table entries that are mapping the page
|
||||
and the page's map count (_mapcount field in struct page). When the page
|
||||
is subsequently reclaimed, __split_huge_page() detects this inconsistency.
|
||||
|
||||
1381 if (mapcount != page_mapcount(page))
|
||||
1382 printk(KERN_ERR "mapcount %d page_mapcount %d\n",
|
||||
1383 mapcount, page_mapcount(page));
|
||||
-> 1384 BUG_ON(mapcount != page_mapcount(page));
|
||||
|
||||
The root cause of the problem is a race of two threads in a multithreaded
|
||||
process. Thread B incurs a page fault on a virtual address that has never
|
||||
been accessed (PMD entry is zero) while Thread A is executing an madvise()
|
||||
system call on a virtual address within the same 2 MB (huge page) range.
|
||||
|
||||
virtual address space
|
||||
.---------------------.
|
||||
| |
|
||||
| |
|
||||
.-|---------------------|
|
||||
| | |
|
||||
| | |<-- B(fault)
|
||||
| | |
|
||||
2 MB | |/////////////////////|-.
|
||||
huge < |/////////////////////| > A(range)
|
||||
page | |/////////////////////|-'
|
||||
| | |
|
||||
| | |
|
||||
'-|---------------------|
|
||||
| |
|
||||
| |
|
||||
'---------------------'
|
||||
|
||||
- Thread A is executing an madvise(..., MADV_DONTNEED) system call
|
||||
on the virtual address range "A(range)" shown in the picture.
|
||||
|
||||
sys_madvise
|
||||
// Acquire the semaphore in shared mode.
|
||||
down_read(¤t->mm->mmap_sem)
|
||||
...
|
||||
madvise_vma
|
||||
switch (behavior)
|
||||
case MADV_DONTNEED:
|
||||
madvise_dontneed
|
||||
zap_page_range
|
||||
unmap_vmas
|
||||
unmap_page_range
|
||||
zap_pud_range
|
||||
zap_pmd_range
|
||||
//
|
||||
// Assume that this huge page has never been accessed.
|
||||
// I.e. content of the PMD entry is zero (not mapped).
|
||||
//
|
||||
if (pmd_trans_huge(*pmd)) {
|
||||
// We don't get here due to the above assumption.
|
||||
}
|
||||
//
|
||||
// Assume that Thread B incurred a page fault and
|
||||
.---------> // sneaks in here as shown below.
|
||||
| //
|
||||
| if (pmd_none_or_clear_bad(pmd))
|
||||
| {
|
||||
| if (unlikely(pmd_bad(*pmd)))
|
||||
| pmd_clear_bad
|
||||
| {
|
||||
| pmd_ERROR
|
||||
| // Log "bad pmd ..." message here.
|
||||
| pmd_clear
|
||||
| // Clear the page's PMD entry.
|
||||
| // Thread B incremented the map count
|
||||
| // in page_add_new_anon_rmap(), but
|
||||
| // now the page is no longer mapped
|
||||
| // by a PMD entry (-> inconsistency).
|
||||
| }
|
||||
| }
|
||||
|
|
||||
v
|
||||
- Thread B is handling a page fault on virtual address "B(fault)" shown
|
||||
in the picture.
|
||||
|
||||
...
|
||||
do_page_fault
|
||||
__do_page_fault
|
||||
// Acquire the semaphore in shared mode.
|
||||
down_read_trylock(&mm->mmap_sem)
|
||||
...
|
||||
handle_mm_fault
|
||||
if (pmd_none(*pmd) && transparent_hugepage_enabled(vma))
|
||||
// We get here due to the above assumption (PMD entry is zero).
|
||||
do_huge_pmd_anonymous_page
|
||||
alloc_hugepage_vma
|
||||
// Allocate a new transparent huge page here.
|
||||
...
|
||||
__do_huge_pmd_anonymous_page
|
||||
...
|
||||
spin_lock(&mm->page_table_lock)
|
||||
...
|
||||
page_add_new_anon_rmap
|
||||
// Here we increment the page's map count (starts at -1).
|
||||
atomic_set(&page->_mapcount, 0)
|
||||
set_pmd_at
|
||||
// Here we set the page's PMD entry which will be cleared
|
||||
// when Thread A calls pmd_clear_bad().
|
||||
...
|
||||
spin_unlock(&mm->page_table_lock)
|
||||
|
||||
The mmap_sem does not prevent the race because both threads are acquiring
|
||||
it in shared mode (down_read). Thread B holds the page_table_lock while
|
||||
the page's map count and PMD table entry are updated. However, Thread A
|
||||
does not synchronize on that lock.
|
||||
====== end quote =======
|
||||
|
||||
Reported-by: Ulrich Obergfell <uobergfe@redhat.com>
|
||||
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
|
||||
---
|
||||
arch/x86/kernel/vm86_32.c | 2 +
|
||||
fs/proc/task_mmu.c | 9 ++++++
|
||||
include/asm-generic/pgtable.h | 57 +++++++++++++++++++++++++++++++++++++++++
|
||||
mm/memcontrol.c | 4 +++
|
||||
mm/memory.c | 14 ++++++++--
|
||||
mm/mempolicy.c | 2 +-
|
||||
mm/mincore.c | 2 +-
|
||||
mm/pagewalk.c | 2 +-
|
||||
mm/swapfile.c | 4 +--
|
||||
9 files changed, 87 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
|
||||
index b466cab..328cb37 100644
|
||||
--- a/arch/x86/kernel/vm86_32.c
|
||||
+++ b/arch/x86/kernel/vm86_32.c
|
||||
@@ -172,6 +172,7 @@ static void mark_screen_rdonly(struct mm_struct *mm)
|
||||
spinlock_t *ptl;
|
||||
int i;
|
||||
|
||||
+ down_write(&mm->mmap_sem);
|
||||
pgd = pgd_offset(mm, 0xA0000);
|
||||
if (pgd_none_or_clear_bad(pgd))
|
||||
goto out;
|
||||
@@ -190,6 +191,7 @@ static void mark_screen_rdonly(struct mm_struct *mm)
|
||||
}
|
||||
pte_unmap_unlock(pte, ptl);
|
||||
out:
|
||||
+ up_write(&mm->mmap_sem);
|
||||
flush_tlb();
|
||||
}
|
||||
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index 7dcd2a2..3efa725 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -409,6 +409,9 @@ static int smaps_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
|
||||
} else {
|
||||
spin_unlock(&walk->mm->page_table_lock);
|
||||
}
|
||||
+
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
/*
|
||||
* The mmap_sem held all the way back in m_start() is what
|
||||
* keeps khugepaged out of here and from collapsing things
|
||||
@@ -507,6 +510,8 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
|
||||
struct page *page;
|
||||
|
||||
split_huge_page_pmd(walk->mm, pmd);
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
|
||||
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
for (; addr != end; pte++, addr += PAGE_SIZE) {
|
||||
@@ -670,6 +675,8 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
|
||||
int err = 0;
|
||||
|
||||
split_huge_page_pmd(walk->mm, pmd);
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
|
||||
/* find the first VMA at or above 'addr' */
|
||||
vma = find_vma(walk->mm, addr);
|
||||
@@ -961,6 +968,8 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
|
||||
spin_unlock(&walk->mm->page_table_lock);
|
||||
}
|
||||
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
|
||||
do {
|
||||
struct page *page = can_gather_numa_stats(*pte, md->vma, addr);
|
||||
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
|
||||
index 76bff2b..10f8291 100644
|
||||
--- a/include/asm-generic/pgtable.h
|
||||
+++ b/include/asm-generic/pgtable.h
|
||||
@@ -443,6 +443,63 @@ static inline int pmd_write(pmd_t pmd)
|
||||
#endif /* __HAVE_ARCH_PMD_WRITE */
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * This function is meant to be used by sites walking pagetables with
|
||||
+ * the mmap_sem hold in read mode to protect against MADV_DONTNEED and
|
||||
+ * transhuge page faults. MADV_DONTNEED can convert a transhuge pmd
|
||||
+ * into a null pmd and the transhuge page fault can convert a null pmd
|
||||
+ * into an hugepmd or into a regular pmd (if the hugepage allocation
|
||||
+ * fails). While holding the mmap_sem in read mode the pmd becomes
|
||||
+ * stable and stops changing under us only if it's not null and not a
|
||||
+ * transhuge pmd. When those races occurs and this function makes a
|
||||
+ * difference vs the standard pmd_none_or_clear_bad, the result is
|
||||
+ * undefined so behaving like if the pmd was none is safe (because it
|
||||
+ * can return none anyway). The compiler level barrier() is critically
|
||||
+ * important to compute the two checks atomically on the same pmdval.
|
||||
+ */
|
||||
+static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
|
||||
+{
|
||||
+ /* depend on compiler for an atomic pmd read */
|
||||
+ pmd_t pmdval = *pmd;
|
||||
+ /*
|
||||
+ * The barrier will stabilize the pmdval in a register or on
|
||||
+ * the stack so that it will stop changing under the code.
|
||||
+ */
|
||||
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
+ barrier();
|
||||
+#endif
|
||||
+ if (pmd_none(pmdval))
|
||||
+ return 1;
|
||||
+ if (unlikely(pmd_bad(pmdval))) {
|
||||
+ if (!pmd_trans_huge(pmdval))
|
||||
+ pmd_clear_bad(pmd);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * This is a noop if Transparent Hugepage Support is not built into
|
||||
+ * the kernel. Otherwise it is equivalent to
|
||||
+ * pmd_none_or_trans_huge_or_clear_bad(), and shall only be called in
|
||||
+ * places that already verified the pmd is not none and they want to
|
||||
+ * walk ptes while holding the mmap sem in read mode (write mode don't
|
||||
+ * need this). If THP is not enabled, the pmd can't go away under the
|
||||
+ * code even if MADV_DONTNEED runs, but if THP is enabled we need to
|
||||
+ * run a pmd_trans_unstable before walking the ptes after
|
||||
+ * split_huge_page_pmd returns (because it may have run when the pmd
|
||||
+ * become null, but then a page fault can map in a THP and not a
|
||||
+ * regular page).
|
||||
+ */
|
||||
+static inline int pmd_trans_unstable(pmd_t *pmd)
|
||||
+{
|
||||
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
+ return pmd_none_or_trans_huge_or_clear_bad(pmd);
|
||||
+#else
|
||||
+ return 0;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_GENERIC_PGTABLE_H */
|
||||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
|
||||
index d0e57a3..67b0578 100644
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -5193,6 +5193,8 @@ static int mem_cgroup_count_precharge_pte_range(pmd_t *pmd,
|
||||
spinlock_t *ptl;
|
||||
|
||||
split_huge_page_pmd(walk->mm, pmd);
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
|
||||
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
for (; addr != end; pte++, addr += PAGE_SIZE)
|
||||
@@ -5355,6 +5357,8 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
|
||||
spinlock_t *ptl;
|
||||
|
||||
split_huge_page_pmd(walk->mm, pmd);
|
||||
+ if (pmd_trans_unstable(pmd))
|
||||
+ return 0;
|
||||
retry:
|
||||
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
for (; addr != end; addr += PAGE_SIZE) {
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index fa2f04e..e3090fc 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -1251,12 +1251,20 @@ static inline unsigned long zap_pmd_range(struct mmu_gather *tlb,
|
||||
VM_BUG_ON(!rwsem_is_locked(&tlb->mm->mmap_sem));
|
||||
split_huge_page_pmd(vma->vm_mm, pmd);
|
||||
} else if (zap_huge_pmd(tlb, vma, pmd, addr))
|
||||
- continue;
|
||||
+ goto next;
|
||||
/* fall through */
|
||||
}
|
||||
- if (pmd_none_or_clear_bad(pmd))
|
||||
- continue;
|
||||
+ /*
|
||||
+ * Here there can be other concurrent MADV_DONTNEED or
|
||||
+ * trans huge page faults running, and if the pmd is
|
||||
+ * none or trans huge it can change under us. This is
|
||||
+ * because MADV_DONTNEED holds the mmap_sem in read
|
||||
+ * mode.
|
||||
+ */
|
||||
+ if (pmd_none_or_trans_huge_or_clear_bad(pmd))
|
||||
+ goto next;
|
||||
next = zap_pte_range(tlb, vma, pmd, addr, next, details);
|
||||
+ next:
|
||||
cond_resched();
|
||||
} while (pmd++, addr = next, addr != end);
|
||||
|
||||
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
|
||||
index 47296fe..0a37570 100644
|
||||
--- a/mm/mempolicy.c
|
||||
+++ b/mm/mempolicy.c
|
||||
@@ -512,7 +512,7 @@ static inline int check_pmd_range(struct vm_area_struct *vma, pud_t *pud,
|
||||
do {
|
||||
next = pmd_addr_end(addr, end);
|
||||
split_huge_page_pmd(vma->vm_mm, pmd);
|
||||
- if (pmd_none_or_clear_bad(pmd))
|
||||
+ if (pmd_none_or_trans_huge_or_clear_bad(pmd))
|
||||
continue;
|
||||
if (check_pte_range(vma, pmd, addr, next, nodes,
|
||||
flags, private))
|
||||
diff --git a/mm/mincore.c b/mm/mincore.c
|
||||
index 636a868..936b4ce 100644
|
||||
--- a/mm/mincore.c
|
||||
+++ b/mm/mincore.c
|
||||
@@ -164,7 +164,7 @@ static void mincore_pmd_range(struct vm_area_struct *vma, pud_t *pud,
|
||||
}
|
||||
/* fall through */
|
||||
}
|
||||
- if (pmd_none_or_clear_bad(pmd))
|
||||
+ if (pmd_none_or_trans_huge_or_clear_bad(pmd))
|
||||
mincore_unmapped_range(vma, addr, next, vec);
|
||||
else
|
||||
mincore_pte_range(vma, pmd, addr, next, vec);
|
||||
diff --git a/mm/pagewalk.c b/mm/pagewalk.c
|
||||
index 2f5cf10..aa9701e 100644
|
||||
--- a/mm/pagewalk.c
|
||||
+++ b/mm/pagewalk.c
|
||||
@@ -59,7 +59,7 @@ again:
|
||||
continue;
|
||||
|
||||
split_huge_page_pmd(walk->mm, pmd);
|
||||
- if (pmd_none_or_clear_bad(pmd))
|
||||
+ if (pmd_none_or_trans_huge_or_clear_bad(pmd))
|
||||
goto again;
|
||||
err = walk_pte_range(pmd, addr, next, walk);
|
||||
if (err)
|
||||
diff --git a/mm/swapfile.c b/mm/swapfile.c
|
||||
index d999f09..f31b29d 100644
|
||||
--- a/mm/swapfile.c
|
||||
+++ b/mm/swapfile.c
|
||||
@@ -932,9 +932,7 @@ static inline int unuse_pmd_range(struct vm_area_struct *vma, pud_t *pud,
|
||||
pmd = pmd_offset(pud, addr);
|
||||
do {
|
||||
next = pmd_addr_end(addr, end);
|
||||
- if (unlikely(pmd_trans_huge(*pmd)))
|
||||
- continue;
|
||||
- if (pmd_none_or_clear_bad(pmd))
|
||||
+ if (pmd_none_or_trans_huge_or_clear_bad(pmd))
|
||||
continue;
|
||||
ret = unuse_pte_range(vma, pmd, addr, next, entry, page);
|
||||
if (ret)
|
||||
|
||||
--
|
||||
To unsubscribe, send a message with 'unsubscribe linux-mm' in
|
||||
the body to majordomo@kvack.org. For more info on Linux MM,
|
||||
see: http://www.linux-mm.org/ .
|
||||
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
|
||||
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
|
|
@ -1,80 +0,0 @@
|
|||
From 69f63a67165da5e9f08c1132521598701d914573 Mon Sep 17 00:00:00 2001
|
||||
From: John W. Linville <linville@tuxdriver.com>
|
||||
Date: Wed, 14 Dec 2011 11:09:04 -0500
|
||||
Subject: [PATCH] modpost: add option to allow external modules to avoid taint
|
||||
|
||||
In some cases, it might be desirable to package a module from an
|
||||
external source tree alongside the base kernel. In those cases, it
|
||||
might also be desirable to not have those modules tainting the kernel.
|
||||
|
||||
This patch provides a mechanism for an external module build to declare
|
||||
itself as an "integrated build". Such a module is then treated the same
|
||||
as an intree module.
|
||||
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
Any thoughts on this? I'm thinking of adding this to Fedora kernels,
|
||||
where I have been working to integrate the compat-wireless package as
|
||||
part of the base kernel RPM.
|
||||
|
||||
scripts/Makefile.modpost | 1 +
|
||||
scripts/mod/modpost.c | 10 ++++++++--
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
|
||||
index 08dce14..160c6fb 100644
|
||||
--- a/scripts/Makefile.modpost
|
||||
+++ b/scripts/Makefile.modpost
|
||||
@@ -81,6 +81,7 @@ modpost = scripts/mod/modpost \
|
||||
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
||||
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
||||
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \
|
||||
+ $(if $(INTEGRATED_BUILD),-B) \
|
||||
$(if $(cross_build),-c)
|
||||
|
||||
quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
|
||||
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
|
||||
index 2bd594e..5d077f9 100644
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -43,6 +43,9 @@ static int warn_unresolved = 0;
|
||||
static int sec_mismatch_count = 0;
|
||||
static int sec_mismatch_verbose = 1;
|
||||
|
||||
+/* Is this a module being built as part of an integrated package? */
|
||||
+static int integrated_build = 0;
|
||||
+
|
||||
enum export {
|
||||
export_plain, export_unused, export_gpl,
|
||||
export_unused_gpl, export_gpl_future, export_unknown
|
||||
@@ -1851,7 +1854,7 @@ static void add_header(struct buffer *b, struct module *mod)
|
||||
|
||||
static void add_intree_flag(struct buffer *b, int is_intree)
|
||||
{
|
||||
- if (is_intree)
|
||||
+ if (is_intree || integrated_build)
|
||||
buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
|
||||
}
|
||||
|
||||
@@ -2101,7 +2104,7 @@ int main(int argc, char **argv)
|
||||
struct ext_sym_list *extsym_iter;
|
||||
struct ext_sym_list *extsym_start = NULL;
|
||||
|
||||
- while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:")) != -1) {
|
||||
+ while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:B")) != -1) {
|
||||
switch (opt) {
|
||||
case 'i':
|
||||
kernel_read = optarg;
|
||||
@@ -2139,6 +2142,9 @@ int main(int argc, char **argv)
|
||||
case 'w':
|
||||
warn_unresolved = 1;
|
||||
break;
|
||||
+ case 'B':
|
||||
+ integrated_build = 1;
|
||||
+ break;
|
||||
default:
|
||||
exit(1);
|
||||
}
|
||||
--
|
||||
1.7.4.4
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Set LINUX_GIT to point to an upstream Linux git tree in your .bashrc or wherever.
|
||||
#
|
||||
# TODO: Generate the gitN number.
|
||||
#
|
||||
|
||||
VER=$(grep patch sources | head -n1 | awk '{ print $2 }' | sed s/patch-// | sed s/.xz//)
|
||||
|
||||
OLDGIT=$(grep gitrev kernel.spec | head -n1 | sed s/%define\ gitrev\ //)
|
||||
export NEWGIT=$(($OLDGIT+1))
|
||||
|
||||
pushd $LINUX_GIT
|
||||
|
||||
git diff v$VER.. > /tmp/patch-$VER-git$NEWGIT
|
||||
xz -9 /tmp/patch-$VER-git$NEWGIT
|
||||
DESC=$(git describe)
|
||||
popd
|
||||
|
||||
mv /tmp/patch-$VER-git$NEWGIT.xz .
|
||||
|
||||
perl -p -i -e 's|%global baserelease.*|%global baserelease 0|' kernel.spec
|
||||
|
||||
perl -p -i -e 's|%define gitrev.*|%define gitrev $ENV{'NEWGIT'}|' kernel.spec
|
||||
|
||||
rpmdev-bumpspec -c "Linux $DESC" kernel.spec
|
|
@ -0,0 +1,22 @@
|
|||
--- a/drivers/scsi/sd.c
|
||||
+++ a/drivers/scsi/sd.c
|
||||
@@ -2362,13 +2362,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
|
||||
static int sd_revalidate_disk(struct gendisk *disk)
|
||||
{
|
||||
struct scsi_disk *sdkp = scsi_disk(disk);
|
||||
- struct scsi_device *sdp = sdkp->device;
|
||||
+ struct scsi_device *sdp;
|
||||
unsigned char *buffer;
|
||||
unsigned flush = 0;
|
||||
|
||||
SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
|
||||
"sd_revalidate_disk\n"));
|
||||
|
||||
+ if (WARN_ONCE((!sdkp), "Invalid scsi_disk from %p\n", disk))
|
||||
+ goto out;
|
||||
+
|
||||
+ sdp = sdkp->device;
|
||||
+
|
||||
/*
|
||||
* If the device is offline, don't try and read capacity or any
|
||||
* of the other niceties.
|
|
@ -0,0 +1,69 @@
|
|||
diff -uNrp kernel-3.2.fc16.orig/arch/x86/mm/mmap.c kernel-3.2.fc16.new/arch/x86/mm/mmap.c
|
||||
--- kernel-3.2.fc16.orig/arch/x86/mm/mmap.c 2012-03-19 16:47:03.495169091 -0400
|
||||
+++ kernel-3.2.fc16.new/arch/x86/mm/mmap.c 2012-03-19 16:50:03.574168052 -0400
|
||||
@@ -106,6 +106,10 @@ static unsigned long mmap_legacy_base(vo
|
||||
return TASK_UNMAPPED_BASE + mmap_rnd();
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ #define SHLIB_BASE 0x00111000
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* This function, called very early during the creation of a new
|
||||
* process VM image, sets up which VM layout function to use:
|
||||
@@ -126,8 +126,10 @@ void arch_pick_mmap_layout(struct mm_str
|
||||
#ifdef CONFIG_X86_32
|
||||
if (!(current->personality & READ_IMPLIES_EXEC)
|
||||
&& !(__supported_pte_mask & _PAGE_NX)
|
||||
- && mmap_is_ia32())
|
||||
+ && mmap_is_ia32()) {
|
||||
+ mm->shlib_base = SHLIB_BASE + mmap_rnd();
|
||||
mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
|
||||
+ }
|
||||
#endif
|
||||
mm->unmap_area = arch_unmap_area_topdown;
|
||||
}
|
||||
diff -uNrp kernel-3.2.fc16.orig/include/linux/mm_types.h kernel-3.2.fc16.new/include/linux/mm_types.h
|
||||
--- kernel-3.2.fc16.orig/include/linux/mm_types.h 2012-03-19 16:46:47.382169153 -0400
|
||||
+++ kernel-3.2.fc16.new/include/linux/mm_types.h 2012-03-19 16:50:40.738168219 -0400
|
||||
@@ -300,6 +300,7 @@ struct mm_struct {
|
||||
void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
|
||||
#endif
|
||||
unsigned long mmap_base; /* base of mmap area */
|
||||
+ unsigned long shlib_base; /* base of lib map area (ASCII armour)*/
|
||||
unsigned long task_size; /* size of task vm space */
|
||||
unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
|
||||
unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
|
||||
diff -uNrp kernel-3.2.fc16.orig/mm/mmap.c kernel-3.2.fc16.new/mm/mmap.c
|
||||
--- kernel-3.2.fc16.orig/mm/mmap.c 2012-03-19 16:46:15.791169274 -0400
|
||||
+++ kernel-3.2.fc16.new/mm/mmap.c 2012-03-19 16:51:37.351166875 -0400
|
||||
@@ -1594,8 +1594,6 @@ static bool should_randomize(void)
|
||||
!(current->personality & ADDR_NO_RANDOMIZE);
|
||||
}
|
||||
|
||||
-#define SHLIB_BASE 0x00110000
|
||||
-
|
||||
unsigned long
|
||||
arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0,
|
||||
unsigned long len0, unsigned long pgoff, unsigned long flags)
|
||||
@@ -1612,8 +1610,8 @@ arch_get_unmapped_exec_area(struct file
|
||||
return addr;
|
||||
|
||||
if (!addr)
|
||||
- addr = !should_randomize() ? SHLIB_BASE :
|
||||
- randomize_range(SHLIB_BASE, 0x01000000, len);
|
||||
+ addr = !should_randomize() ? mm->shlib_base :
|
||||
+ randomize_range(mm->shlib_base, 0x01000000, len);
|
||||
|
||||
if (addr) {
|
||||
addr = PAGE_ALIGN(addr);
|
||||
@@ -1623,7 +1621,7 @@ arch_get_unmapped_exec_area(struct file
|
||||
return addr;
|
||||
}
|
||||
|
||||
- addr = SHLIB_BASE;
|
||||
+ addr = mm->shlib_base;
|
||||
for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
|
||||
/* At this point: (!vma || addr < vma->vm_end). */
|
||||
if (TASK_SIZE - len < addr)
|
|
@ -0,0 +1,44 @@
|
|||
From 0dbc2bc96b1ec741bdd43451c286ccd45da3310b Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Wed, 2 Nov 2011 14:31:59 -0400
|
||||
Subject: [PATCH] sony-laptop: Enable keyboard backlight by default
|
||||
|
||||
When the keyboard backlight support was originally added, the commit said
|
||||
to default it to on with a 10 second timeout. That actually wasn't the
|
||||
case, as the default value is commented out for the kbd_backlight parameter.
|
||||
Because it is a static variable, it gets set to 0 by default without some
|
||||
other form of initialization.
|
||||
|
||||
However, it seems the function to set the value wasn't actually called
|
||||
immediately, so whatever state the keyboard was in initially would remain.
|
||||
Then commit df410d522410e67660 was introduced during the 2.6.39 timeframe to
|
||||
immediately set whatever value was present (as well as attempt to
|
||||
restore/reset the state on module removal or resume). That seems to have
|
||||
now forced the light off immediately when the module is loaded unless
|
||||
the option kbd_backlight=1 is specified.
|
||||
|
||||
Let's enable it by default again (for the first time). This should solve
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=728478
|
||||
|
||||
Acked-by: Mattia Dongili <malattia@linux.it>
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/sony-laptop.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
|
||||
index c006dee..40c4705 100644
|
||||
--- a/drivers/platform/x86/sony-laptop.c
|
||||
+++ b/drivers/platform/x86/sony-laptop.c
|
||||
@@ -127,7 +127,7 @@ MODULE_PARM_DESC(minor,
|
||||
"default is -1 (automatic)");
|
||||
#endif
|
||||
|
||||
-static int kbd_backlight; /* = 1 */
|
||||
+static int kbd_backlight = 1;
|
||||
module_param(kbd_backlight, int, 0444);
|
||||
MODULE_PARM_DESC(kbd_backlight,
|
||||
"set this to 0 to disable keyboard backlight, "
|
||||
--
|
||||
1.7.7.6
|
||||
|
5
sources
5
sources
|
@ -1,4 +1 @@
|
|||
364066fa18767ec0ae5f4e4abcf9dc51 linux-3.2.tar.xz
|
||||
465f9cf994d5c94b15ba167fae8e60fb patch-3.3-rc2.xz
|
||||
02c210a8fd24acca8c1ac93f6f1d3913 compat-wireless-2012-02-05.tar.bz2
|
||||
6923fa025f1718e31c4977ed6f9f9814 patch-3.3-rc2-git5.xz
|
||||
7133f5a2086a7d7ef97abac610c094f5 linux-3.3.tar.xz
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
From dadfe1ad137e6fbe251b4a5dc310840cfe414db4 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Mon, 20 Feb 2012 15:28:39 -0500
|
||||
Subject: [PATCH] ums_realtek: do not use stack memory for DMA in
|
||||
__do_config_autodelink
|
||||
|
||||
__do_config_autodelink passes the data variable to the transport function.
|
||||
If the calling functions pass a stack variable, this will eventually trigger
|
||||
a DMA-API debug backtrace for mapping stack memory in the DMA buffer. Fix
|
||||
this by calling kmemdup for the passed data instead.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/usb/storage/realtek_cr.c | 8 +++++++-
|
||||
1 files changed, 7 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
|
||||
index d32f720..eee2a96 100644
|
||||
--- a/drivers/usb/storage/realtek_cr.c
|
||||
+++ b/drivers/usb/storage/realtek_cr.c
|
||||
@@ -507,9 +507,14 @@ static int __do_config_autodelink(struct us_data *us, u8 *data, u16 len)
|
||||
{
|
||||
int retval;
|
||||
u8 cmnd[12] = {0};
|
||||
+ u8 *buf;
|
||||
|
||||
US_DEBUGP("%s, addr = 0xfe47, len = %d\n", __FUNCTION__, len);
|
||||
|
||||
+ buf = kmemdup(data, len, GFP_NOIO);
|
||||
+ if (!buf)
|
||||
+ return USB_STOR_TRANSPORT_ERROR;
|
||||
+
|
||||
cmnd[0] = 0xF0;
|
||||
cmnd[1] = 0x0E;
|
||||
cmnd[2] = 0xfe;
|
||||
@@ -517,7 +522,8 @@ static int __do_config_autodelink(struct us_data *us, u8 *data, u16 len)
|
||||
cmnd[4] = (u8)(len >> 8);
|
||||
cmnd[5] = (u8)len;
|
||||
|
||||
- retval = rts51x_bulk_transport_special(us, 0, cmnd, 12, data, len, DMA_TO_DEVICE, NULL);
|
||||
+ retval = rts51x_bulk_transport_special(us, 0, cmnd, 12, buf, len, DMA_TO_DEVICE, NULL);
|
||||
+ kfree(buf);
|
||||
if (retval != USB_STOR_TRANSPORT_GOOD) {
|
||||
return -EIO;
|
||||
}
|
||||
--
|
||||
1.7.9
|
||||
|
|
@ -0,0 +1,248 @@
|
|||
Date: Mon, 30 Jan 2012 22:37:28 +0100
|
||||
Message-ID: <CAPRPZsAt+e3cy1YTriikpb2SNN=jOusvnPF0ByFeun+uaBa5Og@mail.gmail.com>
|
||||
Subject: [PATCH] Unhandled IRQs on AMD E-450: temporarily switch to
|
||||
low-performance polling IRQ mode
|
||||
From: Jeroen Van den Keybus <jeroen.vandenkeybus@gmail.com>
|
||||
To: linux-kernel@vger.kernel.org
|
||||
Cc: Clemens Ladisch <clemens@ladisch.de>, "Huang, Shane" <Shane.Huang@amd.com>,
|
||||
Borislav Petkov <bp@amd64.org>, "Nguyen, Dong" <Dong.Nguyen@amd.com>,
|
||||
jesse.brandeburg@gmail.com
|
||||
Content-Type: text/plain; charset=ISO-8859-1
|
||||
Sender: linux-kernel-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-kernel.vger.kernel.org>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
X-RedHat-Spam-Score: -4.898 (DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD)
|
||||
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12
|
||||
X-Scanned-By: MIMEDefang 2.68 on 10.5.110.19
|
||||
Status: RO
|
||||
Content-Length: 7029
|
||||
Lines: 189
|
||||
|
||||
It seems that some motherboard designs using the ASM1083 PCI/PCIe
|
||||
bridge (PCI device ID 1b21:1080, Rev. 01) suffer from stuck IRQ lines
|
||||
on the PCI bus (causing the kernel to emit 'IRQxx: nobody cared' and
|
||||
disable the IRQ). The following patch is an attempt to mitigate the
|
||||
serious impact of permanently disabling an IRQ in that case and
|
||||
actually make PCI devices better usable on this platform.
|
||||
|
||||
It seems that the bridge fails to issue a IRQ deassertion message on
|
||||
the PCIe bus, when the relevant driver causes the interrupting PCI
|
||||
device to deassert its IRQ line. To solve this issue, it was tried to
|
||||
re-issue an IRQ on a PCI device being able to do so (e1000 in this
|
||||
case), but we suspect that the attempt to re-assert/deassert may have
|
||||
occurred too soon after the initial IRQ for the ASM1083. Anyway, it
|
||||
didn't work but if, after some delay, a new IRQ occurred, the related
|
||||
IRQ deassertion message eventually did clear the IOAPIC IRQ. It would
|
||||
be useful to re-enable the IRQ here.
|
||||
|
||||
Therefore the patch below to poll_spurious_irqs() in spurious.c is
|
||||
proposed, It does the following:
|
||||
|
||||
1. lets the kernel decide that an IRQ is unhandled after only 10
|
||||
positives (instead of 100,000);
|
||||
2. briefly (a few seconds or so, currently 1 s) switches to polling
|
||||
IRQ at a higher rate than usual (100..1,000Hz instead of 10Hz,
|
||||
currently 100Hz), but not too high to avoid excessive CPU load. Any
|
||||
device drivers 'see' their interrupts handled with a higher latency
|
||||
than usual, but they will still operate properly;
|
||||
3. afterwards, simply reenable the IRQ.
|
||||
|
||||
If proper operation of the PCIe legacy IRQ line emulation is restored
|
||||
after 3, the system operates again at normal performance. If the IRQ
|
||||
is still stuck after this procedure, the sequence repeats.
|
||||
|
||||
If a genuinely stuck IRQ is used with this solution, the system would
|
||||
simply sustain short bursts of 10 unhandled IRQs per second, and use
|
||||
polling mode indefinitely at a moderate 100Hz rate. It seemed a good
|
||||
alternative to the default irqpoll behaviour to me, which is why I
|
||||
left it in poll_spurious_irqs() (instead of creating a new kernel
|
||||
option). Additionally, if any device happens to share an IRQ with a
|
||||
faulty one, that device is no longer banned forever.
|
||||
|
||||
Debugging output is still present and may be removed. Bad IRQ
|
||||
reporting is also commented out now.
|
||||
|
||||
I have now tried it for about 2 months and I can conclude the following:
|
||||
|
||||
1. The patch works and, judging from my Firewire card interrupt on
|
||||
IRQ16, which repeats every 64 secs, I can confirm that the IRQ usually
|
||||
gets reset when a new IRQ arrives (polling mode runs for 64 seconds
|
||||
every time).
|
||||
2. When testing a SiL-3114 SATA PCI card behind the ASM1083, I could
|
||||
keep this running at fairly high speeds (50..70MB/s) for an hour or
|
||||
so, but eventually the SiL driver crashed. In such conditions the PCI
|
||||
system had to deal with a few hundred IRQs per second / polling mode
|
||||
kicking in every 5..10 seconds).
|
||||
|
||||
I would like to thank Clemens Ladisch for his invaluable help in
|
||||
finding a solution (and providing a patch to avoid my SATA going down
|
||||
every time during debugging).
|
||||
|
||||
|
||||
Signed-off-by: Jeroen Van den Keybus <jeroen.vandenkeybus@gmail.com>
|
||||
|
||||
Make it less chatty. Only kick it in if we detect an ASM1083 PCI bridge.
|
||||
|
||||
Josh Boyer <jwboyer@redhat.com>
|
||||
======
|
||||
|
||||
--- linux-2.6.orig/kernel/irq/spurious.c
|
||||
+++ linux-2.6/kernel/irq/spurious.c
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
static int irqfixup __read_mostly;
|
||||
|
||||
+int irq_poll_and_retry = 0;
|
||||
+
|
||||
#define POLL_SPURIOUS_IRQ_INTERVAL (HZ/10)
|
||||
static void poll_spurious_irqs(unsigned long dummy);
|
||||
static DEFINE_TIMER(poll_spurious_irq_timer, poll_spurious_irqs, 0, 0);
|
||||
@@ -141,12 +143,13 @@ out:
|
||||
static void poll_spurious_irqs(unsigned long dummy)
|
||||
{
|
||||
struct irq_desc *desc;
|
||||
- int i;
|
||||
+ int i, poll_again;
|
||||
|
||||
if (atomic_inc_return(&irq_poll_active) != 1)
|
||||
goto out;
|
||||
irq_poll_cpu = smp_processor_id();
|
||||
|
||||
+ poll_again = 0; /* Will stay false as long as no polling candidate is found */
|
||||
for_each_irq_desc(i, desc) {
|
||||
unsigned int state;
|
||||
|
||||
@@ -159,14 +162,33 @@ static void poll_spurious_irqs(unsigned
|
||||
if (!(state & IRQS_SPURIOUS_DISABLED))
|
||||
continue;
|
||||
|
||||
- local_irq_disable();
|
||||
- try_one_irq(i, desc, true);
|
||||
- local_irq_enable();
|
||||
+ /* We end up here with a disabled spurious interrupt.
|
||||
+ desc->irqs_unhandled now tracks the number of times
|
||||
+ the interrupt has been polled */
|
||||
+ if (irq_poll_and_retry) {
|
||||
+ if (desc->irqs_unhandled < 100) { /* 1 second delay with poll frequency 100 Hz */
|
||||
+ local_irq_disable();
|
||||
+ try_one_irq(i, desc, true);
|
||||
+ local_irq_enable();
|
||||
+ desc->irqs_unhandled++;
|
||||
+ poll_again = 1;
|
||||
+ } else {
|
||||
+ irq_enable(desc); /* Reenable the interrupt line */
|
||||
+ desc->depth--;
|
||||
+ desc->istate &= (~IRQS_SPURIOUS_DISABLED);
|
||||
+ desc->irqs_unhandled = 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ local_irq_disable();
|
||||
+ try_one_irq(i, desc, true);
|
||||
+ local_irq_enable();
|
||||
+ }
|
||||
}
|
||||
+ if (poll_again)
|
||||
+ mod_timer(&poll_spurious_irq_timer,
|
||||
+ jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
|
||||
out:
|
||||
atomic_dec(&irq_poll_active);
|
||||
- mod_timer(&poll_spurious_irq_timer,
|
||||
- jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
|
||||
}
|
||||
|
||||
static inline int bad_action_ret(irqreturn_t action_ret)
|
||||
@@ -177,11 +199,19 @@ static inline int bad_action_ret(irqretu
|
||||
}
|
||||
|
||||
/*
|
||||
- * If 99,900 of the previous 100,000 interrupts have not been handled
|
||||
+ * If 9 of the previous 10 interrupts have not been handled
|
||||
* then assume that the IRQ is stuck in some manner. Drop a diagnostic
|
||||
* and try to turn the IRQ off.
|
||||
*
|
||||
- * (The other 100-of-100,000 interrupts may have been a correctly
|
||||
+ * Although this may cause early deactivation of a sporadically
|
||||
+ * malfunctioning IRQ line, the poll system will:
|
||||
+ * a) Poll it for 100 cycles at a 100 Hz rate
|
||||
+ * b) Reenable it afterwards
|
||||
+ *
|
||||
+ * In worst case, with current settings, this will cause short bursts
|
||||
+ * of 10 interrupts every second.
|
||||
+ *
|
||||
+ * (The other single interrupt may have been a correctly
|
||||
* functioning device sharing an IRQ with the failing one)
|
||||
*/
|
||||
static void
|
||||
@@ -269,6 +299,8 @@ try_misrouted_irq(unsigned int irq, stru
|
||||
void note_interrupt(unsigned int irq, struct irq_desc *desc,
|
||||
irqreturn_t action_ret)
|
||||
{
|
||||
+ int unhandled_thresh = 999000;
|
||||
+
|
||||
if (desc->istate & IRQS_POLL_INPROGRESS)
|
||||
return;
|
||||
|
||||
@@ -302,19 +334,31 @@ void note_interrupt(unsigned int irq, st
|
||||
}
|
||||
|
||||
desc->irq_count++;
|
||||
- if (likely(desc->irq_count < 100000))
|
||||
- return;
|
||||
+ if (!irq_poll_and_retry)
|
||||
+ if (likely(desc->irq_count < 100000))
|
||||
+ return;
|
||||
+ else
|
||||
+ if (likely(desc->irq_count < 10))
|
||||
+ return;
|
||||
|
||||
desc->irq_count = 0;
|
||||
- if (unlikely(desc->irqs_unhandled > 99900)) {
|
||||
+ if (irq_poll_and_retry)
|
||||
+ unhandled_thresh = 9;
|
||||
+
|
||||
+ if (unlikely(desc->irqs_unhandled >= unhandled_thresh)) {
|
||||
/*
|
||||
- * The interrupt is stuck
|
||||
+ * The interrupt might be stuck
|
||||
*/
|
||||
- __report_bad_irq(irq, desc, action_ret);
|
||||
+ if (!irq_poll_and_retry) {
|
||||
+ __report_bad_irq(irq, desc, action_ret);
|
||||
+ printk(KERN_EMERG "Disabling IRQ %d\n", irq);
|
||||
+ } else {
|
||||
+ printk(KERN_INFO "IRQ %d might be stuck. Polling\n",
|
||||
+ irq);
|
||||
+ }
|
||||
/*
|
||||
* Now kill the IRQ
|
||||
*/
|
||||
- printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
|
||||
desc->istate |= IRQS_SPURIOUS_DISABLED;
|
||||
desc->depth++;
|
||||
irq_disable(desc);
|
||||
--- linux-2.6.orig/drivers/pci/quirks.c
|
||||
+++ linux-2.6/drivers/pci/quirks.c
|
||||
@@ -1677,6 +1677,22 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm);
|
||||
|
||||
+/* ASM108x transparent PCI bridges apparently have broken IRQ deassert
|
||||
+ * handling. This causes interrupts to get "stuck" and eventually disabled.
|
||||
+ * However, the interrupts are often shared and disabling them is fairly bad.
|
||||
+ * It's been somewhat successful to switch to polling mode and retry after
|
||||
+ * a bit, so let's do that.
|
||||
+ */
|
||||
+extern int irq_poll_and_retry;
|
||||
+static void quirk_asm108x_poll_interrupts(struct pci_dev *dev)
|
||||
+{
|
||||
+ dev_info(&dev->dev, "Buggy bridge found [%04x:%04x]\n",
|
||||
+ dev->vendor, dev->device);
|
||||
+ dev_info(&dev->dev, "Stuck interrupts will be polled and retried\n");
|
||||
+ irq_poll_and_retry = 1;
|
||||
+}
|
||||
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ASMEDIA, 0x1080, quirk_asm108x_poll_interrupts);
|
||||
+
|
||||
#ifdef CONFIG_X86_IO_APIC
|
||||
/*
|
||||
* Boot interrupts on some chipsets cannot be turned off. For these chipsets,
|
139
utrace.patch
139
utrace.patch
|
@ -1,4 +1,8 @@
|
|||
utrace for 3.3-rc1 kernel, on top of dcd6c92267155e70a94b3927bce681ce74b80d1f.
|
||||
From d007ce2c3f1f67624fde5e6b7ccc00566b7df9c3 Mon Sep 17 00:00:00 2001
|
||||
From: Oleg Nesterov <oleg@redhat.com>
|
||||
Date: Sat, 25 Feb 2012 07:29:40 -0500
|
||||
Subject: [PATCH] utrace for 3.3-rc4 kernel, on top of
|
||||
b52b80023f262ce8a0ffdcb490acb23e8678377a.
|
||||
|
||||
The split-out series is available in the git repository at:
|
||||
|
||||
|
@ -55,7 +59,7 @@ Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
|||
include/linux/sched.h | 25 +-
|
||||
include/linux/signal.h | 2 +
|
||||
include/linux/tracehook.h | 59 +-
|
||||
include/linux/utrace.h | 773 ++++++++++++
|
||||
include/linux/utrace.h | 774 ++++++++++++
|
||||
init/Kconfig | 9 +
|
||||
kernel/Makefile | 1 +
|
||||
kernel/exit.c | 5 +
|
||||
|
@ -63,8 +67,8 @@ Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
|||
kernel/ptrace.c | 57 +-
|
||||
kernel/sched/core.c | 2 +-
|
||||
kernel/signal.c | 97 ++-
|
||||
kernel/utrace.c | 2462 +++++++++++++++++++++++++++++++++++++
|
||||
19 files changed, 4069 insertions(+), 56 deletions(-)
|
||||
kernel/utrace.c | 2466 +++++++++++++++++++++++++++++++++++++
|
||||
19 files changed, 4074 insertions(+), 56 deletions(-)
|
||||
create mode 100644 Documentation/DocBook/utrace.tmpl
|
||||
create mode 100644 include/linux/utrace.h
|
||||
create mode 100644 kernel/utrace.c
|
||||
|
@ -721,10 +725,10 @@ index 5026738..97687f3 100644
|
|||
clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
|
||||
#endif
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index aeb135c..36a0cbe 100644
|
||||
index 92ce83a..87ff31f 100644
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -1401,9 +1401,12 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
@@ -1402,9 +1402,12 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
*/
|
||||
bprm->recursion_depth = depth;
|
||||
if (retval >= 0) {
|
||||
|
@ -810,7 +814,7 @@ index c2f1f6a..236b920 100644
|
|||
|
||||
if (child->ptrace & PT_SEIZED)
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 4032ec1..e95c1dc 100644
|
||||
index 7d379a6..a3c4599 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -185,16 +185,17 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
|
||||
|
@ -870,7 +874,7 @@ index 4032ec1..e95c1dc 100644
|
|||
u32 parent_exec_id;
|
||||
u32 self_exec_id;
|
||||
diff --git a/include/linux/signal.h b/include/linux/signal.h
|
||||
index 7987ce7..c320549 100644
|
||||
index 7987ce74..c320549 100644
|
||||
--- a/include/linux/signal.h
|
||||
+++ b/include/linux/signal.h
|
||||
@@ -239,6 +239,8 @@ static inline int valid_signal(unsigned long sig)
|
||||
|
@ -999,10 +1003,10 @@ index a71a292..a1bac95 100644
|
|||
|
||||
diff --git a/include/linux/utrace.h b/include/linux/utrace.h
|
||||
new file mode 100644
|
||||
index 0000000..f37373b
|
||||
index 0000000..46959af
|
||||
--- /dev/null
|
||||
+++ b/include/linux/utrace.h
|
||||
@@ -0,0 +1,773 @@
|
||||
@@ -0,0 +1,774 @@
|
||||
+/*
|
||||
+ * utrace infrastructure interface for debugging user processes
|
||||
+ *
|
||||
|
@ -1322,6 +1326,7 @@ index 0000000..f37373b
|
|||
+#define UTRACE_ATTACH_MATCH_MASK 0x000f
|
||||
+#define UTRACE_ATTACH_CREATE 0x0010 /* Attach a new engine. */
|
||||
+#define UTRACE_ATTACH_EXCLUSIVE 0x0020 /* Refuse if existing match. */
|
||||
+#define UTRACE_ATTACH_ATOMIC 0x0040 /* For _CREATE, don't sleep */
|
||||
+
|
||||
+/**
|
||||
+ * struct utrace_engine - per-engine structure
|
||||
|
@ -1809,7 +1814,7 @@ index 2d9de86..6c6749d 100644
|
|||
obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
|
||||
obj-$(CONFIG_AUDIT_WATCH) += audit_watch.o
|
||||
diff --git a/kernel/exit.c b/kernel/exit.c
|
||||
index 294b170..16108a5 100644
|
||||
index 4b4042f..b1e0518 100644
|
||||
--- a/kernel/exit.c
|
||||
+++ b/kernel/exit.c
|
||||
@@ -169,6 +169,8 @@ void release_task(struct task_struct * p)
|
||||
|
@ -1839,18 +1844,18 @@ index 294b170..16108a5 100644
|
|||
|
||||
validate_creds_for_do_exit(tsk);
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 051f090..e103101 100644
|
||||
index e2cd3e2..fa40928 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -66,6 +66,7 @@
|
||||
#include <linux/user-return-notifier.h>
|
||||
@@ -67,6 +67,7 @@
|
||||
#include <linux/oom.h>
|
||||
#include <linux/khugepaged.h>
|
||||
#include <linux/signalfd.h>
|
||||
+#include <linux/utrace.h>
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/pgalloc.h>
|
||||
@@ -169,6 +170,8 @@ void free_task(struct task_struct *tsk)
|
||||
@@ -170,6 +171,8 @@ void free_task(struct task_struct *tsk)
|
||||
free_thread_info(tsk->stack);
|
||||
rt_mutex_debug_task_free(tsk);
|
||||
ftrace_graph_exit_task(tsk);
|
||||
|
@ -1859,7 +1864,7 @@ index 051f090..e103101 100644
|
|||
free_task_struct(tsk);
|
||||
}
|
||||
EXPORT_SYMBOL(free_task);
|
||||
@@ -1092,6 +1095,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
@@ -1115,6 +1118,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
if (!p)
|
||||
goto fork_out;
|
||||
|
||||
|
@ -1868,16 +1873,16 @@ index 051f090..e103101 100644
|
|||
ftrace_graph_init_task(p);
|
||||
|
||||
rt_mutex_init_task(p);
|
||||
@@ -1527,6 +1532,8 @@ long do_fork(unsigned long clone_flags,
|
||||
init_completion(&vfork);
|
||||
@@ -1583,6 +1583,8 @@ long do_fork(unsigned long clone_flags,
|
||||
get_task_struct(p);
|
||||
}
|
||||
|
||||
+ UTRACE_HOOK(current, CLONE, report_clone(clone_flags, p));
|
||||
+
|
||||
/*
|
||||
* We set PF_STARTING at creation in case tracing wants to
|
||||
* use this to distinguish a fully live task from one that
|
||||
@@ -1538,6 +1545,8 @@ long do_fork(unsigned long clone_flags,
|
||||
wake_up_new_task(p);
|
||||
|
||||
/* forking complete and child started to run, tell ptracer */
|
||||
@@ -1561,6 +1568,8 @@ long do_fork(unsigned long clone_flags,
|
||||
wake_up_new_task(p);
|
||||
|
||||
/* forking complete and child started to run, tell ptracer */
|
||||
|
@ -2017,10 +2022,10 @@ index 00ab2ca..a7024b8 100644
|
|||
}
|
||||
unlock_task_sighand(child, &flags);
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index df00cb0..24dfee4 100644
|
||||
index 5255c9d..f1719b8 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -1172,7 +1172,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
|
||||
@@ -1167,7 +1167,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
|
||||
* is actually now running somewhere else!
|
||||
*/
|
||||
while (task_running(rq, p)) {
|
||||
|
@ -2216,10 +2221,10 @@ index c73c428..0508d93 100644
|
|||
trace_signal_deliver(signr, info, ka);
|
||||
diff --git a/kernel/utrace.c b/kernel/utrace.c
|
||||
new file mode 100644
|
||||
index 0000000..c817a46
|
||||
index 0000000..a169e1b
|
||||
--- /dev/null
|
||||
+++ b/kernel/utrace.c
|
||||
@@ -0,0 +1,2462 @@
|
||||
@@ -0,0 +1,2466 @@
|
||||
+/*
|
||||
+ * utrace infrastructure interface for debugging user processes
|
||||
+ *
|
||||
|
@ -2335,9 +2340,9 @@ index 0000000..c817a46
|
|||
+ *
|
||||
+ * This returns false only in case of a memory allocation failure.
|
||||
+ */
|
||||
+static bool utrace_task_alloc(struct task_struct *task)
|
||||
+static bool utrace_task_alloc(struct task_struct *task, gfp_t gfp_flags)
|
||||
+{
|
||||
+ struct utrace *utrace = kmem_cache_zalloc(utrace_cachep, GFP_KERNEL);
|
||||
+ struct utrace *utrace = kmem_cache_zalloc(utrace_cachep, gfp_flags);
|
||||
+ if (unlikely(!utrace))
|
||||
+ return false;
|
||||
+ spin_lock_init(&utrace->lock);
|
||||
|
@ -2517,6 +2522,7 @@ index 0000000..c817a46
|
|||
+{
|
||||
+ struct utrace *utrace = task_utrace_struct(target);
|
||||
+ struct utrace_engine *engine;
|
||||
+ gfp_t gfp_flags;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!(flags & UTRACE_ATTACH_CREATE)) {
|
||||
|
@ -2539,13 +2545,16 @@ index 0000000..c817a46
|
|||
+ */
|
||||
+ return ERR_PTR(-EPERM);
|
||||
+
|
||||
+ gfp_flags = (flags & UTRACE_ATTACH_ATOMIC)
|
||||
+ ? GFP_ATOMIC : GFP_KERNEL;
|
||||
+
|
||||
+ if (!utrace) {
|
||||
+ if (unlikely(!utrace_task_alloc(target)))
|
||||
+ if (unlikely(!utrace_task_alloc(target, gfp_flags)))
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+ utrace = task_utrace_struct(target);
|
||||
+ }
|
||||
+
|
||||
+ engine = kmem_cache_alloc(utrace_engine_cachep, GFP_KERNEL);
|
||||
+ engine = kmem_cache_alloc(utrace_engine_cachep, gfp_flags);
|
||||
+ if (unlikely(!engine))
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
|
@ -4682,74 +4691,6 @@ index 0000000..c817a46
|
|||
+{
|
||||
+ seq_printf(m, "Utrace:\t%lx\n", p->utrace_flags);
|
||||
+}
|
||||
|
||||
Add the new UTRACE_ATTACH_ATOMIC flag for utrace_attach_task().
|
||||
If it is set, UTRACE_ATTACH_CREATE uses GFP_ATOMIC for memory
|
||||
allocations and thus it can be used in atomic context.
|
||||
|
||||
Suggested-by: Mark Wielaard <mjw@redhat.com>
|
||||
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
||||
---
|
||||
include/linux/utrace.h | 1 +
|
||||
kernel/utrace.c | 12 ++++++++----
|
||||
2 files changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/linux/utrace.h b/include/linux/utrace.h
|
||||
index f37373b..46959af 100644
|
||||
--- a/include/linux/utrace.h
|
||||
+++ b/include/linux/utrace.h
|
||||
@@ -317,6 +317,7 @@ static inline enum utrace_syscall_action utrace_syscall_action(u32 action)
|
||||
#define UTRACE_ATTACH_MATCH_MASK 0x000f
|
||||
#define UTRACE_ATTACH_CREATE 0x0010 /* Attach a new engine. */
|
||||
#define UTRACE_ATTACH_EXCLUSIVE 0x0020 /* Refuse if existing match. */
|
||||
+#define UTRACE_ATTACH_ATOMIC 0x0040 /* For _CREATE, don't sleep */
|
||||
|
||||
/**
|
||||
* struct utrace_engine - per-engine structure
|
||||
diff --git a/kernel/utrace.c b/kernel/utrace.c
|
||||
index c817a46..a169e1b 100644
|
||||
--- a/kernel/utrace.c
|
||||
+++ b/kernel/utrace.c
|
||||
@@ -113,9 +113,9 @@ void task_utrace_unlock(struct task_struct *task)
|
||||
*
|
||||
* This returns false only in case of a memory allocation failure.
|
||||
*/
|
||||
-static bool utrace_task_alloc(struct task_struct *task)
|
||||
+static bool utrace_task_alloc(struct task_struct *task, gfp_t gfp_flags)
|
||||
{
|
||||
- struct utrace *utrace = kmem_cache_zalloc(utrace_cachep, GFP_KERNEL);
|
||||
+ struct utrace *utrace = kmem_cache_zalloc(utrace_cachep, gfp_flags);
|
||||
if (unlikely(!utrace))
|
||||
return false;
|
||||
spin_lock_init(&utrace->lock);
|
||||
@@ -295,6 +295,7 @@ struct utrace_engine *utrace_attach_task(
|
||||
{
|
||||
struct utrace *utrace = task_utrace_struct(target);
|
||||
struct utrace_engine *engine;
|
||||
+ gfp_t gfp_flags;
|
||||
int ret;
|
||||
|
||||
if (!(flags & UTRACE_ATTACH_CREATE)) {
|
||||
@@ -317,13 +318,16 @@ struct utrace_engine *utrace_attach_task(
|
||||
*/
|
||||
return ERR_PTR(-EPERM);
|
||||
|
||||
+ gfp_flags = (flags & UTRACE_ATTACH_ATOMIC)
|
||||
+ ? GFP_ATOMIC : GFP_KERNEL;
|
||||
+
|
||||
if (!utrace) {
|
||||
- if (unlikely(!utrace_task_alloc(target)))
|
||||
+ if (unlikely(!utrace_task_alloc(target, gfp_flags)))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
utrace = task_utrace_struct(target);
|
||||
}
|
||||
|
||||
- engine = kmem_cache_alloc(utrace_engine_cachep, GFP_KERNEL);
|
||||
+ engine = kmem_cache_alloc(utrace_engine_cachep, gfp_flags);
|
||||
if (unlikely(!engine))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
--
|
||||
1.5.5.1
|
||||
|
||||
1.7.9.1
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
debug patch for bz 787171/766277
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index bcbdb33..a6a5fdb 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -2530,8 +2530,10 @@ global_root:
|
||||
*/
|
||||
if (IS_ROOT(dentry) &&
|
||||
(dentry->d_name.len != 1 || dentry->d_name.name[0] != '/')) {
|
||||
- WARN(1, "Root dentry has weird name <%.*s>\n",
|
||||
- (int) dentry->d_name.len, dentry->d_name.name);
|
||||
+ WARN(1, "Root dentry has weird name <%.*s> vfsmnt:%s fs:%s\n",
|
||||
+ (int) dentry->d_name.len, dentry->d_name.name,
|
||||
+ vfsmnt->mnt_root->d_name.name,
|
||||
+ vfsmnt->mnt_sb->s_type->name);
|
||||
}
|
||||
if (!slash)
|
||||
error = prepend(buffer, buflen, "/", 1);
|
|
@ -0,0 +1,118 @@
|
|||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
|
||||
index 15763af..f6978b0 100644
|
||||
--- a/arch/x86/kernel/process.c
|
||||
+++ b/arch/x86/kernel/process.c
|
||||
@@ -386,17 +386,21 @@ void default_idle(void)
|
||||
*/
|
||||
smp_mb();
|
||||
|
||||
+ rcu_idle_enter();
|
||||
if (!need_resched())
|
||||
safe_halt(); /* enables interrupts racelessly */
|
||||
else
|
||||
local_irq_enable();
|
||||
+ rcu_idle_exit();
|
||||
current_thread_info()->status |= TS_POLLING;
|
||||
trace_power_end(smp_processor_id());
|
||||
trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id());
|
||||
} else {
|
||||
local_irq_enable();
|
||||
/* loop is done by the caller */
|
||||
+ rcu_idle_enter();
|
||||
cpu_relax();
|
||||
+ rcu_idle_exit();
|
||||
}
|
||||
}
|
||||
#ifdef CONFIG_APM_MODULE
|
||||
@@ -457,14 +461,19 @@ static void mwait_idle(void)
|
||||
|
||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||
smp_mb();
|
||||
+ rcu_idle_enter();
|
||||
if (!need_resched())
|
||||
__sti_mwait(0, 0);
|
||||
else
|
||||
local_irq_enable();
|
||||
+ rcu_idle_exit();
|
||||
trace_power_end(smp_processor_id());
|
||||
trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id());
|
||||
- } else
|
||||
+ } else {
|
||||
local_irq_enable();
|
||||
+ rcu_idle_enter();
|
||||
+ rcu_idle_exit();
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -477,8 +486,10 @@ static void poll_idle(void)
|
||||
trace_power_start(POWER_CSTATE, 0, smp_processor_id());
|
||||
trace_cpu_idle(0, smp_processor_id());
|
||||
local_irq_enable();
|
||||
+ rcu_idle_enter();
|
||||
while (!need_resched())
|
||||
cpu_relax();
|
||||
+ rcu_idle_exit();
|
||||
trace_power_end(smp_processor_id());
|
||||
trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id());
|
||||
}
|
||||
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
|
||||
index 485204f..6d9d4d5 100644
|
||||
--- a/arch/x86/kernel/process_32.c
|
||||
+++ b/arch/x86/kernel/process_32.c
|
||||
@@ -100,7 +100,6 @@ void cpu_idle(void)
|
||||
/* endless idle loop with no priority at all */
|
||||
while (1) {
|
||||
tick_nohz_idle_enter();
|
||||
- rcu_idle_enter();
|
||||
while (!need_resched()) {
|
||||
|
||||
check_pgt_cache();
|
||||
@@ -117,7 +116,6 @@ void cpu_idle(void)
|
||||
pm_idle();
|
||||
start_critical_timings();
|
||||
}
|
||||
- rcu_idle_exit();
|
||||
tick_nohz_idle_exit();
|
||||
preempt_enable_no_resched();
|
||||
schedule();
|
||||
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
|
||||
index 9b9fe4a..55a1a35 100644
|
||||
--- a/arch/x86/kernel/process_64.c
|
||||
+++ b/arch/x86/kernel/process_64.c
|
||||
@@ -140,13 +140,9 @@ void cpu_idle(void)
|
||||
/* Don't trace irqs off for idle */
|
||||
stop_critical_timings();
|
||||
|
||||
- /* enter_idle() needs rcu for notifiers */
|
||||
- rcu_idle_enter();
|
||||
-
|
||||
if (cpuidle_idle_call())
|
||||
pm_idle();
|
||||
|
||||
- rcu_idle_exit();
|
||||
start_critical_timings();
|
||||
|
||||
/* In many cases the interrupt that ended idle
|
||||
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
|
||||
index 20bce51..a9ddab8 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -261,6 +261,7 @@ static int intel_idle(struct cpuidle_device *dev,
|
||||
kt_before = ktime_get_real();
|
||||
|
||||
stop_critical_timings();
|
||||
+ rcu_idle_enter();
|
||||
if (!need_resched()) {
|
||||
|
||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||
@@ -268,6 +269,7 @@ static int intel_idle(struct cpuidle_device *dev,
|
||||
if (!need_resched())
|
||||
__mwait(eax, ecx);
|
||||
}
|
||||
+ rcu_idle_exit();
|
||||
|
||||
start_critical_timings();
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue