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

Commit c8a12709 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/8xx: Remove macro that checks kernel address



The macro to check if an address is a kernel address or not is
not used anymore in DTLBmiss handler. It is used in ITLB miss handler
and in DTLB error handler. DTLB error handler is not a hot path, it
doesn't need such optimisation.

In order to simplify a following patch which will rework ITLB miss
handler, we remove the macros and reintroduce them inside the handler.

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent eef784bb
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -50,16 +50,9 @@
	mtspr	spr, reg
#endif

/* Macro to test if an address is a kernel address */
#if CONFIG_TASK_SIZE <= 0x80000000 && CONFIG_PAGE_OFFSET >= 0x80000000
#define IS_KERNEL(tmp, addr)		\
	andis.	tmp, addr, 0x8000	/* Address >= 0x80000000 */
#define BRANCH_UNLESS_KERNEL(label)	beq	label
#else
#define IS_KERNEL(tmp, addr)		\
	rlwinm	tmp, addr, 16, 16, 31;	\
	cmpli	cr0, tmp, PAGE_OFFSET >> 16
#define BRANCH_UNLESS_KERNEL(label)	blt	label
/* By simply checking Address >= 0x80000000, we know if its a kernel address */
#define SIMPLE_KERNEL_ADDRESS		1
#endif


@@ -346,11 +339,20 @@ InstructionTLBMiss:
	mfcr	r3
#endif
#if defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
	IS_KERNEL(r11, r10)
#ifdef SIMPLE_KERNEL_ADDRESS
	andis.	r11, r10, 0x8000	/* Address >= 0x80000000 */
#else
	rlwinm	r11, r10, 16, 0xfff8
	cmpli	cr0, r11, PAGE_OFFSET@h
#endif
#endif
	mfspr	r11, SPRN_M_TW	/* Get level 1 table */
#if defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
	BRANCH_UNLESS_KERNEL(3f)
#ifdef SIMPLE_KERNEL_ADDRESS
	beq+	3f
#else
	blt+	3f
#endif
	lis	r11, (swapper_pg_dir-PAGE_OFFSET)@ha
3:
#endif
@@ -704,9 +706,10 @@ FixupDAR:/* Entry point for dcbx workaround. */
	mtspr	SPRN_SPRG_SCRATCH2, r10
	/* fetch instruction from memory. */
	mfspr	r10, SPRN_SRR0
	IS_KERNEL(r11, r10)
	rlwinm	r11, r10, 16, 0xfff8
	cmpli	cr0, r11, PAGE_OFFSET@h
	mfspr	r11, SPRN_M_TW	/* Get level 1 table */
	BRANCH_UNLESS_KERNEL(3f)
	blt+	3f
	rlwinm	r11, r10, 16, 0xfff8
_ENTRY(FixupDAR_cmp)
	cmpli	cr7, r11, (PAGE_OFFSET + 0x1800000)@h