SHA256
1
0
forked from pool/systemd
systemd/let-vconsole-setup-get-properties-only-once-to-copy-them.patch
Dominique Leuenberger 62682e6e22 Accepting request 384339 from Base:System
- Fix patch patch handle-numlock-value-in-etc-sysconfig-keyboard.patch
  that is do not close a file descriptor twice (boo#973907) 

- Add two patches which address logind/networkd disappearing from
  dbus (and busctl) even while the units and processes continue
  running.
  0001-core-fix-bus-name-synchronization-after-daemon-reloa.patch
  0001-core-re-sync-bus-name-list-after-deserializing-durin.patch

- drop all compiler/linker option customizations:
  - -pipe option is used by default since day 0
  - get rid of cflags() function which is not needed
  - --hash-size has no impact specially in runtime
  IOW, use the default options for the compiler and the linker,
  there's no point in making systemd different from other package in
  this regards.

- use %make_build instead of 'make %{?_smp_mflags}'

- be more strict on own lib version requirements

- systemd should require udev with the exact same version

- Modify patch handle-numlock-value-in-etc-sysconfig-keyboard.patch
  to allow that open, seek, and read of /dev/mem may fail e.g.
  on XEN based virtual guests (bsc#961120) 

- require curl and bzip2 to build importd
- curl also causes building of journal-upload. That one has rather
  unusal certificate usage, set it's ca root to /etc/pki/systemd

OBS-URL: https://build.opensuse.org/request/show/384339
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=232
2016-04-08 07:35:10 +00:00

85 lines
3.3 KiB
Diff

From: Werner Fink <werner@suse.de>
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(-)
--- a/src/vconsole/vconsole-setup.c
+++ b/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);