[libvirt] [PATCH] virprocess: Extend list of platforms for setns wrapper

Pavel Hrdina phrdina at redhat.com
Mon Sep 15 14:20:44 UTC 2014


On 09/15/2014 03:43 PM, Michal Privoznik wrote:
> Currently, the setns() wrapper is supported only for x86_64 and i686
> which leaves us failing to build on other platforms like arm, aarch64
> and so on. This means, that the wrapper needs to be extended to those
> platforms and make to fail on runtime not compile time.
>
> The syscall numbers for other platforms was fetched using this
> command:
>
> kernel.git $ git grep "define.*__NR_setns" | grep -e arm -e powerpc -e s390
> arch/arm/include/uapi/asm/unistd.h:#define __NR_setns                   (__NR_SYSCALL_BASE+375)
> arch/arm64/include/asm/unistd32.h:#define __NR_setns 375
> arch/powerpc/include/uapi/asm/unistd.h:#define __NR_setns               350
> arch/s390/include/uapi/asm/unistd.h:#define __NR_setns          339
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>   src/util/virprocess.c | 18 ++++++++++++------
>   1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/src/util/virprocess.c b/src/util/virprocess.c
> index 3dae1bd..eac49f5 100644
> --- a/src/util/virprocess.c
> +++ b/src/util/virprocess.c
> @@ -71,27 +71,33 @@ VIR_LOG_INIT("util.process");
>   #  define __NR_setns 308
>   # elif defined(__i386__)
>   #  define __NR_setns 346
> -# else
> -#  error "__NR_setns is not defined"
> +# elif defined(__arm__)
> +#  define __NR_setns 375
> +# elif defined(__aarch64__)
> +#  define __NR_setns 375
> +# elif defined(__powerpc__)
> +#  define __NR_setns 350
> +# elif defined(__s390__)
> +#  define __NR_setns 339
>   # endif
>   #endif
>
>   #ifndef HAVE_SETNS
> -# ifndef WIN32
> +# ifdef __NR_setns

This would work only if the macro wasn't defined in kernel, but it seems 
that it's defined also for WIN32.

>   #  include <sys/syscall.h>
>
>   static inline int setns(int fd, int nstype)
>   {
>       return syscall(__NR_setns, fd, nstype);
>   }
> -# else
> +# else /* __NR_setns */
>   static inline int setns(int fd ATTRIBUTE_UNUSED, int nstype ATTRIBUTE_UNUSED)
>   {
>       virReportSystemError(ENOSYS, "%s",
> -                         _("Namespaces are not supported on windows."));
> +                         _("Namespaces are not supported on this platform."));
>       return -1;
>   }
> -# endif /* WIN32 */
> +# endif /* __NR_setns */
>   #endif /* HAVE_SETNS */
>
>   /**
>

NACK as it again breaks the MinGW build.

Pavel




More information about the libvir-list mailing list