summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Ebbert <cebbert@redhat.com>2010-08-07 04:17:25 -0400
committerChuck Ebbert <cebbert@redhat.com>2010-08-07 04:17:25 -0400
commit264f349585ce03c2e9fe397a1c94dbba85eb7de4 (patch)
treeff6082b36fa2d9370160de59bc53cc9b1c5e8818
parent02278bed64f873548bb483f77def738699a9012f (diff)
downloaddom0-kernel-264f349585ce03c2e9fe397a1c94dbba85eb7de4.tar.gz
dom0-kernel-264f349585ce03c2e9fe397a1c94dbba85eb7de4.tar.xz
dom0-kernel-264f349585ce03c2e9fe397a1c94dbba85eb7de4.zip
- Linux 2.6.32.18-rc1
- Revert DRM patches from -stable we already have: drm-i915-Fix-LVDS-presence-check drm-i915-parse-child-device-from-vbt.patch - Comment out patches merged in -stable: xfs-prevent-swapext-from-operating-on-write-only-files.patch cifs-fix-dns-resolver.patch
-rw-r--r--kernel.spec21
-rw-r--r--linux-2.6-upstream-reverts.patch315
2 files changed, 330 insertions, 6 deletions
diff --git a/kernel.spec b/kernel.spec
index eee7ae5..dbce286 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -47,7 +47,7 @@ Summary: The Linux kernel
# reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
# scripts/rebase.sh should be made to do that for you, actually.
#
-%global baserelease 157
+%global baserelease 158
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -59,9 +59,9 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 17
+%define stable_update 18
# Is it a -stable RC?
-%define stable_rc 0
+%define stable_rc 1
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev .%{stable_update}
@@ -1558,10 +1558,10 @@ ApplyPatch crypto-add-async-hash-testing.patch
# CVE-2010-2066
ApplyPatch ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
# CVE-2010-2266
-ApplyPatch xfs-prevent-swapext-from-operating-on-write-only-files.patch
+#ApplyPatch xfs-prevent-swapext-from-operating-on-write-only-files.patch
# fix DNS resolver build, broken in 2.6.32.17
-ApplyPatch cifs-fix-dns-resolver.patch
+#ApplyPatch cifs-fix-dns-resolver.patch
ApplyPatch kvm-mmu-fix-conflict-access-permissions-in-direct-sp.patch
@@ -2219,7 +2219,16 @@ fi
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
-* Fri Aug 08 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.17-157
+* Sat Aug 07 2010 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.32.18-rc1
+- Revert DRM patches from -stable we already have:
+ drm-i915-Fix-LVDS-presence-check
+ drm-i915-parse-child-device-from-vbt.patch
+- Comment out patches merged in -stable:
+ xfs-prevent-swapext-from-operating-on-write-only-files.patch
+ cifs-fix-dns-resolver.patch
+
+* Fri Aug 06 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.17-157
- Fix USB HID initialization (#592785)
* Mon Aug 02 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.17-156
diff --git a/linux-2.6-upstream-reverts.patch b/linux-2.6-upstream-reverts.patch
index e0f145c..83d0418 100644
--- a/linux-2.6-upstream-reverts.patch
+++ b/linux-2.6-upstream-reverts.patch
@@ -1,3 +1,318 @@
+From 6363ee6f496eb7e3b3f78dc105e522c7b496089b Mon Sep 17 00:00:00 2001
+From: Zhao Yakui <yakui.zhao@intel.com>
+Date: Tue, 24 Nov 2009 09:48:44 +0800
+Subject: drm/i915: parse child device from VBT
+
+From: Zhao Yakui <yakui.zhao@intel.com>
+
+commit 6363ee6f496eb7e3b3f78dc105e522c7b496089b upstream.
+
+On some laptops there is no HDMI/DP. But the xrandr still reports
+several disconnected HDMI/display ports. In such case the user will be
+confused.
+ >DVI1 disconnected (normal left inverted right x axis y axis)
+ >DP1 disconnected (normal left inverted right x axis y axis)
+ >DVI2 disconnected (normal left inverted right x axis y axis)
+ >DP2 disconnected (normal left inverted right x axis y axis)
+ >DP3 disconnected (normal left inverted right x axis y axis)
+
+This patch set is to use the child device parsed in VBT to decide whether
+the HDMI/DP/LVDS/TV should be initialized.
+
+Parse the child device from VBT.
+
+The device class type is also added for LFP, TV, HDMI, DP output.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=22785
+
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Acked-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/i915_dma.c | 9 +++++
+ drivers/gpu/drm/i915/i915_drv.h | 2 +
+ drivers/gpu/drm/i915/intel_bios.c | 65 ++++++++++++++++++++++++++++++++++++++
+ drivers/gpu/drm/i915/intel_bios.h | 17 +++++++++
+ 4 files changed, 93 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -1526,6 +1526,15 @@ int i915_driver_unload(struct drm_device
+ }
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
++ /*
++ * free the memory space allocated for the child device
++ * config parsed from VBT
++ */
++ if (dev_priv->child_dev && dev_priv->child_dev_num) {
++ kfree(dev_priv->child_dev);
++ dev_priv->child_dev = NULL;
++ dev_priv->child_dev_num = 0;
++ }
+ drm_irq_uninstall(dev);
+ vga_client_register(dev->pdev, NULL, NULL, NULL);
+ }
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -555,6 +555,8 @@ typedef struct drm_i915_private {
+ struct timer_list idle_timer;
+ bool busy;
+ u16 orig_clock;
++ int child_dev_num;
++ struct child_device_config *child_dev;
+ struct drm_connector *int_lvds_connector;
+ } drm_i915_private_t;
+
+--- a/drivers/gpu/drm/i915/intel_bios.c
++++ b/drivers/gpu/drm/i915/intel_bios.c
+@@ -362,6 +362,70 @@ parse_driver_features(struct drm_i915_pr
+ dev_priv->render_reclock_avail = true;
+ }
+
++static void
++parse_device_mapping(struct drm_i915_private *dev_priv,
++ struct bdb_header *bdb)
++{
++ struct bdb_general_definitions *p_defs;
++ struct child_device_config *p_child, *child_dev_ptr;
++ int i, child_device_num, count;
++ u16 block_size;
++
++ p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
++ if (!p_defs) {
++ DRM_DEBUG_KMS("No general definition block is found\n");
++ return;
++ }
++ /* judge whether the size of child device meets the requirements.
++ * If the child device size obtained from general definition block
++ * is different with sizeof(struct child_device_config), skip the
++ * parsing of sdvo device info
++ */
++ if (p_defs->child_dev_size != sizeof(*p_child)) {
++ /* different child dev size . Ignore it */
++ DRM_DEBUG_KMS("different child size is found. Invalid.\n");
++ return;
++ }
++ /* get the block size of general definitions */
++ block_size = get_blocksize(p_defs);
++ /* get the number of child device */
++ child_device_num = (block_size - sizeof(*p_defs)) /
++ sizeof(*p_child);
++ count = 0;
++ /* get the number of child device that is present */
++ for (i = 0; i < child_device_num; i++) {
++ p_child = &(p_defs->devices[i]);
++ if (!p_child->device_type) {
++ /* skip the device block if device type is invalid */
++ continue;
++ }
++ count++;
++ }
++ if (!count) {
++ DRM_DEBUG_KMS("no child dev is parsed from VBT \n");
++ return;
++ }
++ dev_priv->child_dev = kzalloc(sizeof(*p_child) * count, GFP_KERNEL);
++ if (!dev_priv->child_dev) {
++ DRM_DEBUG_KMS("No memory space for child device\n");
++ return;
++ }
++
++ dev_priv->child_dev_num = count;
++ count = 0;
++ for (i = 0; i < child_device_num; i++) {
++ p_child = &(p_defs->devices[i]);
++ if (!p_child->device_type) {
++ /* skip the device block if device type is invalid */
++ continue;
++ }
++ child_dev_ptr = dev_priv->child_dev + count;
++ count++;
++ memcpy((void *)child_dev_ptr, (void *)p_child,
++ sizeof(*p_child));
++ }
++ return;
++}
+ /**
+ * intel_init_bios - initialize VBIOS settings & find VBT
+ * @dev: DRM device
+@@ -413,6 +477,7 @@ intel_init_bios(struct drm_device *dev)
+ parse_lfp_panel_data(dev_priv, bdb);
+ parse_sdvo_panel_data(dev_priv, bdb);
+ parse_sdvo_device_mapping(dev_priv, bdb);
++ parse_device_mapping(dev_priv, bdb);
+ parse_driver_features(dev_priv, bdb);
+
+ pci_unmap_rom(pdev, bios);
+--- a/drivers/gpu/drm/i915/intel_bios.h
++++ b/drivers/gpu/drm/i915/intel_bios.h
+@@ -549,4 +549,21 @@ bool intel_init_bios(struct drm_device *
+ #define SWF14_APM_STANDBY 0x1
+ #define SWF14_APM_RESTORE 0x0
+
++/* Add the device class for LFP, TV, HDMI */
++#define DEVICE_TYPE_INT_LFP 0x1022
++#define DEVICE_TYPE_INT_TV 0x1009
++#define DEVICE_TYPE_HDMI 0x60D2
++#define DEVICE_TYPE_DP 0x68C6
++#define DEVICE_TYPE_eDP 0x78C6
++
++/* define the DVO port for HDMI output type */
++#define DVO_B 1
++#define DVO_C 2
++#define DVO_D 3
++
++/* define the PORT for DP output type */
++#define PORT_IDPB 7
++#define PORT_IDPC 8
++#define PORT_IDPD 9
++
+ #endif /* _I830_BIOS_H_ */
+From 38b3037ee47fbd65a36bc7c39f60a900fbbe3b8e Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Tue, 24 Nov 2009 10:07:00 -0500
+Subject: drm/i915: Fix LVDS presence check
+
+Combined patches from 2.6.33 for fixing LVDS detection.
+7cf4f69d3f4511f443473954456cb91d5514756d
+ drm/i915: Don't set up the LVDS if it isn't in the BIOS device table.
+38b3037ee47fbd65a36bc7c39f60a900fbbe3b8e
+ drm/i915: Fix LVDS presence check
+6e36595a2131e7ed5ee2674be54b2713ba7f0490
+ drm/i915: Declare the new VBT parsing functions as static
+11ba159288f1bfc1a475c994e598f5fe423fde9d
+ drm/i915: Don't check for lid presence when detecting LVDS
+
+Acked-by: Takashi Iwai <tiwai@suse.de>
+Cc: Matthew Garrett <mjg@redhat.com>
+Cc: Adam Jackson <ajax@redhat.com>
+Cc: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/intel_lvds.c | 90 +++++++++++++-------------------------
+ 1 file changed, 33 insertions(+), 57 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -901,64 +901,45 @@ static const struct dmi_system_id intel_
+ { } /* terminating entry */
+ };
+
+-#ifdef CONFIG_ACPI
+ /*
+- * check_lid_device -- check whether @handle is an ACPI LID device.
+- * @handle: ACPI device handle
+- * @level : depth in the ACPI namespace tree
+- * @context: the number of LID device when we find the device
+- * @rv: a return value to fill if desired (Not use)
++ * Enumerate the child dev array parsed from VBT to check whether
++ * the LVDS is present.
++ * If it is present, return 1.
++ * If it is not present, return false.
++ * If no child dev is parsed from VBT, it assumes that the LVDS is present.
++ * Note: The addin_offset should also be checked for LVDS panel.
++ * Only when it is non-zero, it is assumed that it is present.
+ */
+-static acpi_status
+-check_lid_device(acpi_handle handle, u32 level, void *context,
+- void **return_value)
++static int lvds_is_present_in_vbt(struct drm_device *dev)
+ {
+- struct acpi_device *acpi_dev;
+- int *lid_present = context;
+-
+- acpi_dev = NULL;
+- /* Get the acpi device for device handle */
+- if (acpi_bus_get_device(handle, &acpi_dev) || !acpi_dev) {
+- /* If there is no ACPI device for handle, return */
+- return AE_OK;
+- }
+-
+- if (!strncmp(acpi_device_hid(acpi_dev), "PNP0C0D", 7))
+- *lid_present = 1;
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ struct child_device_config *p_child;
++ int i, ret;
+
+- return AE_OK;
+-}
++ if (!dev_priv->child_dev_num)
++ return 1;
+
+-/**
+- * check whether there exists the ACPI LID device by enumerating the ACPI
+- * device tree.
+- */
+-static int intel_lid_present(void)
+-{
+- int lid_present = 0;
++ ret = 0;
++ for (i = 0; i < dev_priv->child_dev_num; i++) {
++ p_child = dev_priv->child_dev + i;
++ /*
++ * If the device type is not LFP, continue.
++ * If the device type is 0x22, it is also regarded as LFP.
++ */
++ if (p_child->device_type != DEVICE_TYPE_INT_LFP &&
++ p_child->device_type != DEVICE_TYPE_LFP)
++ continue;
+
+- if (acpi_disabled) {
+- /* If ACPI is disabled, there is no ACPI device tree to
+- * check, so assume the LID device would have been present.
++ /* The addin_offset should be checked. Only when it is
++ * non-zero, it is regarded as present.
+ */
+- return 1;
++ if (p_child->addin_offset) {
++ ret = 1;
++ break;
++ }
+ }
+-
+- acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
+- ACPI_UINT32_MAX,
+- check_lid_device, &lid_present, NULL);
+-
+- return lid_present;
+-}
+-#else
+-static int intel_lid_present(void)
+-{
+- /* In the absence of ACPI built in, assume that the LID device would
+- * have been present.
+- */
+- return 1;
++ return ret;
+ }
+-#endif
+
+ /**
+ * intel_lvds_init - setup LVDS connectors on this device
+@@ -983,15 +964,10 @@ void intel_lvds_init(struct drm_device *
+ if (dmi_check_system(intel_no_lvds))
+ return;
+
+- /* Assume that any device without an ACPI LID device also doesn't
+- * have an integrated LVDS. We would be better off parsing the BIOS
+- * to get a reliable indicator, but that code isn't written yet.
+- *
+- * In the case of all-in-one desktops using LVDS that we've seen,
+- * they're using SDVO LVDS.
+- */
+- if (!intel_lid_present())
++ if (!lvds_is_present_in_vbt(dev)) {
++ DRM_DEBUG_KMS("LVDS is not present in VBT\n");
+ return;
++ }
+
+ if (IS_IGDNG(dev)) {
+ if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
From 944001201ca0196bcdb088129e5866a9f379d08c Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Tue, 20 Jul 2010 13:15:31 +1000