[07/15] ARM: add kexec_file_load system call number

Message ID 20190110162435.309262-8-arnd@arndb.de
State Superseded
Headers show
Series
  • arch: synchronize syscall tables in preparation for y2038
Related show

Commit Message

Arnd Bergmann Jan. 10, 2019, 4:24 p.m.
A couple of architectures including arm64 already implement the
kexec_file_load system call, on many others we have assigned a system
call number for it, but not implemented it yet.

Adding the number in arch/arm/ lets us use the system call on arm64
systems in compat mode, and also reduces the number of differences
between architectures. If we want to implement kexec_file_load on ARM
in the future, the number assignment means that kexec tools can already
be built with the now current set of kernel headers.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 arch/arm/tools/syscall.tbl        | 1 +
 arch/arm64/include/asm/unistd.h   | 2 +-
 arch/arm64/include/asm/unistd32.h | 2 ++
 3 files changed, 4 insertions(+), 1 deletion(-)

-- 
2.20.0

Comments

Will Deacon Jan. 10, 2019, 4:39 p.m. | #1
On Thu, Jan 10, 2019 at 05:24:27PM +0100, Arnd Bergmann wrote:
> A couple of architectures including arm64 already implement the

> kexec_file_load system call, on many others we have assigned a system

> call number for it, but not implemented it yet.

> 

> Adding the number in arch/arm/ lets us use the system call on arm64

> systems in compat mode, and also reduces the number of differences

> between architectures. If we want to implement kexec_file_load on ARM

> in the future, the number assignment means that kexec tools can already

> be built with the now current set of kernel headers.

> 

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  arch/arm/tools/syscall.tbl        | 1 +

>  arch/arm64/include/asm/unistd.h   | 2 +-

>  arch/arm64/include/asm/unistd32.h | 2 ++

>  3 files changed, 4 insertions(+), 1 deletion(-)

> 

> diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl

> index 86de9eb34296..20ed7e026723 100644

> --- a/arch/arm/tools/syscall.tbl

> +++ b/arch/arm/tools/syscall.tbl

> @@ -415,3 +415,4 @@

>  398	common	rseq			sys_rseq

>  399	common	io_pgetevents		sys_io_pgetevents

>  400	common	migrate_pages		sys_migrate_pages

> +401	common	kexec_file_load		sys_kexec_file_load

> diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h

> index 261216c3336e..2c30e6f145ff 100644

> --- a/arch/arm64/include/asm/unistd.h

> +++ b/arch/arm64/include/asm/unistd.h

> @@ -44,7 +44,7 @@

>  #define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE + 5)

>  #define __ARM_NR_COMPAT_END		(__ARM_NR_COMPAT_BASE + 0x800)

>  

> -#define __NR_compat_syscalls		401

> +#define __NR_compat_syscalls		402

>  #endif

>  

>  #define __ARCH_WANT_SYS_CLONE

> diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h

> index 355fe2bc035b..19f3f58b6146 100644

> --- a/arch/arm64/include/asm/unistd32.h

> +++ b/arch/arm64/include/asm/unistd32.h

> @@ -823,6 +823,8 @@ __SYSCALL(__NR_rseq, sys_rseq)

>  __SYSCALL(__NR_io_pgetevents, compat_sys_io_pgetevents)

>  #define __NR_migrate_pages 400

>  __SYSCALL(__NR_migrate_pages, sys_migrate_pages)

> +#define __NR_kexec_file_load 401

> +__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load)


Hmm, I wonder if we need a compat wrapper for this, or are we assuming
that the early entry code has already zero-extended the long and pointer
arguments?

Will
Arnd Bergmann Jan. 10, 2019, 5:14 p.m. | #2
On Thu, Jan 10, 2019 at 5:39 PM Will Deacon <will.deacon@arm.com> wrote:
>

> > diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h

> > index 355fe2bc035b..19f3f58b6146 100644

> > --- a/arch/arm64/include/asm/unistd32.h

> > +++ b/arch/arm64/include/asm/unistd32.h

> > @@ -823,6 +823,8 @@ __SYSCALL(__NR_rseq, sys_rseq)

> >  __SYSCALL(__NR_io_pgetevents, compat_sys_io_pgetevents)

> >  #define __NR_migrate_pages 400

> >  __SYSCALL(__NR_migrate_pages, sys_migrate_pages)

> > +#define __NR_kexec_file_load 401

> > +__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load)

>

> Hmm, I wonder if we need a compat wrapper for this, or are we assuming

> that the early entry code has already zero-extended the long and pointer

> arguments?


Yes, that is generally the assumption for compat syscalls.

s390 needs some extra magic to do a 31-to-64 extension on pointer
arguments, and I think sometimes we need a special wrapper to
do sign-extension of 32-bit arguments into 64-bit, but the arguments
here should not need that.

     Arnd

Patch

diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl
index 86de9eb34296..20ed7e026723 100644
--- a/arch/arm/tools/syscall.tbl
+++ b/arch/arm/tools/syscall.tbl
@@ -415,3 +415,4 @@ 
 398	common	rseq			sys_rseq
 399	common	io_pgetevents		sys_io_pgetevents
 400	common	migrate_pages		sys_migrate_pages
+401	common	kexec_file_load		sys_kexec_file_load
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h
index 261216c3336e..2c30e6f145ff 100644
--- a/arch/arm64/include/asm/unistd.h
+++ b/arch/arm64/include/asm/unistd.h
@@ -44,7 +44,7 @@ 
 #define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE + 5)
 #define __ARM_NR_COMPAT_END		(__ARM_NR_COMPAT_BASE + 0x800)
 
-#define __NR_compat_syscalls		401
+#define __NR_compat_syscalls		402
 #endif
 
 #define __ARCH_WANT_SYS_CLONE
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
index 355fe2bc035b..19f3f58b6146 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -823,6 +823,8 @@  __SYSCALL(__NR_rseq, sys_rseq)
 __SYSCALL(__NR_io_pgetevents, compat_sys_io_pgetevents)
 #define __NR_migrate_pages 400
 __SYSCALL(__NR_migrate_pages, sys_migrate_pages)
+#define __NR_kexec_file_load 401
+__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load)
 
 /*
  * Please add new compat syscalls above this comment and update