diff --git a/let-vconsole-setup-get-properties-only-once-to-copy-them.patch b/let-vconsole-setup-get-properties-only-once-to-copy-them.patch new file mode 100644 index 00000000..b106fc22 --- /dev/null +++ b/let-vconsole-setup-get-properties-only-once-to-copy-them.patch @@ -0,0 +1,84 @@ +From: Werner Fink +Date: Wed Sep 23 12:37:23 UTC 2015 +Subject: Do not bother vistual console to much with GIO/PIO + +This avoids broken virtual console mapping due stressed ioctl API +for the virtual consoles (boo#904214) + +--- + src/vconsole/vconsole-setup.c | 39 +++++++++++++++++++++++++-------------- + 1 file changed, 25 insertions(+), 14 deletions(-) + +--- src/vconsole/vconsole-setup.c ++++ src/vconsole/vconsole-setup.c 2015-09-23 12:34:33.854018750 +0000 +@@ -202,8 +202,13 @@ static void font_copy_to_all_vcs(int fd) + unsigned short map16[E_TABSZ]; + struct unimapdesc unimapd; + struct unipair unipairs[USHRT_MAX]; ++ struct console_font_op cfo = {}; + int i, r; + ++ bool hasmap8; ++ bool hasmap16; ++ bool hasunimap; ++ + /* get active, and 16 bit mask of used VT numbers */ + r = ioctl(fd, VT_GETSTATE, &vcs); + if (r < 0) { +@@ -211,10 +216,22 @@ static void font_copy_to_all_vcs(int fd) + return; + } + ++ /* copy font from active VT, where the font was uploaded to */ ++ cfo.op = KD_FONT_OP_COPY; ++ cfo.height = vcs.v_active-1; /* tty1 == index 0 */ ++ ++ hasmap8 = (ioctl(fd, GIO_SCRNMAP, map8) >= 0); ++ hasmap16 = (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0); ++ ++ /* unimapd is a ushort count and a pointer to an ++ * array of struct unipair { ushort, ushort } */ ++ unimapd.entries = unipairs; ++ unimapd.entry_ct = USHRT_MAX; ++ hasunimap = (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0); ++ + for (i = 1; i <= 15; i++) { + char vcname[strlen("/dev/vcs") + DECIMAL_STR_MAX(int)]; + _cleanup_close_ int vcfd = -1; +- struct console_font_op cfo = {}; + + if (i == vcs.v_active) + continue; +@@ -229,25 +246,19 @@ static void font_copy_to_all_vcs(int fd) + if (vcfd < 0) + continue; + +- /* copy font from active VT, where the font was uploaded to */ +- cfo.op = KD_FONT_OP_COPY; +- cfo.height = vcs.v_active-1; /* tty1 == index 0 */ ++ /* copy font from active VT to vcs */ + (void) ioctl(vcfd, KDFONTOP, &cfo); + +- /* copy map of 8bit chars */ +- if (ioctl(fd, GIO_SCRNMAP, map8) >= 0) ++ /* copy map of 8bit chars to vcs */ ++ if (hasmap8) + (void) ioctl(vcfd, PIO_SCRNMAP, map8); + +- /* copy map of 8bit chars -> 16bit Unicode values */ +- if (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0) ++ /* copy map of 8bit chars -> 16bit Unicode values to vcs */ ++ if (hasmap16) + (void) ioctl(vcfd, PIO_UNISCRNMAP, map16); + +- /* copy unicode translation table */ +- /* unimapd is a ushort count and a pointer to an +- array of struct unipair { ushort, ushort } */ +- unimapd.entries = unipairs; +- unimapd.entry_ct = USHRT_MAX; +- if (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0) { ++ /* copy unicode translation table to vcs */ ++ if (hasunimap) { + struct unimapinit adv = { 0, 0, 0 }; + + (void) ioctl(vcfd, PIO_UNIMAPCLR, &adv); diff --git a/systemd-mini.changes b/systemd-mini.changes index 0bea6ee6..c8113d2f 100644 --- a/systemd-mini.changes +++ b/systemd-mini.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Sep 23 12:41:19 UTC 2015 - werner@suse.de + +- Add patch let-vconsole-setup-get-properties-only-once-to-copy-them.patch + to avoid broken virtual console mapping due stressed ioctl API + for the virtual consoles (boo#904214) + ------------------------------------------------------------------- Mon Sep 7 12:21:06 UTC 2015 - werner@suse.de diff --git a/systemd-mini.spec b/systemd-mini.spec index 66ab7e8a..2c650030 100644 --- a/systemd-mini.spec +++ b/systemd-mini.spec @@ -244,6 +244,8 @@ Patch520: systemd-add-user-keep.patch Patch521: kbd-model-map.patch # PATCH-WORKAROUND-SUSE (boo#939571) Patch522: Correct_assert_on_unexpected_error_code.patch +# PATCH-FIX-SUSE Do not stress the kernel's vc ioctls (boo#904214) +Patch523: let-vconsole-setup-get-properties-only-once-to-copy-them.patch # UDEV PATCHES # ============ @@ -598,6 +600,7 @@ cp %{SOURCE7} m4/ %patch520 -p1 %patch521 -p1 %patch522 -p0 +%patch523 -p0 # udev patches %patch1001 -p1 diff --git a/systemd.changes b/systemd.changes index 0bea6ee6..c8113d2f 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Sep 23 12:41:19 UTC 2015 - werner@suse.de + +- Add patch let-vconsole-setup-get-properties-only-once-to-copy-them.patch + to avoid broken virtual console mapping due stressed ioctl API + for the virtual consoles (boo#904214) + ------------------------------------------------------------------- Mon Sep 7 12:21:06 UTC 2015 - werner@suse.de diff --git a/systemd.spec b/systemd.spec index 09b28579..94052ef4 100644 --- a/systemd.spec +++ b/systemd.spec @@ -239,6 +239,8 @@ Patch520: systemd-add-user-keep.patch Patch521: kbd-model-map.patch # PATCH-WORKAROUND-SUSE (boo#939571) Patch522: Correct_assert_on_unexpected_error_code.patch +# PATCH-FIX-SUSE Do not stress the kernel's vc ioctls (boo#904214) +Patch523: let-vconsole-setup-get-properties-only-once-to-copy-them.patch # UDEV PATCHES # ============ @@ -593,6 +595,7 @@ cp %{SOURCE7} m4/ %patch520 -p1 %patch521 -p1 %patch522 -p0 +%patch523 -p0 # udev patches %patch1001 -p1