3
0
Fork 0
forked from mirrors/nixpkgs

linux_riscv: Add 4.16-rc1.

Fixes #35148.
This commit is contained in:
Shea Levy 2018-02-19 12:14:22 -05:00
parent 3f9c900e42
commit 6173f2f945
No known key found for this signature in database
GPG key ID: 5C0BD6957D86FE27
7 changed files with 165 additions and 0 deletions

View file

@ -545,6 +545,12 @@ rec {
name = "riscv-multiplatform";
kernelArch = "riscv";
bfdEmulation = "elf${bits}lriscv";
kernelTarget = "vmlinux";
kernelAutoModules = true;
kernelBaseConfig = "defconfig";
kernelExtraConfig = ''
FTRACE n
'';
};
selectBySystem = system: {

View file

@ -0,0 +1,18 @@
{ stdenv, buildPackages, hostPlatform, fetchFromGitHub, perl, buildLinux, libelf, utillinux, ... } @ args:
buildLinux (args // rec {
version = "4.16-rc1";
modDirVersion = "4.16.0-rc1";
extraMeta.branch = "4.16";
src = fetchFromGitHub {
owner = "riscv";
repo ="riscv-linux";
rev = "a31991a9c6ce2c86fd676cf458a0ec10edc20d37";
sha256 = "0n97wfbi3pnp5c70xfj7s0fk8zjjkjz6ldxh7n54kbf64l4in01f";
};
# Should the testing kernels ever be built on Hydra?
extraMeta.hydraPlatforms = [];
} // (args.argsOverride or {}))

View file

@ -72,4 +72,20 @@ rec {
sha256 = "09096npxpgvlwdz3pb3m9brvxh7vy0xc9z9p8hh85xyczyzcsjhr";
};
};
riscv_modules = {
name = "riscv-modules";
patch = ./riscv-modules.patch;
};
riscv_irq_busy = {
name = "riscv-irq-busy";
patch = ./riscv-irq-busy.patch;
};
riscv_install = {
name = "riscv-install";
patch = ./riscv-install.patch;
};
}

View file

@ -0,0 +1,65 @@
commit 365fc1312f4911bfae25c5914c398f9aca21948f
Author: Shea Levy <shea@shealevy.com>
Date: Mon Feb 19 10:50:58 2018 -0500
riscv: Add install target to Makefile.
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
index 6719dd30ec5b..26892daefa05 100644
--- a/arch/riscv/Makefile
+++ b/arch/riscv/Makefile
@@ -70,3 +70,7 @@ core-y += arch/riscv/kernel/ arch/riscv/mm/
libs-y += arch/riscv/lib/
all: vmlinux
+
+PHONY += install
+install: vmlinux
+ sh $(srctree)/arch/riscv/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
diff --git a/arch/riscv/install.sh b/arch/riscv/install.sh
new file mode 100644
index 000000000000..8b3155a11a4a
--- /dev/null
+++ b/arch/riscv/install.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# arch/riscv/install.sh
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License. See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 1995 by Linus Torvalds
+#
+# Adapted from code in arch/ia64/Makefile by Shea Levy
+#
+# "make install" script for riscv architecture
+#
+# Arguments:
+# $1 - kernel version
+# $2 - kernel image file
+# $3 - kernel map file
+# $4 - default install path (blank if root directory)
+#
+
+# User may have a custom install script
+
+if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
+if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
+
+# Default install - no bootloader configuration (yet?)
+base=$(basename $2)
+
+if [ -f $4/$base ]; then
+ mv $4/$base $4/$base.old
+fi
+
+if [ -f $4/System.map ]; then
+ mv $4/System.map $4/System.old
+fi
+
+cat $2 > $4/$base
+cp $3 $4/System.map

View file

@ -0,0 +1,42 @@
commit 2603e6087b26e9428b806b267aee6bcb919abcea
Author: Shea Levy <shea@shealevy.com>
Date: Sun Feb 18 20:08:30 2018 -0500
set_handle_irq: Return EBUSY if the handler has already been registered.
This is what's expected by the comments and at least by irq-riscv-intc.c
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 2930fd2572e4..77e97872a13e 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -1179,7 +1179,7 @@ int ipi_send_mask(unsigned int virq, const struct cpumask *dest);
* Returns 0 on success, or -EBUSY if an IRQ handler has already been
* registered.
*/
-void __init set_handle_irq(void (*handle_irq)(struct pt_regs *));
+int __init set_handle_irq(void (*handle_irq)(struct pt_regs *));
/*
* Allows interrupt handlers to find the irqchip that's been registered as the
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index dee4f9a172ca..3570c715c3e7 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -213,11 +213,12 @@ irqreturn_t handle_irq_event(struct irq_desc *desc)
}
#ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
-void __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
+int __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
{
if (handle_arch_irq)
- return;
+ return -EBUSY;
handle_arch_irq = handle_irq;
+ return 0;
}
#endif

View file

@ -0,0 +1,11 @@
diff -Naur linux-4.15.4-orig/arch/riscv/configs/defconfig linux-4.15.4/arch/riscv/configs/defconfig
--- linux-4.15.4-orig/arch/riscv/configs/defconfig 2018-02-16 14:07:01.000000000 -0500
+++ linux-4.15.4/arch/riscv/configs/defconfig 2018-02-18 18:33:09.488431900 -0500
@@ -12,6 +12,7 @@
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_BLK_DEV_INITRD=y
+CONFIG_MODULES=y
CONFIG_EXPERT=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_BPF_SYSCALL=y

View file

@ -13107,6 +13107,13 @@ with pkgs;
];
};
linux_riscv = callPackage ../os-specific/linux/kernel/linux-riscv.nix {
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.modinst_arg_list_too_long
] ++ lib.optionals hostPlatform.isRiscV [ kernelPatches.riscv_modules kernelPatches.riscv_irq_busy kernelPatches.riscv_install ];
};
linux_samus_4_12 = callPackage ../os-specific/linux/kernel/linux-samus-4.12.nix {
kernelPatches =
[ kernelPatches.bridge_stp_helper