From 505bd74824d003a71e14708c789d2fb9d602545e Mon Sep 17 00:00:00 2001 From: Dan Munckton Date: Thu, 23 Oct 2008 09:23:53 +0100 Subject: [PATCH] Resolve fatal "No core keyboard" error on !x86 platforms (LP: #281610) In dix/devices.c ensure that all bytes of dev->enabled are used. dev->enabled has type Bool which is typedef'd to int. It was being compared with, for example, prop->data cast as CARD8. On big endian systems using *(CARD8*)(&dev->enabled) doesn't look at the right byte which resulted in wrong logic on these platforms. Patch taken from upstream bug 18111: https://bugs.freedesktop.org/show_bug.cgi?id=18111 Signed-off-by: Dan Munckton --- ...bug_18111_look_at_all_bytes_of_dev_enabled.diff | 63 ++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 64 insertions(+), 0 deletions(-) create mode 100644 debian/patches/138_bug_18111_look_at_all_bytes_of_dev_enabled.diff diff --git a/debian/patches/138_bug_18111_look_at_all_bytes_of_dev_enabled.diff b/debian/patches/138_bug_18111_look_at_all_bytes_of_dev_enabled.diff new file mode 100644 index 0000000..a8c5c0a --- /dev/null +++ b/debian/patches/138_bug_18111_look_at_all_bytes_of_dev_enabled.diff @@ -0,0 +1,63 @@ +Resolve fatal "No core keyboard" error on !x86 platforms (LP: #281610) + +In dix/devices.c cast dev->enabled to Bool not CARD8. On big endian systems +using *(CARD8*)(&dev->enabled) doesn't look at the right byte. Bool is +typedef'd to int which produces the correct cross platform representation. + +Patch taken from upstream bug 18111: +https://bugs.freedesktop.org/show_bug.cgi?id=18111 + +Index: xorg-server/dix/devices.c +=================================================================== +--- xorg-server.orig/dix/devices.c 2008-10-23 07:15:14.000000000 +0100 ++++ xorg-server/dix/devices.c 2008-10-23 07:21:47.000000000 +0100 +@@ -99,12 +99,13 @@ + { + if (property == XIGetKnownProperty(XI_PROP_ENABLED)) + { +- if (prop->format != 8 || prop->type != XA_INTEGER || prop->size != 1) ++ if (prop->format != 8 * sizeof(dev->enabled) || ++ prop->type != XA_INTEGER || prop->size != 1) + return BadValue; + +- if ((*((CARD8*)prop->data)) && !dev->enabled) ++ if ((*((Bool*)prop->data)) && !dev->enabled) + EnableDevice(dev); +- else if (!(*((CARD8*)prop->data)) && dev->enabled) ++ else if (!(*((Bool*)prop->data)) && dev->enabled) + DisableDevice(dev); + } + +@@ -200,8 +201,8 @@ + dev->next = NULL; + + XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED), +- XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled, +- FALSE); ++ XA_INTEGER, 8 * sizeof(dev->enabled), ++ PropModeReplace, 1, &dev->enabled, FALSE); + XISetDevicePropertyDeletable(dev, XIGetKnownProperty(XI_PROP_ENABLED), FALSE); + XIRegisterPropertyHandler(dev, DeviceSetProperty, NULL, NULL); + +@@ -243,8 +244,8 @@ + dev->next = NULL; + + XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED), +- XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled, +- TRUE); ++ XA_INTEGER, 8 * sizeof(dev->enabled), ++ PropModeReplace, 1, &dev->enabled, TRUE); + + ev.type = DevicePresenceNotify; + ev.time = currentTime.milliseconds; +@@ -284,8 +285,8 @@ + inputInfo.off_devices = dev; + + XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED), +- XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled, +- TRUE); ++ XA_INTEGER, 8 * sizeof(dev->enabled), ++ PropModeReplace, 1, &dev->enabled, TRUE); + + ev.type = DevicePresenceNotify; + ev.time = currentTime.milliseconds; diff --git a/debian/patches/series b/debian/patches/series index c62ffa6..b9cac0d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -12,6 +12,7 @@ 135_rethrow_signals.patch 136_fedora_force_switchcorekeyboard_for_evdev.patch 137_add_device_property_support.patch +138_bug_18111_look_at_all_bytes_of_dev_enabled.diff 140_quell_acpi_errmsgs.patch 141_improved_driver_selection.patch 142_psb_auto.patch -- 1.5.4.3