Commit a6a6d227 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull parisc fixes from Helge Deller:
 "parisc bug and warning fixes and wire up futex_waitv.

  Fix some warnings which showed up with allmodconfig builds, a revert
  of a change to the sigreturn trampoline which broke signal handling,
  wire up futex_waitv and add CONFIG_PRINTK_TIME=y to 32bit defconfig"

* tag 'for-5.16/parisc-4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Enable CONFIG_PRINTK_TIME=y in 32bit defconfig
  Revert "parisc: Reduce sigreturn trampoline to 3 instructions"
  parisc: Wrap assembler related defines inside __ASSEMBLY__
  parisc: Wire up futex_waitv
  parisc: Include stringify.h to avoid build error in crypto/api.c
  parisc/sticon: fix reverse colors
parents c46e8ece 9412f5aa
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -231,6 +231,7 @@ CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRC_CCITT=m
CONFIG_CRC_CCITT=m
CONFIG_CRC_T10DIF=y
CONFIG_CRC_T10DIF=y
CONFIG_FONTS=y
CONFIG_FONTS=y
CONFIG_PRINTK_TIME=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DEBUG_MEMORY_INIT=y
+24 −20
Original line number Original line Diff line number Diff line
@@ -3,38 +3,19 @@
 * Copyright (C) 1999 Hewlett-Packard (Frank Rowand)
 * Copyright (C) 1999 Hewlett-Packard (Frank Rowand)
 * Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org>
 * Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org>
 * Copyright (C) 1999 SuSE GmbH
 * Copyright (C) 1999 SuSE GmbH
 * Copyright (C) 2021 Helge Deller <deller@gmx.de>
 */
 */


#ifndef _PARISC_ASSEMBLY_H
#ifndef _PARISC_ASSEMBLY_H
#define _PARISC_ASSEMBLY_H
#define _PARISC_ASSEMBLY_H


#define CALLEE_FLOAT_FRAME_SIZE	80

#ifdef CONFIG_64BIT
#ifdef CONFIG_64BIT
#define LDREG	ldd
#define STREG	std
#define LDREGX  ldd,s
#define LDREGM	ldd,mb
#define STREGM	std,ma
#define SHRREG	shrd
#define SHLREG	shld
#define ANDCM   andcm,*
#define	COND(x)	* ## x
#define RP_OFFSET	16
#define RP_OFFSET	16
#define FRAME_SIZE	128
#define FRAME_SIZE	128
#define CALLEE_REG_FRAME_SIZE	144
#define CALLEE_REG_FRAME_SIZE	144
#define REG_SZ		8
#define REG_SZ		8
#define ASM_ULONG_INSN	.dword
#define ASM_ULONG_INSN	.dword
#else	/* CONFIG_64BIT */
#else	/* CONFIG_64BIT */
#define LDREG	ldw
#define STREG	stw
#define LDREGX  ldwx,s
#define LDREGM	ldwm
#define STREGM	stwm
#define SHRREG	shr
#define SHLREG	shlw
#define ANDCM   andcm
#define COND(x)	x
#define RP_OFFSET	20
#define RP_OFFSET	20
#define FRAME_SIZE	64
#define FRAME_SIZE	64
#define CALLEE_REG_FRAME_SIZE	128
#define CALLEE_REG_FRAME_SIZE	128
@@ -45,6 +26,7 @@
/* Frame alignment for 32- and 64-bit */
/* Frame alignment for 32- and 64-bit */
#define FRAME_ALIGN     64
#define FRAME_ALIGN     64


#define CALLEE_FLOAT_FRAME_SIZE	80
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)


#ifdef CONFIG_PA20
#ifdef CONFIG_PA20
@@ -67,6 +49,28 @@


#ifdef __ASSEMBLY__
#ifdef __ASSEMBLY__


#ifdef CONFIG_64BIT
#define LDREG	ldd
#define STREG	std
#define LDREGX  ldd,s
#define LDREGM	ldd,mb
#define STREGM	std,ma
#define SHRREG	shrd
#define SHLREG	shld
#define ANDCM   andcm,*
#define	COND(x)	* ## x
#else	/* CONFIG_64BIT */
#define LDREG	ldw
#define STREG	stw
#define LDREGX  ldwx,s
#define LDREGM	ldwm
#define STREGM	stwm
#define SHRREG	shr
#define SHLREG	shlw
#define ANDCM   andcm
#define COND(x)	x
#endif

#ifdef CONFIG_64BIT
#ifdef CONFIG_64BIT
/* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
/* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
 * work around that for now... */
 * work around that for now... */
+1 −0
Original line number Original line Diff line number Diff line
@@ -5,6 +5,7 @@
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__


#include <linux/types.h>
#include <linux/types.h>
#include <linux/stringify.h>
#include <asm/assembly.h>
#include <asm/assembly.h>


#define JUMP_LABEL_NOP_SIZE 4
#define JUMP_LABEL_NOP_SIZE 4
+1 −1
Original line number Original line Diff line number Diff line
@@ -2,7 +2,7 @@
#ifndef _ASM_PARISC_RT_SIGFRAME_H
#ifndef _ASM_PARISC_RT_SIGFRAME_H
#define _ASM_PARISC_RT_SIGFRAME_H
#define _ASM_PARISC_RT_SIGFRAME_H


#define SIGRETURN_TRAMP 3
#define SIGRETURN_TRAMP 4
#define SIGRESTARTBLOCK_TRAMP 5 
#define SIGRESTARTBLOCK_TRAMP 5 
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)


+7 −6
Original line number Original line Diff line number Diff line
@@ -288,21 +288,22 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
	   already in userspace. The first words of tramp are used to
	   already in userspace. The first words of tramp are used to
	   save the previous sigrestartblock trampoline that might be
	   save the previous sigrestartblock trampoline that might be
	   on the stack. We start the sigreturn trampoline at 
	   on the stack. We start the sigreturn trampoline at 
	   SIGRESTARTBLOCK_TRAMP. */
	   SIGRESTARTBLOCK_TRAMP+X. */
	err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
	err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
	err |= __put_user(INSN_BLE_SR2_R0, 
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
	err |= __put_user(INSN_LDI_R20, 
	err |= __put_user(INSN_LDI_R20, 
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
	err |= __put_user(INSN_BLE_SR2_R0, 
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
			&frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
	err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]);


	start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0];
	start = (unsigned long) &frame->tramp[0];
	end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3];
	end = (unsigned long) &frame->tramp[TRAMP_SIZE];
	flush_user_dcache_range_asm(start, end);
	flush_user_dcache_range_asm(start, end);
	flush_user_icache_range_asm(start, end);
	flush_user_icache_range_asm(start, end);


	/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
	/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
	 * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP
	 * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
	 * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
	 * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
	 */
	 */
	rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
	rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
Loading