From 5113505bccad5b371a53a49cdbca22f5c07ffa03 Mon Sep 17 00:00:00 2001 From: André Fabian Silva Delgado Date: Wed, 1 Apr 2015 21:08:18 -0300 Subject: linux-libre-grsec{,-knock}-3.19.3_gnu.201503270049-1.1: fix system boot hang with libreboot -> https://bugzilla.kernel.org/show_bug.cgi?id=93171 --- ...-enable-CS_PARSER_ERROR-interrupts-at-all.patch | 66 ++++++++++++++++++++++ kernels/linux-libre-grsec-knock/PKGBUILD | 8 ++- ...-enable-CS_PARSER_ERROR-interrupts-at-all.patch | 66 ++++++++++++++++++++++ libre/linux-libre-grsec/PKGBUILD | 8 ++- 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 kernels/linux-libre-grsec-knock/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch create mode 100644 libre/linux-libre-grsec/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch diff --git a/kernels/linux-libre-grsec-knock/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch b/kernels/linux-libre-grsec-knock/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch new file mode 100644 index 000000000..4e801b3cc --- /dev/null +++ b/kernels/linux-libre-grsec-knock/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch @@ -0,0 +1,66 @@ +From b27b2ff4bd6f0327ee550baa0397ccf0a559821f Mon Sep 17 00:00:00 2001 +From: Daniel Vetter +Date: Wed, 1 Apr 2015 13:40:48 +0200 +Subject: [PATCH] drm/i915: Dont enable CS_PARSER_ERROR interrupts at all + +We stopped handling them in + +commit aaecdf611a05cac26a94713bad25297e60225c29 +Author: Daniel Vetter +Date: Tue Nov 4 15:52:22 2014 +0100 + + drm/i915: Stop gathering error states for CS error interrupts + +but just clearing is apparently not enough: A sufficiently dead gpu +left behind by firmware (*cough* coreboot *cough*) can keep the gpu in +an endless loop of such interrupts, eventually leading to the nmi +firing. And definitely to what looks like a machine hang. + +Since we don't even enable these interrupts on gen5+ let's do the same +on earlier platforms. + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=93171 +Signed-off-by: Daniel Vetter +--- + drivers/gpu/drm/i915/i915_irq.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index 14ecb4d13a1a..6d494432b19f 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -3598,14 +3598,12 @@ static int i8xx_irq_postinstall(struct drm_device *dev) + ~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | +- I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT); ++ I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT); + I915_WRITE16(IMR, dev_priv->irq_mask); + + I915_WRITE16(IER, + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT | + I915_USER_INTERRUPT); + POSTING_READ16(IER); + +@@ -3767,14 +3765,12 @@ static int i915_irq_postinstall(struct drm_device *dev) + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | +- I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT); ++ I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT); + + enable_mask = + I915_ASLE_INTERRUPT | + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT | + I915_USER_INTERRUPT; + + if (I915_HAS_HOTPLUG(dev)) { +-- +2.1.4 + diff --git a/kernels/linux-libre-grsec-knock/PKGBUILD b/kernels/linux-libre-grsec-knock/PKGBUILD index c5fb0c79a..5ca3fa25f 100644 --- a/kernels/linux-libre-grsec-knock/PKGBUILD +++ b/kernels/linux-libre-grsec-knock/PKGBUILD @@ -24,7 +24,7 @@ _replacesoldmodules=() # '%' gets replaced with _kernelname _srcname=linux-${_pkgbasever%-*} _archpkgver=${_pkgver%-*}.${_timestamp} pkgver=${_pkgver//-/_}.${_timestamp} -pkgrel=1 +pkgrel=1.1 arch=('i686' 'x86_64' 'mips64el') url="https://wiki.parabola.nu/Grsecurity%2BKnock" license=('GPL2') @@ -44,6 +44,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' + '0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch' # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ # Note: Makefile patching was removed due which we are using specific flags from grsecurity patch '3.19-d230a5811d-loongson-community.patch') @@ -63,6 +64,7 @@ sha256sums=('2a60ec99ae498e7cdafac63ecca1c0ca07643eaa6c9a1a83f19e4daa3e75b9d9' '6de8a8319271809ffdb072b68d53d155eef12438e6d04ff06a5a4db82c34fa8a' '13bd7a8d9ed6b6bc971e4cd162262c5a20448a83796af39ce394d827b0e5de74' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' + '66cb2d859b253bc4e793baa3c0b95523d647a773b957dbc79b3eaacccf8692b5' 'bbb03bc36982b37ff51ac1314e8ba4d01ad6416b032a18afd5eb3bb05caa4914') validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva @@ -107,6 +109,10 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" + # drm/i915: Stop gathering error states for CS error interrupts + # https://bugzilla.kernel.org/show_bug.cgi?id=93171 + patch -p1 -i "${srcdir}/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch" + # Adding loongson-community patch if [ "${CARCH}" == "mips64el" ]; then patch -p1 -i ${srcdir}/3.19-d230a5811d-loongson-community.patch diff --git a/libre/linux-libre-grsec/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch b/libre/linux-libre-grsec/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch new file mode 100644 index 000000000..4e801b3cc --- /dev/null +++ b/libre/linux-libre-grsec/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch @@ -0,0 +1,66 @@ +From b27b2ff4bd6f0327ee550baa0397ccf0a559821f Mon Sep 17 00:00:00 2001 +From: Daniel Vetter +Date: Wed, 1 Apr 2015 13:40:48 +0200 +Subject: [PATCH] drm/i915: Dont enable CS_PARSER_ERROR interrupts at all + +We stopped handling them in + +commit aaecdf611a05cac26a94713bad25297e60225c29 +Author: Daniel Vetter +Date: Tue Nov 4 15:52:22 2014 +0100 + + drm/i915: Stop gathering error states for CS error interrupts + +but just clearing is apparently not enough: A sufficiently dead gpu +left behind by firmware (*cough* coreboot *cough*) can keep the gpu in +an endless loop of such interrupts, eventually leading to the nmi +firing. And definitely to what looks like a machine hang. + +Since we don't even enable these interrupts on gen5+ let's do the same +on earlier platforms. + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=93171 +Signed-off-by: Daniel Vetter +--- + drivers/gpu/drm/i915/i915_irq.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index 14ecb4d13a1a..6d494432b19f 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -3598,14 +3598,12 @@ static int i8xx_irq_postinstall(struct drm_device *dev) + ~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | +- I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT); ++ I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT); + I915_WRITE16(IMR, dev_priv->irq_mask); + + I915_WRITE16(IER, + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT | + I915_USER_INTERRUPT); + POSTING_READ16(IER); + +@@ -3767,14 +3765,12 @@ static int i915_irq_postinstall(struct drm_device *dev) + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | +- I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT); ++ I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT); + + enable_mask = + I915_ASLE_INTERRUPT | + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | +- I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT | + I915_USER_INTERRUPT; + + if (I915_HAS_HOTPLUG(dev)) { +-- +2.1.4 + diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 2132ae3ff..51aeb559a 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -23,7 +23,7 @@ _replacesoldmodules=() # '%' gets replaced with _kernelname _srcname=linux-${_pkgbasever%-*} _archpkgver=${_pkgver%-*}.${_timestamp} pkgver=${_pkgver//-/_}.${_timestamp} -pkgrel=1 +pkgrel=1.1 arch=('i686' 'x86_64' 'mips64el') url="https://grsecurity.net/" license=('GPL2') @@ -41,6 +41,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' + '0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch' # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ # Note: Makefile patching was removed due which we are using specific flags from grsecurity patch '3.19-d230a5811d-loongson-community.patch') @@ -58,6 +59,7 @@ sha256sums=('2a60ec99ae498e7cdafac63ecca1c0ca07643eaa6c9a1a83f19e4daa3e75b9d9' '6de8a8319271809ffdb072b68d53d155eef12438e6d04ff06a5a4db82c34fa8a' '13bd7a8d9ed6b6bc971e4cd162262c5a20448a83796af39ce394d827b0e5de74' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' + '66cb2d859b253bc4e793baa3c0b95523d647a773b957dbc79b3eaacccf8692b5' 'bbb03bc36982b37ff51ac1314e8ba4d01ad6416b032a18afd5eb3bb05caa4914') validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva @@ -98,6 +100,10 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" + # drm/i915: Stop gathering error states for CS error interrupts + # https://bugzilla.kernel.org/show_bug.cgi?id=93171 + patch -p1 -i "${srcdir}/0001-drm-i915-Dont-enable-CS_PARSER_ERROR-interrupts-at-all.patch" + # Adding loongson-community patch if [ "${CARCH}" == "mips64el" ]; then patch -p1 -i ${srcdir}/3.19-d230a5811d-loongson-community.patch -- cgit v1.2.3-54-g00ecf