* [PATCH 0/6] metag: misc & priv patches
@ 2013-02-01 11:49 James Hogan
2013-02-01 11:49 ` [PATCH 1/6] metag: add __init to metag_cache_probe() James Hogan
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
Here are some additional metag patches I intend to add on top of the
existing v4 arch/metag patchset.
James Hogan (6):
metag: add __init to metag_cache_probe()
metag: add boot time LNKGET/LNKSET check
perf: Enable building perf tools for Meta
metag: kernel/setup.c: sort includes
metag: make TXPRIVEXT bits explicit
metag: protect more non-MMU memory regions
arch/metag/include/asm/metag_regs.h | 4 +
arch/metag/include/asm/processor.h | 2 +-
arch/metag/kernel/setup.c | 125 +++++++++++++++++++++++++----------
arch/metag/kernel/smp.c | 2 +-
arch/metag/mm/cache.c | 81 ++++++++++++++++++++++-
tools/perf/perf.h | 6 ++
6 files changed, 182 insertions(+), 38 deletions(-)
--
1.7.7.6
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] metag: add __init to metag_cache_probe()
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
@ 2013-02-01 11:49 ` James Hogan
2013-02-01 11:49 ` [PATCH 2/6] metag: add boot time LNKGET/LNKSET check James Hogan
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
metag_cache_probe() is only called from setup_arch(), so add the __init
attribute to it.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
---
arch/metag/mm/cache.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/metag/mm/cache.c b/arch/metag/mm/cache.c
index b713ec0..89da74a 100644
--- a/arch/metag/mm/cache.c
+++ b/arch/metag/mm/cache.c
@@ -42,7 +42,7 @@ static unsigned char icache_sets_log2 = DEFAULT_CACHE_WAYS_LOG2;
* Probe the L1 cache configuration to aid the L1 physical cache flushing
* functions.
*/
-void metag_cache_probe(void)
+void __init metag_cache_probe(void)
{
#ifndef CONFIG_METAG_META12
int coreid = metag_in32(METAC_CORE_ID);
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] metag: add boot time LNKGET/LNKSET check
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
2013-02-01 11:49 ` [PATCH 1/6] metag: add __init to metag_cache_probe() James Hogan
@ 2013-02-01 11:49 ` James Hogan
2013-02-01 11:49 ` [PATCH 3/6] perf: Enable building perf tools for Meta James Hogan
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
Add boot time check for whether LNKGET/LNKSET go through or around the
cache. Depending on the configuration an info message (no harm), warning
(technically wrong but no harm), or big WARN (expect failure in either
kernel or userland) may be emitted if the behaviour is not as expected:
Configuration Hardware Response
------------------------------------------ -------- --------
AROUND_CACHE through pr_info
!AROUND_CACHE && ATOMICITY_LNKGET around WARN (kernel)
" && !ATOMICITY_LNKGET && SMP around WARN (user)
" " && !SMP around pr_warn
Signed-off-by: James Hogan <james.hogan@imgtec.com>
---
arch/metag/mm/cache.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/arch/metag/mm/cache.c b/arch/metag/mm/cache.c
index 89da74a..4dd96e4 100644
--- a/arch/metag/mm/cache.c
+++ b/arch/metag/mm/cache.c
@@ -14,6 +14,7 @@
#include <linux/io.h>
#include <asm/cacheflush.h>
#include <asm/core_reg.h>
+#include <asm/global_lock.h>
#include <asm/metag_isa.h>
#include <asm/metag_mem.h>
#include <asm/metag_regs.h>
@@ -36,6 +37,82 @@ static int icache_set_shift = METAG_TBI_CACHE_SIZE_BASE_LOG2
static unsigned char dcache_sets_log2 = DEFAULT_CACHE_WAYS_LOG2;
static unsigned char icache_sets_log2 = DEFAULT_CACHE_WAYS_LOG2;
+#ifndef CONFIG_METAG_META12
+/**
+ * metag_lnkget_probe() - Probe whether lnkget/lnkset go around the cache
+ */
+static volatile u32 lnkget_testdata[16] __initdata __aligned(64);
+
+#define LNKGET_CONSTANT 0xdeadbeef
+
+void __init metag_lnkget_probe(void)
+{
+ int temp;
+ long flags;
+
+ /*
+ * It's conceivable the user has configured a globally coherent cache
+ * shared with non-Linux hardware threads, so use LOCK2 to prevent them
+ * from executing and causing cache eviction during the test.
+ */
+ __global_lock2(flags);
+
+ /* read a value to bring it into the cache */
+ (void)lnkget_testdata[0];
+ lnkget_testdata[0] = 0;
+
+ /* lnkget/lnkset it to modify it */
+ asm volatile(
+ "1: LNKGETD %0, [%1]\n"
+ " LNKSETD [%1], %2\n"
+ " DEFR %0, TXSTAT\n"
+ " ANDT %0, %0, #HI(0x3f000000)\n"
+ " CMPT %0, #HI(0x02000000)\n"
+ " BNZ 1b\n"
+ : "=&d" (temp)
+ : "da" (&lnkget_testdata[0]), "bd" (LNKGET_CONSTANT)
+ : "cc");
+
+ /* re-read it to see if the cached value changed */
+ temp = lnkget_testdata[0];
+
+ __global_unlock2(flags);
+
+ /* flush the cache line to fix any incoherency */
+ __builtin_dcache_flush((void *)&lnkget_testdata[0]);
+
+#if defined(CONFIG_METAG_LNKGET_AROUND_CACHE)
+ /* if the cache is right, LNKGET_AROUND_CACHE is unnecessary */
+ if (temp == LNKGET_CONSTANT)
+ pr_info("LNKGET/SET go through cache but CONFIG_METAG_LNKGET_AROUND_CACHE=y\n");
+#elif defined(CONFIG_METAG_ATOMICITY_LNKGET)
+ /*
+ * if the cache is wrong, LNKGET_AROUND_CACHE is really necessary
+ * because the kernel is configured to use LNKGET/SET for atomicity
+ */
+ WARN(temp != LNKGET_CONSTANT,
+ "LNKGET/SET go around cache but CONFIG_METAG_LNKGET_AROUND_CACHE=n\n"
+ "Expect kernel failure as it's used for atomicity primitives\n");
+#elif defined(CONFIG_SMP)
+ /*
+ * if the cache is wrong, LNKGET_AROUND_CACHE should be used or the
+ * gateway page won't flush and userland could break.
+ */
+ WARN(temp != LNKGET_CONSTANT,
+ "LNKGET/SET go around cache but CONFIG_METAG_LNKGET_AROUND_CACHE=n\n"
+ "Expect userland failure as it's used for user gateway page\n");
+#else
+ /*
+ * if the cache is wrong, LNKGET_AROUND_CACHE is set wrong, but it
+ * doesn't actually matter as it doesn't have any effect on !SMP &&
+ * !ATOMICITY_LNKGET.
+ */
+ if (temp != LNKGET_CONSTANT)
+ pr_warn("LNKGET/SET go around cache but CONFIG_METAG_LNKGET_AROUND_CACHE=n\n");
+#endif
+}
+#endif /* !CONFIG_METAG_META12 */
+
/**
* metag_cache_probe() - Probe L1 cache configuration.
*
@@ -68,6 +145,8 @@ void __init metag_cache_probe(void)
dcache_set_shift += (config & METAC_CORECFG2_DCSZ_BITS)
>> METAC_CORECFG2_DCSZ_S;
dcache_set_shift -= dcache_sets_log2;
+
+ metag_lnkget_probe();
#else
/* Extract cache sizes from global heap segment */
unsigned long val, u;
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] perf: Enable building perf tools for Meta
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
2013-02-01 11:49 ` [PATCH 1/6] metag: add __init to metag_cache_probe() James Hogan
2013-02-01 11:49 ` [PATCH 2/6] metag: add boot time LNKGET/LNKSET check James Hogan
@ 2013-02-01 11:49 ` James Hogan
2013-02-01 11:49 ` [PATCH 4/6] metag: kernel/setup.c: sort includes James Hogan
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel
Cc: James Hogan, Peter Zijlstra, Paul Mackerras, Ingo Molnar,
Arnaldo Carvalho de Melo
Define rmb(), cpu_relax(), and CPUINFO_PROC for Meta so that the perf
tools can be built for Meta.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
---
tools/perf/perf.h | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index 2c340e7..768507e 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -98,6 +98,12 @@ void get_term_dimensions(struct winsize *ws);
#define CPUINFO_PROC "cpu model"
#endif
+#ifdef __metag__
+#define rmb() asm volatile("" ::: "memory")
+#define cpu_relax() asm volatile("" ::: "memory")
+#define CPUINFO_PROC "CPU"
+#endif
+
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] metag: kernel/setup.c: sort includes
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
` (2 preceding siblings ...)
2013-02-01 11:49 ` [PATCH 3/6] perf: Enable building perf tools for Meta James Hogan
@ 2013-02-01 11:49 ` James Hogan
2013-02-01 11:49 ` [PATCH 5/6] metag: make TXPRIVEXT bits explicit James Hogan
2013-02-01 11:49 ` [PATCH 6/6] metag: protect more non-MMU memory regions James Hogan
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
Sort includes in kernel/setup.c.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
---
arch/metag/kernel/setup.c | 46 ++++++++++++++++++++++----------------------
1 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/arch/metag/kernel/setup.c b/arch/metag/kernel/setup.c
index 89f9cdc..aaebc56 100644
--- a/arch/metag/kernel/setup.c
+++ b/arch/metag/kernel/setup.c
@@ -5,43 +5,43 @@
*
*/
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/sched.h>
+#include <linux/bootmem.h>
+#include <linux/console.h>
+#include <linux/cpu.h>
#include <linux/delay.h>
-#include <linux/interrupt.h>
+#include <linux/errno.h>
#include <linux/fs.h>
-#include <linux/console.h>
#include <linux/genhd.h>
-#include <linux/errno.h>
-#include <linux/string.h>
#include <linux/init.h>
-#include <linux/bootmem.h>
-#include <linux/root_dev.h>
#include <linux/initrd.h>
-#include <linux/seq_file.h>
-#include <linux/pfn.h>
-#include <linux/start_kernel.h>
-#include <linux/cpu.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
#include <linux/memblock.h>
+#include <linux/mm.h>
#include <linux/of_fdt.h>
+#include <linux/pfn.h>
+#include <linux/root_dev.h>
+#include <linux/sched.h>
+#include <linux/seq_file.h>
+#include <linux/start_kernel.h>
+#include <linux/string.h>
#include <asm/cachepart.h>
#include <asm/clock.h>
-#include <asm/sections.h>
-#include <asm/setup.h>
-#include <asm/processor.h>
-#include <asm/traps.h>
-#include <asm/mmu.h>
+#include <asm/core_reg.h>
#include <asm/cpu.h>
+#include <asm/da.h>
+#include <asm/highmem.h>
#include <asm/hwthread.h>
-#include <asm/mmzone.h>
#include <asm/l2cache.h>
-#include <asm/da.h>
-#include <asm/prom.h>
#include <asm/mach/arch.h>
-#include <asm/core_reg.h>
-#include <asm/highmem.h>
+#include <asm/mmu.h>
+#include <asm/mmzone.h>
+#include <asm/processor.h>
+#include <asm/prom.h>
+#include <asm/sections.h>
+#include <asm/setup.h>
+#include <asm/traps.h>
/* PRIV protect as many registers as possible. */
#define DEFAULT_PRIV 0xff0f7f00
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] metag: make TXPRIVEXT bits explicit
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
` (3 preceding siblings ...)
2013-02-01 11:49 ` [PATCH 4/6] metag: kernel/setup.c: sort includes James Hogan
@ 2013-02-01 11:49 ` James Hogan
2013-02-01 11:49 ` [PATCH 6/6] metag: protect more non-MMU memory regions James Hogan
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
Define PRIV_BITS using explicit constants from <asm/metag_regs.h> rather
than with a hard coded value. This also adds a couple of missing
definitions for the TXPRIVEXT priv bits for protecting writes to TXTIMER
and the trace registers.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
---
arch/metag/include/asm/metag_regs.h | 4 ++++
arch/metag/kernel/setup.c | 34 +++++++++++++++++++++++++++-------
2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/arch/metag/include/asm/metag_regs.h b/arch/metag/include/asm/metag_regs.h
index 022fcad..acf4b8e 100644
--- a/arch/metag/include/asm/metag_regs.h
+++ b/arch/metag/include/asm/metag_regs.h
@@ -414,6 +414,10 @@
#define TXPRIVEXT_REGNUM 29
#define TXPRIVEXT_COPRO_BITS 0xFF000000 /* Co-processor 0-7 */
#define TXPRIVEXT_COPRO_S 24
+#ifndef METAC_1_2
+#define TXPRIVEXT_TXTIMER_BIT 0x00080000 /* TXTIMER priv */
+#define TXPRIVEXT_TRACE_BIT 0x00040000 /* TTEXEC|TTCTRL|GTEXEC */
+#endif
#define TXPRIVEXT_TXTRIGGER_BIT 0x00020000 /* TXSTAT|TXMASK|TXPOLL */
#define TXPRIVEXT_TXGBLCREG_BIT 0x00010000 /* Global common regs */
#define TXPRIVEXT_CBPRIV_BIT 0x00008000 /* Mem i/f dump priv */
diff --git a/arch/metag/kernel/setup.c b/arch/metag/kernel/setup.c
index aaebc56..dcb1d6d 100644
--- a/arch/metag/kernel/setup.c
+++ b/arch/metag/kernel/setup.c
@@ -35,6 +35,7 @@
#include <asm/hwthread.h>
#include <asm/l2cache.h>
#include <asm/mach/arch.h>
+#include <asm/metag_regs.h>
#include <asm/mmu.h>
#include <asm/mmzone.h>
#include <asm/processor.h>
@@ -43,18 +44,37 @@
#include <asm/setup.h>
#include <asm/traps.h>
-/* PRIV protect as many registers as possible. */
-#define DEFAULT_PRIV 0xff0f7f00
-
-/* Enable unaligned access checking. */
-#define UNALIGNED_PRIV 0x00000010
+/* Priv protect as many registers as possible. */
+#define DEFAULT_PRIV (TXPRIVEXT_COPRO_BITS | \
+ TXPRIVEXT_TXTRIGGER_BIT | \
+ TXPRIVEXT_TXGBLCREG_BIT | \
+ TXPRIVEXT_ILOCK_BIT | \
+ TXPRIVEXT_TXITACCYC_BIT | \
+ TXPRIVEXT_TXDIVTIME_BIT | \
+ TXPRIVEXT_TXAMAREGX_BIT | \
+ TXPRIVEXT_TXTIMERI_BIT | \
+ TXPRIVEXT_TXSTATUS_BIT | \
+ TXPRIVEXT_TXDISABLE_BIT)
+
+/* Meta2 specific bits. */
+#ifdef CONFIG_METAG_META12
+#define META2_PRIV 0
+#else
+#define META2_PRIV (TXPRIVEXT_TXTIMER_BIT | \
+ TXPRIVEXT_TRACE_BIT)
+#endif
+/* Unaligned access checking bits. */
#ifdef CONFIG_METAG_UNALIGNED
-#define PRIV_BITS (DEFAULT_PRIV | UNALIGNED_PRIV)
+#define UNALIGNED_PRIV TXPRIVEXT_ALIGNREW_BIT
#else
-#define PRIV_BITS DEFAULT_PRIV
+#define UNALIGNED_PRIV 0
#endif
+#define PRIV_BITS (DEFAULT_PRIV | \
+ META2_PRIV | \
+ UNALIGNED_PRIV)
+
extern char _heap_start[];
#ifdef CONFIG_METAG_BUILTIN_DTB
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] metag: protect more non-MMU memory regions
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
` (4 preceding siblings ...)
2013-02-01 11:49 ` [PATCH 5/6] metag: make TXPRIVEXT bits explicit James Hogan
@ 2013-02-01 11:49 ` James Hogan
5 siblings, 0 replies; 7+ messages in thread
From: James Hogan @ 2013-02-01 11:49 UTC (permalink / raw)
To: linux-kernel; +Cc: James Hogan
Rename setup_txprivext() to setup_priv() and add initialisation of some
more per-thread privilege protection registers:
- TxPRIVSYSR: 0x04400000-0x047fffff
0x05000000-0x07ffffff
0x84000000-0x87ffffff
- TxPIOREG: 0x02000000-0x02ffffff
0x04800000-0x048fffff
- TxSYREG: 0x04000000-0x04000fff (except write fetch system event)
Signed-off-by: James Hogan <james.hogan@imgtec.com>
---
arch/metag/include/asm/processor.h | 2 +-
arch/metag/kernel/setup.c | 45 ++++++++++++++++++++++++++++++++----
arch/metag/kernel/smp.c | 2 +-
3 files changed, 42 insertions(+), 7 deletions(-)
diff --git a/arch/metag/include/asm/processor.h b/arch/metag/include/asm/processor.h
index b7e2528..9b029a7 100644
--- a/arch/metag/include/asm/processor.h
+++ b/arch/metag/include/asm/processor.h
@@ -154,7 +154,7 @@ unsigned long get_wchan(struct task_struct *p);
#define cpu_relax() barrier()
-extern void setup_txprivext(void);
+extern void setup_priv(void);
static inline unsigned int hard_processor_id(void)
{
diff --git a/arch/metag/kernel/setup.c b/arch/metag/kernel/setup.c
index dcb1d6d..9803ca4 100644
--- a/arch/metag/kernel/setup.c
+++ b/arch/metag/kernel/setup.c
@@ -35,6 +35,7 @@
#include <asm/hwthread.h>
#include <asm/l2cache.h>
#include <asm/mach/arch.h>
+#include <asm/metag_mem.h>
#include <asm/metag_regs.h>
#include <asm/mmu.h>
#include <asm/mmzone.h>
@@ -75,6 +76,32 @@
META2_PRIV | \
UNALIGNED_PRIV)
+/*
+ * Protect access to:
+ * 0x06000000-0x07ffffff Direct mapped region
+ * 0x05000000-0x05ffffff MMU table region (Meta1)
+ * 0x04400000-0x047fffff Cache flush region
+ * 0x84000000-0x87ffffff Core cache memory region (Meta2)
+ *
+ * Allow access to:
+ * 0x80000000-0x81ffffff Core code memory region (Meta2)
+ */
+#ifdef CONFIG_METAG_META12
+#define PRIVSYSR_BITS TXPRIVSYSR_ALL_BITS
+#else
+#define PRIVSYSR_BITS (TXPRIVSYSR_ALL_BITS & ~TXPRIVSYSR_CORECODE_BIT)
+#endif
+
+/* Protect all 0x02xxxxxx and 0x048xxxxx. */
+#define PIOREG_BITS 0xffffffff
+
+/*
+ * Protect all 0x04000xx0 (system events)
+ * except write combiner flush and write fence (system events 4 and 5).
+ */
+#define PSYREG_BITS 0xfffffffb
+
+
extern char _heap_start[];
#ifdef CONFIG_METAG_BUILTIN_DTB
@@ -371,7 +398,7 @@ void __init setup_arch(char **cmdline_p)
paging_init(heap_end);
- setup_txprivext();
+ setup_priv();
/* Setup the boot cpu's mapping. The rest will be setup below. */
cpu_2_hwthread_id[smp_processor_id()] = hard_processor_id();
@@ -531,13 +558,21 @@ void __init metag_start_kernel(char *args)
start_kernel();
}
-/*
- * Setup TXPRIVEXT register to be prevent userland from touching our
- * precious registers.
+/**
+ * setup_priv() - Set up privilege protection registers.
+ *
+ * Set up privilege protection registers such as TXPRIVEXT to prevent userland
+ * from touching our precious registers and sensitive memory areas.
*/
-void setup_txprivext(void)
+void setup_priv(void)
{
+ unsigned int offset = hard_processor_id() << TXPRIVREG_STRIDE_S;
+
__core_reg_set(TXPRIVEXT, PRIV_BITS);
+
+ metag_out32(PRIVSYSR_BITS, T0PRIVSYSR + offset);
+ metag_out32(PIOREG_BITS, T0PIOREG + offset);
+ metag_out32(PSYREG_BITS, T0PSYREG + offset);
}
PTBI pTBI_get(unsigned int cpu)
diff --git a/arch/metag/kernel/smp.c b/arch/metag/kernel/smp.c
index d116312..4b6d1f14 100644
--- a/arch/metag/kernel/smp.c
+++ b/arch/metag/kernel/smp.c
@@ -268,7 +268,7 @@ asmlinkage void secondary_start_kernel(void)
preempt_disable();
- setup_txprivext();
+ setup_priv();
/*
* Enable local interrupts.
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-02-01 11:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-01 11:49 [PATCH 0/6] metag: misc & priv patches James Hogan
2013-02-01 11:49 ` [PATCH 1/6] metag: add __init to metag_cache_probe() James Hogan
2013-02-01 11:49 ` [PATCH 2/6] metag: add boot time LNKGET/LNKSET check James Hogan
2013-02-01 11:49 ` [PATCH 3/6] perf: Enable building perf tools for Meta James Hogan
2013-02-01 11:49 ` [PATCH 4/6] metag: kernel/setup.c: sort includes James Hogan
2013-02-01 11:49 ` [PATCH 5/6] metag: make TXPRIVEXT bits explicit James Hogan
2013-02-01 11:49 ` [PATCH 6/6] metag: protect more non-MMU memory regions James Hogan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).