From 3e3b39f173f9abc99da84084a1f4657c9de885bd Mon Sep 17 00:00:00 2001 From: xeji Date: Thu, 26 Apr 2018 01:41:53 +0200 Subject: [PATCH 1/3] qemu: 2.11.1 -> 2.12.0 --- .../virtualization/qemu/default.nix | 10 +- .../virtualization/qemu/statfs-flags.patch | 197 ------------------ 2 files changed, 3 insertions(+), 204 deletions(-) delete mode 100644 pkgs/applications/virtualization/qemu/statfs-flags.patch diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index 9839aadc9c1..0496adb6f40 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -21,8 +21,8 @@ with stdenv.lib; let - version = "2.11.1"; - sha256 = "1jrcff0szyjxc3vywyiclwdzk0xgq4cxvjbvmcfyjcpdrq9j5pyr"; + version = "2.12.0"; + sha256 = "17377xxbmwbrnh895a108z944pqi39hzrbw4jzgj8pcipi3s3x69"; audio = optionalString (hasSuffix "linux" stdenv.system) "alsa," + optionalString pulseSupport "pa," + optionalString sdlSupport "sdl,"; @@ -69,11 +69,7 @@ stdenv.mkDerivation rec { outputs = [ "out" "ga" ]; - patches = [ ./no-etc-install.patch ./statfs-flags.patch (fetchpatch { - name = "glibc-2.27-memfd.patch"; - url = "https://git.qemu.org/?p=qemu.git;a=patch;h=75e5b70e6b5dcc4f2219992d7cffa462aa406af0"; - sha256 = "0gaz93kb33qc0jx6iphvny0yrd17i8zhcl3a9ky5ylc2idz0wiwa"; - }) ] + patches = [ ./no-etc-install.patch ] ++ optional nixosTestRunner ./force-uid0-on-9p.patch ++ optional pulseSupport ./fix-hda-recording.patch ++ optionals stdenv.hostPlatform.isMusl [ diff --git a/pkgs/applications/virtualization/qemu/statfs-flags.patch b/pkgs/applications/virtualization/qemu/statfs-flags.patch deleted file mode 100644 index 52a470a2869..00000000000 --- a/pkgs/applications/virtualization/qemu/statfs-flags.patch +++ /dev/null @@ -1,197 +0,0 @@ -commit 909fe47c7009aa9a75fe9470c5f8d3dd5b50917a -Author: Shea Levy -Date: Sun Feb 18 13:50:11 2018 -0500 - - linux-user: Support f_flags in statfs when available. - - Signed-off-by: Shea Levy - -diff --git a/configure b/configure -index 913e14839d..52fe2bf941 100755 ---- a/configure -+++ b/configure -@@ -5303,6 +5303,22 @@ if compile_prog "" "" ; then - have_utmpx=yes - fi - -+########################################## -+# Check for newer fields of struct statfs on Linux -+ -+if test "$linux_user" = "yes"; then -+ cat > $TMPC < -+ -+int main(void) { -+ struct statfs fs; -+ fs.f_flags = 0; -+} -+EOF -+ if compile_object ; then -+ have_statfs_flags=yes -+ fi -+fi - ########################################## - # checks for sanitizers - -@@ -6518,6 +6534,10 @@ if test "$have_utmpx" = "yes" ; then - echo "HAVE_UTMPX=y" >> $config_host_mak - fi - -+if test "$have_statfs_flags" = "yes" ; then -+ echo "HAVE_STATFS_FLAGS=y" >> $config_host_mak -+fi -+ - if test "$ivshmem" = "yes" ; then - echo "CONFIG_IVSHMEM=y" >> $config_host_mak - fi -diff --git a/linux-user/syscall.c b/linux-user/syscall.c -index 82b35a6bdf..77481eca2c 100644 ---- a/linux-user/syscall.c -+++ b/linux-user/syscall.c -@@ -9534,6 +9534,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, - __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]); - __put_user(stfs.f_namelen, &target_stfs->f_namelen); - __put_user(stfs.f_frsize, &target_stfs->f_frsize); -+#ifdef HAVE_STATFS_FLAGS -+ __put_user(stfs.f_flags, &target_stfs->f_flags); -+#endif - memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare)); - unlock_user_struct(target_stfs, arg2, 1); - } -diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h -index a35c52a60a..64aa49d3c5 100644 ---- a/linux-user/syscall_defs.h -+++ b/linux-user/syscall_defs.h -@@ -362,7 +362,14 @@ struct kernel_statfs { - int f_ffree; - kernel_fsid_t f_fsid; - int f_namelen; -+#ifdef HAVE_STATFS_FLAGS -+ int f_frsize; -+ int f_flags; -+ int f_spare[4]; -+#else - int f_spare[6]; -+#endif -+ - }; - - struct target_dirent { -@@ -2223,7 +2230,12 @@ struct target_statfs { - /* Linux specials */ - target_fsid_t f_fsid; - int32_t f_namelen; -+#ifdef HAVE_STATFS_FLAGS -+ int32_t f_flags; -+ int32_t f_spare[5]; -+#else - int32_t f_spare[6]; -+#endif - }; - #else - struct target_statfs { -@@ -2239,7 +2251,12 @@ struct target_statfs { - /* Linux specials */ - target_fsid_t f_fsid; - abi_long f_namelen; -+#ifdef HAVE_STATFS_FLAGS -+ abi_long f_flags; -+ abi_long f_spare[5]; -+#else - abi_long f_spare[6]; -+#endif - }; - #endif - -@@ -2255,7 +2272,12 @@ struct target_statfs64 { - uint64_t f_bavail; - target_fsid_t f_fsid; - uint32_t f_namelen; -+#ifdef HAVE_STATFS_FLAGS -+ uint32_t f_flags; -+ uint32_t f_spare[5]; -+#else - uint32_t f_spare[6]; -+#endif - }; - #elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \ - defined(TARGET_SPARC64) || defined(TARGET_AARCH64)) && \ -@@ -2271,7 +2293,12 @@ struct target_statfs { - target_fsid_t f_fsid; - abi_long f_namelen; - abi_long f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ abi_long f_flags; -+ abi_long f_spare[4]; -+#else - abi_long f_spare[5]; -+#endif - }; - - struct target_statfs64 { -@@ -2285,7 +2312,12 @@ struct target_statfs64 { - target_fsid_t f_fsid; - abi_long f_namelen; - abi_long f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ abi_long f_flags; -+ abi_long f_spare[4]; -+#else - abi_long f_spare[5]; -+#endif - }; - #elif defined(TARGET_S390X) - struct target_statfs { -@@ -2299,7 +2331,13 @@ struct target_statfs { - kernel_fsid_t f_fsid; - int32_t f_namelen; - int32_t f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ int32_t f_flags; -+ int32_t f_spare[4]; -+#else - int32_t f_spare[5]; -+#endif -+ - }; - - struct target_statfs64 { -@@ -2313,7 +2351,12 @@ struct target_statfs64 { - kernel_fsid_t f_fsid; - int32_t f_namelen; - int32_t f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ int32_t f_flags; -+ int32_t f_spare[4]; -+#else - int32_t f_spare[5]; -+#endif - }; - #else - struct target_statfs { -@@ -2327,7 +2370,12 @@ struct target_statfs { - target_fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ uint32_t f_flags; -+ uint32_t f_spare[4]; -+#else - uint32_t f_spare[5]; -+#endif - }; - - struct target_statfs64 { -@@ -2341,7 +2389,12 @@ struct target_statfs64 { - target_fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; -+#ifdef HAVE_STATFS_FLAGS -+ uint32_t f_flags; -+ uint32_t f_spare[4]; -+#else - uint32_t f_spare[5]; -+#endif - }; - #endif - From 3d4aa7e95def212895c36262355ca6349cfe7d5a Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Thu, 26 Apr 2018 07:27:23 -0500 Subject: [PATCH 2/3] qemu: workaround 'struct sysinfo' conflict musl <--> linux Most everyone using musl patches the linux headers instead, but various software uses a local workaround like the one added in this commit (psutils, for example). It's not obvious to me which project has the "bug", and I'm reluctant to even propose modifying our headers without clear answer on the issue. Also, modifying those headers triggers rebuild-all-the-things. Hopefully upstream projects sort this out, in the meantime adding this define is a bit of a kludge but does the job. ------- For the curious, the patch usually is something like this: https://patchwork.kernel.org/patch/3833241/ Here's an updated version that also ensures kernel users get the sysinfo struct as expected too: https://raw.githubusercontent.com/openwrt/openwrt/e3c43ade0bae9491aeea50fa361e846bb5002dc0/target/linux/generic/pending-4.14/270-uapi-kernel.h-glibc-specific-inclusion-of-sysinfo.h.patch (cherry picked from commit dtzWill/nixpkgs@91b5f5a463f5545fbf4f916b3c624840fcb9f300) --- pkgs/applications/virtualization/qemu/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index 0496adb6f40..dd68eb19380 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -95,6 +95,8 @@ stdenv.mkDerivation rec { preConfigure = '' unset CPP # intereferes with dependency calculation + '' + optionalString stdenv.hostPlatform.isMusl '' + NIX_CFLAGS_COMPILE+=" -D_LINUX_SYSINFO_H" ''; configureFlags = From 00610fe0903e0aa300e4f7797a6d84d13f3d8ce9 Mon Sep 17 00:00:00 2001 From: xeji Date: Thu, 26 Apr 2018 18:15:21 +0200 Subject: [PATCH 3/3] qemu-riscv: remove, obsolete with qemu 2.12 upstream qemu 2.12 includes riscv support --- .../virtualization/qemu/riscv.nix | 30 ------------------- pkgs/top-level/all-packages.nix | 2 -- 2 files changed, 32 deletions(-) delete mode 100644 pkgs/applications/virtualization/qemu/riscv.nix diff --git a/pkgs/applications/virtualization/qemu/riscv.nix b/pkgs/applications/virtualization/qemu/riscv.nix deleted file mode 100644 index 2159ad4b4dc..00000000000 --- a/pkgs/applications/virtualization/qemu/riscv.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ qemu, fetchFromGitHub, lib }: let - src = fetchFromGitHub { - owner = "riscv"; - repo = "riscv-qemu"; - rev = "f733c7b5f86147216e14aff90c03ccdd76056bef"; - sha256 = "1ppr9qqwi7qqh8m6dgk1hrzg8zri240il27l67vfayd8ijagb9zq"; - fetchSubmodules = true; - }; - version = "2.11.92"; - revCount = "60378"; - shortRev = builtins.substring 0 9 src.rev; - targets = [ "riscv32-linux-user" "riscv32-softmmu" - "riscv64-linux-user" "riscv64-softmmu" - ]; -in lib.overrideDerivation qemu (orig: { - name = "${(builtins.parseDrvName qemu.name).name}-${version}pre${revCount}_${shortRev}"; - inherit src; -# <<<<<<< HEAD -# # https://github.com/riscv/riscv-qemu/pull/109 -# patches = [ ./no-etc-install.patch ./statfs-flags.patch ./riscv-initrd.patch ]; -# ======= - # The pulseaudio and statfs patches are in 2.12.0+, which this is based on - patches = [ - ./force-uid0-on-9p.patch - ./no-etc-install.patch - ]; - - configureFlags = orig.configureFlags ++ [ "--target-list=${lib.concatStringsSep "," targets}" ]; - postInstall = null; -}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c1606e82ca8..fb490a4753b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -17424,8 +17424,6 @@ with pkgs; inherit (darwin.stubs) rez setfile; }; - qemu-riscv = lowPrio (callPackage ../applications/virtualization/qemu/riscv.nix {}); - qgis = callPackage ../applications/gis/qgis { inherit (darwin.apple_sdk.frameworks) IOKit ApplicationServices; };