Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9e2bdfd authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: Factor in cpu id for selection of cache colour fixmap.



In the SMP VIPT case the page copy/clear ops still perform colouring,
care needs to be taken that CPUs don't end up stepping on each other,
so we give them a bit of room to work with.

At the same time, we reduce the worst-case colouring given that these
pages are always consumed.

Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent c4845a4b
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -14,9 +14,9 @@
#define _ASM_FIXMAP_H

#include <linux/kernel.h>
#include <linux/threads.h>
#include <asm/page.h>
#ifdef CONFIG_HIGHMEM
#include <linux/threads.h>
#include <asm/kmap_types.h>
#endif

@@ -46,9 +46,9 @@
 * fix-mapped?
 */
enum fixed_addresses {
#define FIX_N_COLOURS 16
#define FIX_N_COLOURS 8
	FIX_CMAP_BEGIN,
	FIX_CMAP_END = FIX_CMAP_BEGIN + FIX_N_COLOURS,
	FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS),
	FIX_UNCACHED,
#ifdef CONFIG_HIGHMEM
	FIX_KMAP_BEGIN,	/* reserved pte's for temporary kernel mappings */
+3 −1
Original line number Diff line number Diff line
@@ -39,7 +39,9 @@ void *kmap_coherent(struct page *page, unsigned long addr)
	pagefault_disable();

	idx = FIX_CMAP_END -
		((addr & current_cpu_data.dcache.alias_mask) >> PAGE_SHIFT);
		(((addr >> PAGE_SHIFT) & (FIX_N_COLOURS - 1)) +
		 (FIX_N_COLOURS * smp_processor_id()));

	vaddr = __fix_to_virt(idx);

	BUG_ON(!pte_none(*(kmap_coherent_pte - idx)));