Rebase to 3.0 (but all it 2.6.40)
This commit is contained in:
parent
523da4bf9a
commit
7f4ef57b34
12
Makefile
12
Makefile
|
@ -55,6 +55,9 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS is not set/CONFIG_DEBUG_OBJECTS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_FREE is not set/CONFIG_DEBUG_OBJECTS_FREE=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/CONFIG_DEBUG_OBJECTS_TIMERS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_WORK is not set/CONFIG_DEBUG_OBJECTS_WORK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
|
||||
|
@ -79,7 +82,6 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_ATH_DEBUG is not set/CONFIG_ATH_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CARL9170_DEBUGFS is not set/CONFIG_CARL9170_DEBUGFS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/CONFIG_IWLWIFI_DEVICE_TRACING=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_WORK is not set/CONFIG_DEBUG_OBJECTS_WORK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DMADEVICES_DEBUG is not set/CONFIG_DMADEVICES_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DMADEVICES_VDEBUG is not set/CONFIG_DMADEVICES_VDEBUG=y/' config-nodebug
|
||||
|
@ -89,8 +91,6 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_KDB_KEYBOARD is not set/CONFIG_KDB_KEYBOARD=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set/CONFIG_CPU_NOTIFIER_ERROR_INJECT=m/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_PER_CPU_MAPS is not set/CONFIG_DEBUG_PER_CPU_MAPS=y/' config-nodebug
|
||||
#@perl -pi -e 's/# CONFIG_PCI_DEFAULT_USE_CRS is not set/CONFIG_PCI_DEFAULT_USE_CRS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_TEST_LIST_SORT is not set/CONFIG_TEST_LIST_SORT=y/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_SET_MODULE_RONX is not set/CONFIG_DEBUG_SET_MODULE_RONX=y/' config-nodebug
|
||||
|
@ -133,6 +133,9 @@ release:
|
|||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS=y/# CONFIG_DEBUG_OBJECTS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_FREE=y/# CONFIG_DEBUG_OBJECTS_FREE is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_TIMERS=y/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
|
||||
|
@ -157,7 +160,6 @@ release:
|
|||
@perl -pi -e 's/CONFIG_ATH_DEBUG=y/# CONFIG_ATH_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CARL9170_DEBUGFS=y/# CONFIG_CARL9170_DEBUGFS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_IWLWIFI_DEVICE_TRACING=y/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DMADEVICES_DEBUG=y/# CONFIG_DMADEVICES_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DMADEVICES_VDEBUG=y/# CONFIG_DMADEVICES_VDEBUG is not set/' config-nodebug
|
||||
|
@ -167,8 +169,6 @@ release:
|
|||
#@perl -pi -e 's/CONFIG_KGDB_KDB=y/# CONFIG_KGDB_KDB is not set/' config-nodebug
|
||||
#@perl -pi -e 's/CONFIG_KDB_KEYBOARD=y/# CONFIG_KDB_KEYBOARD is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_PER_CPU_MAPS=y/# CONFIG_DEBUG_PER_CPU_MAPS is not set/' config-nodebug
|
||||
#@perl -pi -e 's/CONFIG_PCI_DEFAULT_USE_CRS=y/# CONFIG_PCI_DEFAULT_USE_CRS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_TEST_LIST_SORT=y/# CONFIG_TEST_LIST_SORT is not set/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/CONFIG_DEBUG_SET_MODULE_RONX=y/# CONFIG_DEBUG_SET_MODULE_RONX is not set/' config-nodebug
|
||||
|
|
93
TODO
93
TODO
|
@ -1,57 +1,33 @@
|
|||
# Put stuff likely to go upstream (in decreasing likelyhood) at the top.
|
||||
#
|
||||
|
||||
* linux-2.6-firewire-git-update.patch
|
||||
perpetual updates from git trees.
|
||||
|
||||
* linux-2.6-compile-fixes.patch
|
||||
* linux-2.6-hotfixes.patch
|
||||
Empty
|
||||
|
||||
* linux-2.6-build-nonintconfig.patch
|
||||
* linux-2.6-debug-nmi-timeout.patch
|
||||
* linux-2.6-debug-spinlock-taint.patch
|
||||
* linux-2.6-debug-taint-vm.patch
|
||||
* linux-2.6-debug-vm-would-have-oomkilled.patch
|
||||
TODO: Push upstream
|
||||
|
||||
* linux-2.6-acpi-video-dos.patch
|
||||
* linux-2.6-defaults-acpi-video.patch
|
||||
* linux-2.6-defaults-aspm.patch
|
||||
Fedora policy decisions
|
||||
Turn into CONFIG_ options and upstream ?
|
||||
|
||||
* linux-2.6-crash-driver.patch
|
||||
Unlikely to go upstream.
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=492803
|
||||
|
||||
* linux-2.6-debug-always-inline-kzalloc.patch
|
||||
Sent upstream Sep 25 2008
|
||||
|
||||
* linux-2.6-debug-sizeof-structs.patch
|
||||
Fedora local debug stuff.
|
||||
|
||||
* linux-2.6-utrace.patch
|
||||
utrace
|
||||
|
||||
* linux-2.6-defaults-pci_no_msi.patch
|
||||
Fedora local choices uninteresting to upstream
|
||||
|
||||
* linux-2.6-input-kill-stupid-messages.patch
|
||||
* linux-2.6-silence-acpi-blacklist.patch
|
||||
* linux-2.6-silence-fbcon-logo.patch
|
||||
* linux-2.6-silence-noise.patch
|
||||
Fedora local 'hush' patches. (Some will go upstream next time)
|
||||
|
||||
* linux-2.6-execshield.patch
|
||||
Not interesting to upstream.
|
||||
* linux-2.6-makefile-after_link.patch
|
||||
Rolandware that is used by the debuginfo generation.
|
||||
Possibly upstreamable ?
|
||||
|
||||
* lirc-2.6.33.patch
|
||||
* hdpvr-ir-enable.patch
|
||||
jarod working on upstreaming
|
||||
* linux-2.6.29-sparc-IOC_TYPECHECK.patch
|
||||
Responsible: Spot/Dennis.
|
||||
|
||||
* linux-2.6-selinux-mprotect-checks.patch
|
||||
* linux-2.6-sparc-selinux-mprotect-checks.patch
|
||||
Newer version might go upstream at some point.
|
||||
* linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||
Responsible: Hans.
|
||||
|
||||
* linux-2.6-serial-460800.patch
|
||||
Probably not upstreamable.
|
||||
|
@ -59,3 +35,56 @@
|
|||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
|
||||
http://lkml.org/lkml/2006/8/2/208
|
||||
|
||||
* linux-2.6-crash-driver.patch
|
||||
Unlikely to go upstream.
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=492803
|
||||
|
||||
* linux-2.6-32bit-mmap-exec-randomization.patch
|
||||
One half of the remaining exec-shield diff.
|
||||
davej bugged Ingo again on Jun 17 2011 about upstreaming.
|
||||
|
||||
* runtime_pm_fixups.patch
|
||||
* linux-2.6-usb-pci-autosuspend.patch
|
||||
* linux-2.6-enable-more-pci-autosuspend.patch
|
||||
* linux-2.6-acpi-debug-infinite-loop.patch
|
||||
* acpi-ec-add-delay-before-write.patch
|
||||
Responsible: mjg59
|
||||
|
||||
* linux-2.6-v4l-dvb-experimental.patch
|
||||
* linux-2.6-v4l-dvb-fixes.patch
|
||||
* linux-2.6-v4l-dvb-update.patch
|
||||
Empty.
|
||||
|
||||
* fix_xen_guest_on_old_EC2.patch
|
||||
Ugly for upstream. It's a hack to make old HV's work optimally.
|
||||
Eventually we can drop it, but probably not until fixed HV's
|
||||
are commonplace. (When?)
|
||||
Responsible: Justin.
|
||||
|
||||
* linux-2.6-i386-nx-emulation.patch
|
||||
The ugly segment hack part of exec-shield that Linus hates.
|
||||
Unlikely to ever go upstream.
|
||||
|
||||
* linux-2.6-e1000-ich9-montevina.patch
|
||||
Intel hates it. Davej has an SDV that needs it.
|
||||
Low maintenence, and worth hanging onto until it gets replaced
|
||||
with something that fails in a different way.
|
||||
|
||||
--------
|
||||
currently undocumented:
|
||||
|
||||
add-appleir-usb-driver.patch
|
||||
die-floppy-die.patch
|
||||
disable-i8042-check-on-apple-mac.patch
|
||||
dmar-disable-when-ricoh-multifunction.patch
|
||||
drm-intel-make-lvds-work.patch
|
||||
drm-intel-next.patch
|
||||
drm-nouveau-updates.patch
|
||||
hda_intel-prealloc-4mb-dmabuffer.patch
|
||||
linux-2.6.30-no-pcspkr-modalias.patch
|
||||
linux-2.6-input-kill-stupid-messages.patch
|
||||
linux-2.6-intel-iommu-igfx.patch
|
||||
linux-2.6-upstream-reverts.patch
|
||||
linux-3.0-fix-uts-release.patch
|
||||
neuter_intel_microcode_load.patch
|
||||
|
||||
|
|
|
@ -1,106 +0,0 @@
|
|||
Improve our reboot handling for compatibility with Windows.
|
||||
|
||||
Upstream commits:
|
||||
660e34cebf0a11d54f2d5dd8838607452355f321
|
||||
f17d9cbf20c4734c4199caa6dee87047f2f8278f
|
||||
|
||||
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
|
||||
index c495aa8..c770e66 100644
|
||||
--- a/arch/x86/kernel/reboot.c
|
||||
+++ b/arch/x86/kernel/reboot.c
|
||||
@@ -34,7 +34,7 @@ EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
static const struct desc_ptr no_idt = {};
|
||||
static int reboot_mode;
|
||||
-enum reboot_type reboot_type = BOOT_KBD;
|
||||
+enum reboot_type reboot_type = BOOT_ACPI;
|
||||
int reboot_force;
|
||||
|
||||
#if defined(CONFIG_X86_32) && defined(CONFIG_SMP)
|
||||
@@ -538,9 +538,23 @@ void __attribute__((weak)) mach_reboot_fixups(void)
|
||||
{
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Windows does the following on reboot:
|
||||
+ * 1) If the FADT has the ACPI reboot register flag set, try it
|
||||
+ * 2) If still alive, write to the keyboard controller
|
||||
+ * 3) If still alive, write to the ACPI reboot register again
|
||||
+ * 4) Ig still alive, write to the keyboard controller again
|
||||
+ *
|
||||
+ * If the machine is still alive at this stage, it gives up. We default to
|
||||
+ * following the same pattern, except that if we're still alive after (4) we'll
|
||||
+ * try to force a triple fault and then cycle between hitting the keyboard
|
||||
+ * controller and doing that
|
||||
+ */
|
||||
static void native_machine_emergency_restart(void)
|
||||
{
|
||||
int i;
|
||||
+ int attempt = 0;
|
||||
+ int orig_reboot_type = reboot_type;
|
||||
|
||||
if (reboot_emergency)
|
||||
emergency_vmx_disable_all();
|
||||
@@ -562,6 +576,13 @@ static void native_machine_emergency_restart(void)
|
||||
outb(0xfe, 0x64); /* pulse reset low */
|
||||
udelay(50);
|
||||
}
|
||||
+ if (attempt == 0 && orig_reboot_type == BOOT_ACPI) {
|
||||
+ attempt = 1;
|
||||
+ reboot_type = BOOT_ACPI;
|
||||
+ } else {
|
||||
+ reboot_type = BOOT_TRIPLE;
|
||||
+ }
|
||||
+ break;
|
||||
|
||||
case BOOT_TRIPLE:
|
||||
load_idt(&no_idt);
|
||||
diff --git a/drivers/acpi/acpica/hwxface.c b/drivers/acpi/acpica/hwxface.c
|
||||
index 50cc3be..c6a4e63 100644
|
||||
--- a/drivers/acpi/acpica/hwxface.c
|
||||
+++ b/drivers/acpi/acpica/hwxface.c
|
||||
@@ -82,12 +82,11 @@ acpi_status acpi_reset(void)
|
||||
/*
|
||||
* For I/O space, write directly to the OSL. This bypasses the port
|
||||
* validation mechanism, which may block a valid write to the reset
|
||||
- * register.
|
||||
+ * register. Spec section 4.7.3.6 requires register width to be 8.
|
||||
*/
|
||||
status =
|
||||
acpi_os_write_port((acpi_io_address) reset_reg->address,
|
||||
- acpi_gbl_FADT.reset_value,
|
||||
- reset_reg->bit_width);
|
||||
+ acpi_gbl_FADT.reset_value, 8);
|
||||
} else {
|
||||
/* Write the reset value to the reset register */
|
||||
|
||||
diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
|
||||
index 93f9114..a6c77e8b 100644
|
||||
--- a/drivers/acpi/reboot.c
|
||||
+++ b/drivers/acpi/reboot.c
|
||||
@@ -15,9 +15,15 @@ void acpi_reboot(void)
|
||||
|
||||
rr = &acpi_gbl_FADT.reset_register;
|
||||
|
||||
- /* Is the reset register supported? */
|
||||
- if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
|
||||
- rr->bit_width != 8 || rr->bit_offset != 0)
|
||||
+ /* ACPI reset register was only introduced with v2 of the FADT */
|
||||
+
|
||||
+ if (acpi_gbl_FADT.header.revision < 2)
|
||||
+ return;
|
||||
+
|
||||
+ /* Is the reset register supported? The spec says we should be
|
||||
+ * checking the bit width and bit offset, but Windows ignores
|
||||
+ * these fields */
|
||||
+ if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER))
|
||||
return;
|
||||
|
||||
reset_value = acpi_gbl_FADT.reset_value;
|
||||
@@ -45,6 +51,4 @@ void acpi_reboot(void)
|
||||
acpi_reset();
|
||||
break;
|
||||
}
|
||||
- /* Wait ten seconds */
|
||||
- acpi_os_stall(10000000);
|
||||
}
|
|
@ -99,9 +99,9 @@ index baa25ad..abc5bd7 100644
|
|||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -1244,8 +1244,6 @@ static const struct hid_device_id hid_blacklist[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR, USB_DEVICE_ID_ACTIONSTAR_1011) },
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Mon, 29 Nov 2010 14:57:14 +0000 (+0100)
|
||||
Subject: ahci: add another PCI ID for marvell
|
||||
X-Git-Tag: v2.6.39-rc1~490^2
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=50be5e3657cd2851a297dc0b3fd459f25829d29b
|
||||
|
||||
ahci: add another PCI ID for marvell
|
||||
|
||||
1b4b:91a3 seems to be another PCI ID for marvell ahci. Add it.
|
||||
Reported and tested in the following thread.
|
||||
|
||||
http://thread.gmane.org/gmane.linux.kernel/1068354
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Reported-by: Borislav Petkov <bp@alien8.de>
|
||||
Reported-by: Alessandro Tagliapietra <tagliapietra.alessandro@gmail.com>
|
||||
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
|
||||
index 0c22ebd..e62f693 100644
|
||||
--- a/drivers/ata/ahci.c
|
||||
+++ b/drivers/ata/ahci.c
|
||||
@@ -385,6 +385,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
.driver_data = board_ahci_yes_fbs }, /* 88se9128 */
|
||||
{ PCI_DEVICE(0x1b4b, 0x9125),
|
||||
.driver_data = board_ahci_yes_fbs }, /* 88se9125 */
|
||||
+ { PCI_DEVICE(0x1b4b, 0x91a3),
|
||||
+ .driver_data = board_ahci_yes_fbs },
|
||||
|
||||
/* Promise */
|
||||
{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
|
|
@ -1,688 +0,0 @@
|
|||
Various fixes to the Apple backlight driver. Upstream in .38?
|
||||
|
||||
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
|
||||
index e54a337..fb5df46 100644
|
||||
--- a/drivers/video/backlight/Kconfig
|
||||
+++ b/drivers/video/backlight/Kconfig
|
||||
@@ -236,12 +236,12 @@ config BACKLIGHT_MAX8925
|
||||
If you have a LCD backlight connected to the WLED output of MAX8925
|
||||
WLED output, say Y here to enable this driver.
|
||||
|
||||
-config BACKLIGHT_MBP_NVIDIA
|
||||
- tristate "MacBook Pro Nvidia Backlight Driver"
|
||||
+config BACKLIGHT_APPLE
|
||||
+ tristate "Apple Backlight Driver"
|
||||
depends on X86
|
||||
help
|
||||
- If you have an Apple Macbook Pro with Nvidia graphics hardware say Y
|
||||
- to enable a driver for its backlight
|
||||
+ If you have an Intel-based Apple say Y to enable a driver for its
|
||||
+ backlight
|
||||
|
||||
config BACKLIGHT_TOSA
|
||||
tristate "Sharp SL-6000 Backlight Driver"
|
||||
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
|
||||
index 44c0f81..ebaecc0 100644
|
||||
--- a/drivers/video/backlight/Makefile
|
||||
+++ b/drivers/video/backlight/Makefile
|
||||
@@ -26,7 +26,7 @@ obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
|
||||
obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
|
||||
-obj-$(CONFIG_BACKLIGHT_MBP_NVIDIA) += mbp_nvidia_bl.o
|
||||
+obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_WM831X) += wm831x_bl.o
|
||||
diff --git a/drivers/video/backlight/apple_bl.c b/drivers/video/backlight/apple_bl.c
|
||||
new file mode 100644
|
||||
index 0000000..8f808c7
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/backlight/apple_bl.c
|
||||
@@ -0,0 +1,240 @@
|
||||
+/*
|
||||
+ * Backlight Driver for Intel-based Apples
|
||||
+ *
|
||||
+ * Copyright (c) Red Hat <mjg@redhat.com>
|
||||
+ * Based on code from Pommed:
|
||||
+ * Copyright (C) 2006 Nicolas Boichat <nicolas @boichat.ch>
|
||||
+ * Copyright (C) 2006 Felipe Alfaro Solana <felipe_alfaro @linuxmail.org>
|
||||
+ * Copyright (C) 2007 Julien BLACHE <jb@jblache.org>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * This driver triggers SMIs which cause the firmware to change the
|
||||
+ * backlight brightness. This is icky in many ways, but it's impractical to
|
||||
+ * get at the firmware code in order to figure out what it's actually doing.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/backlight.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/pci.h>
|
||||
+#include <linux/acpi.h>
|
||||
+
|
||||
+static struct backlight_device *apple_backlight_device;
|
||||
+
|
||||
+struct hw_data {
|
||||
+ /* I/O resource to allocate. */
|
||||
+ unsigned long iostart;
|
||||
+ unsigned long iolen;
|
||||
+ /* Backlight operations structure. */
|
||||
+ const struct backlight_ops backlight_ops;
|
||||
+ void (*set_brightness)(int);
|
||||
+};
|
||||
+
|
||||
+static const struct hw_data *hw_data;
|
||||
+
|
||||
+#define DRIVER "apple_backlight: "
|
||||
+
|
||||
+/* Module parameters. */
|
||||
+static int debug;
|
||||
+module_param_named(debug, debug, int, 0644);
|
||||
+MODULE_PARM_DESC(debug, "Set to one to enable debugging messages.");
|
||||
+
|
||||
+/*
|
||||
+ * Implementation for machines with Intel chipset.
|
||||
+ */
|
||||
+static void intel_chipset_set_brightness(int intensity)
|
||||
+{
|
||||
+ outb(0x04 | (intensity << 4), 0xb3);
|
||||
+ outb(0xbf, 0xb2);
|
||||
+}
|
||||
+
|
||||
+static int intel_chipset_send_intensity(struct backlight_device *bd)
|
||||
+{
|
||||
+ int intensity = bd->props.brightness;
|
||||
+
|
||||
+ if (debug)
|
||||
+ printk(KERN_DEBUG DRIVER "setting brightness to %d\n",
|
||||
+ intensity);
|
||||
+
|
||||
+ intel_chipset_set_brightness(intensity);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int intel_chipset_get_intensity(struct backlight_device *bd)
|
||||
+{
|
||||
+ int intensity;
|
||||
+
|
||||
+ outb(0x03, 0xb3);
|
||||
+ outb(0xbf, 0xb2);
|
||||
+ intensity = inb(0xb3) >> 4;
|
||||
+
|
||||
+ if (debug)
|
||||
+ printk(KERN_DEBUG DRIVER "read brightness of %d\n",
|
||||
+ intensity);
|
||||
+
|
||||
+ return intensity;
|
||||
+}
|
||||
+
|
||||
+static const struct hw_data intel_chipset_data = {
|
||||
+ .iostart = 0xb2,
|
||||
+ .iolen = 2,
|
||||
+ .backlight_ops = {
|
||||
+ .options = BL_CORE_SUSPENDRESUME,
|
||||
+ .get_brightness = intel_chipset_get_intensity,
|
||||
+ .update_status = intel_chipset_send_intensity,
|
||||
+ },
|
||||
+ .set_brightness = intel_chipset_set_brightness,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Implementation for machines with Nvidia chipset.
|
||||
+ */
|
||||
+static void nvidia_chipset_set_brightness(int intensity)
|
||||
+{
|
||||
+ outb(0x04 | (intensity << 4), 0x52f);
|
||||
+ outb(0xbf, 0x52e);
|
||||
+}
|
||||
+
|
||||
+static int nvidia_chipset_send_intensity(struct backlight_device *bd)
|
||||
+{
|
||||
+ int intensity = bd->props.brightness;
|
||||
+
|
||||
+ if (debug)
|
||||
+ printk(KERN_DEBUG DRIVER "setting brightness to %d\n",
|
||||
+ intensity);
|
||||
+
|
||||
+ nvidia_chipset_set_brightness(intensity);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int nvidia_chipset_get_intensity(struct backlight_device *bd)
|
||||
+{
|
||||
+ int intensity;
|
||||
+
|
||||
+ outb(0x03, 0x52f);
|
||||
+ outb(0xbf, 0x52e);
|
||||
+ intensity = inb(0x52f) >> 4;
|
||||
+
|
||||
+ if (debug)
|
||||
+ printk(KERN_DEBUG DRIVER "read brightness of %d\n",
|
||||
+ intensity);
|
||||
+
|
||||
+ return intensity;
|
||||
+}
|
||||
+
|
||||
+static const struct hw_data nvidia_chipset_data = {
|
||||
+ .iostart = 0x52e,
|
||||
+ .iolen = 2,
|
||||
+ .backlight_ops = {
|
||||
+ .options = BL_CORE_SUSPENDRESUME,
|
||||
+ .get_brightness = nvidia_chipset_get_intensity,
|
||||
+ .update_status = nvidia_chipset_send_intensity
|
||||
+ },
|
||||
+ .set_brightness = nvidia_chipset_set_brightness,
|
||||
+};
|
||||
+
|
||||
+static int __devinit apple_bl_add(struct acpi_device *dev)
|
||||
+{
|
||||
+ struct backlight_properties props;
|
||||
+ struct pci_dev *host;
|
||||
+ int intensity;
|
||||
+
|
||||
+ host = pci_get_bus_and_slot(0, 0);
|
||||
+
|
||||
+ if (!host) {
|
||||
+ printk(KERN_ERR DRIVER "unable to find PCI host\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ if (host->vendor == PCI_VENDOR_ID_INTEL)
|
||||
+ hw_data = &intel_chipset_data;
|
||||
+ else if (host->vendor == PCI_VENDOR_ID_NVIDIA)
|
||||
+ hw_data = &nvidia_chipset_data;
|
||||
+
|
||||
+ pci_dev_put(host);
|
||||
+
|
||||
+ if (!hw_data) {
|
||||
+ printk(KERN_ERR DRIVER "unknown hardware\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ /* Check that the hardware responds - this may not work under EFI */
|
||||
+
|
||||
+ intensity = hw_data->backlight_ops.get_brightness(NULL);
|
||||
+
|
||||
+ if (!intensity) {
|
||||
+ hw_data->set_brightness(1);
|
||||
+ if (!hw_data->backlight_ops.get_brightness(NULL))
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ hw_data->set_brightness(0);
|
||||
+ }
|
||||
+
|
||||
+ if (!request_region(hw_data->iostart, hw_data->iolen,
|
||||
+ "Apple backlight"))
|
||||
+ return -ENXIO;
|
||||
+
|
||||
+ memset(&props, 0, sizeof(struct backlight_properties));
|
||||
+ props.max_brightness = 15;
|
||||
+ apple_backlight_device = backlight_device_register("apple_backlight",
|
||||
+ NULL, NULL, &hw_data->backlight_ops, &props);
|
||||
+
|
||||
+ if (IS_ERR(apple_backlight_device)) {
|
||||
+ release_region(hw_data->iostart, hw_data->iolen);
|
||||
+ return PTR_ERR(apple_backlight_device);
|
||||
+ }
|
||||
+
|
||||
+ apple_backlight_device->props.brightness =
|
||||
+ hw_data->backlight_ops.get_brightness(apple_backlight_device);
|
||||
+ backlight_update_status(apple_backlight_device);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __devexit apple_bl_remove(struct acpi_device *dev, int type)
|
||||
+{
|
||||
+ backlight_device_unregister(apple_backlight_device);
|
||||
+
|
||||
+ release_region(hw_data->iostart, hw_data->iolen);
|
||||
+ hw_data = NULL;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct acpi_device_id apple_bl_ids[] = {
|
||||
+ {"APP0002", 0},
|
||||
+ {"", 0},
|
||||
+};
|
||||
+
|
||||
+static struct acpi_driver apple_bl_driver = {
|
||||
+ .name = "Apple backlight",
|
||||
+ .ids = apple_bl_ids,
|
||||
+ .ops = {
|
||||
+ .add = apple_bl_add,
|
||||
+ .remove = apple_bl_remove,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int __init apple_bl_init(void)
|
||||
+{
|
||||
+ return acpi_bus_register_driver(&apple_bl_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit apple_bl_exit(void)
|
||||
+{
|
||||
+ acpi_bus_unregister_driver(&apple_bl_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(apple_bl_init);
|
||||
+module_exit(apple_bl_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>");
|
||||
+MODULE_DESCRIPTION("Apple Backlight Driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DEVICE_TABLE(acpi, apple_bl_ids);
|
||||
+MODULE_ALIAS("mbp_nvidia_bl");
|
||||
diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
|
||||
deleted file mode 100644
|
||||
index 1485f73..0000000
|
||||
--- a/drivers/video/backlight/mbp_nvidia_bl.c
|
||||
+++ /dev/null
|
||||
@@ -1,400 +0,0 @@
|
||||
-/*
|
||||
- * Backlight Driver for Nvidia 8600 in Macbook Pro
|
||||
- *
|
||||
- * Copyright (c) Red Hat <mjg@redhat.com>
|
||||
- * Based on code from Pommed:
|
||||
- * Copyright (C) 2006 Nicolas Boichat <nicolas @boichat.ch>
|
||||
- * Copyright (C) 2006 Felipe Alfaro Solana <felipe_alfaro @linuxmail.org>
|
||||
- * Copyright (C) 2007 Julien BLACHE <jb@jblache.org>
|
||||
- *
|
||||
- * This program is free software; you can redistribute it and/or modify
|
||||
- * it under the terms of the GNU General Public License version 2 as
|
||||
- * published by the Free Software Foundation.
|
||||
- *
|
||||
- * This driver triggers SMIs which cause the firmware to change the
|
||||
- * backlight brightness. This is icky in many ways, but it's impractical to
|
||||
- * get at the firmware code in order to figure out what it's actually doing.
|
||||
- */
|
||||
-
|
||||
-#include <linux/module.h>
|
||||
-#include <linux/kernel.h>
|
||||
-#include <linux/init.h>
|
||||
-#include <linux/platform_device.h>
|
||||
-#include <linux/backlight.h>
|
||||
-#include <linux/err.h>
|
||||
-#include <linux/dmi.h>
|
||||
-#include <linux/io.h>
|
||||
-
|
||||
-static struct backlight_device *mbp_backlight_device;
|
||||
-
|
||||
-/* Structure to be passed to the DMI_MATCH function. */
|
||||
-struct dmi_match_data {
|
||||
- /* I/O resource to allocate. */
|
||||
- unsigned long iostart;
|
||||
- unsigned long iolen;
|
||||
- /* Backlight operations structure. */
|
||||
- const struct backlight_ops backlight_ops;
|
||||
-};
|
||||
-
|
||||
-/* Module parameters. */
|
||||
-static int debug;
|
||||
-module_param_named(debug, debug, int, 0644);
|
||||
-MODULE_PARM_DESC(debug, "Set to one to enable debugging messages.");
|
||||
-
|
||||
-/*
|
||||
- * Implementation for MacBooks with Intel chipset.
|
||||
- */
|
||||
-static int intel_chipset_send_intensity(struct backlight_device *bd)
|
||||
-{
|
||||
- int intensity = bd->props.brightness;
|
||||
-
|
||||
- if (debug)
|
||||
- printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n",
|
||||
- intensity);
|
||||
-
|
||||
- outb(0x04 | (intensity << 4), 0xb3);
|
||||
- outb(0xbf, 0xb2);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int intel_chipset_get_intensity(struct backlight_device *bd)
|
||||
-{
|
||||
- int intensity;
|
||||
-
|
||||
- outb(0x03, 0xb3);
|
||||
- outb(0xbf, 0xb2);
|
||||
- intensity = inb(0xb3) >> 4;
|
||||
-
|
||||
- if (debug)
|
||||
- printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n",
|
||||
- intensity);
|
||||
-
|
||||
- return intensity;
|
||||
-}
|
||||
-
|
||||
-static const struct dmi_match_data intel_chipset_data = {
|
||||
- .iostart = 0xb2,
|
||||
- .iolen = 2,
|
||||
- .backlight_ops = {
|
||||
- .options = BL_CORE_SUSPENDRESUME,
|
||||
- .get_brightness = intel_chipset_get_intensity,
|
||||
- .update_status = intel_chipset_send_intensity,
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-/*
|
||||
- * Implementation for MacBooks with Nvidia chipset.
|
||||
- */
|
||||
-static int nvidia_chipset_send_intensity(struct backlight_device *bd)
|
||||
-{
|
||||
- int intensity = bd->props.brightness;
|
||||
-
|
||||
- if (debug)
|
||||
- printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n",
|
||||
- intensity);
|
||||
-
|
||||
- outb(0x04 | (intensity << 4), 0x52f);
|
||||
- outb(0xbf, 0x52e);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int nvidia_chipset_get_intensity(struct backlight_device *bd)
|
||||
-{
|
||||
- int intensity;
|
||||
-
|
||||
- outb(0x03, 0x52f);
|
||||
- outb(0xbf, 0x52e);
|
||||
- intensity = inb(0x52f) >> 4;
|
||||
-
|
||||
- if (debug)
|
||||
- printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n",
|
||||
- intensity);
|
||||
-
|
||||
- return intensity;
|
||||
-}
|
||||
-
|
||||
-static const struct dmi_match_data nvidia_chipset_data = {
|
||||
- .iostart = 0x52e,
|
||||
- .iolen = 2,
|
||||
- .backlight_ops = {
|
||||
- .options = BL_CORE_SUSPENDRESUME,
|
||||
- .get_brightness = nvidia_chipset_get_intensity,
|
||||
- .update_status = nvidia_chipset_send_intensity
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-/*
|
||||
- * DMI matching.
|
||||
- */
|
||||
-static /* const */ struct dmi_match_data *driver_data;
|
||||
-
|
||||
-static int mbp_dmi_match(const struct dmi_system_id *id)
|
||||
-{
|
||||
- driver_data = id->driver_data;
|
||||
-
|
||||
- printk(KERN_INFO "mbp_nvidia_bl: %s detected\n", id->ident);
|
||||
- return 1;
|
||||
-}
|
||||
-
|
||||
-static const struct dmi_system_id __initdata mbp_device_table[] = {
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 1,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 2,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 3,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook3,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 4,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 4,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 1,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 1,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 2,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 2,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 3,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 3,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 4,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookAir 1,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir1,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&intel_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 5,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 5,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBook 6,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook6,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookAir 2,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 5,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 5,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 5,3",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,3"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 5,4",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,4"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookPro 5,5",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,5"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookAir 3,1",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,1"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- {
|
||||
- .callback = mbp_dmi_match,
|
||||
- .ident = "MacBookAir 3,2",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,2"),
|
||||
- },
|
||||
- .driver_data = (void *)&nvidia_chipset_data,
|
||||
- },
|
||||
- { }
|
||||
-};
|
||||
-
|
||||
-static int __init mbp_init(void)
|
||||
-{
|
||||
- struct backlight_properties props;
|
||||
- if (!dmi_check_system(mbp_device_table))
|
||||
- return -ENODEV;
|
||||
-
|
||||
- if (!request_region(driver_data->iostart, driver_data->iolen,
|
||||
- "Macbook Pro backlight"))
|
||||
- return -ENXIO;
|
||||
-
|
||||
- memset(&props, 0, sizeof(struct backlight_properties));
|
||||
- props.max_brightness = 15;
|
||||
- mbp_backlight_device = backlight_device_register("mbp_backlight", NULL,
|
||||
- NULL,
|
||||
- &driver_data->backlight_ops,
|
||||
- &props);
|
||||
- if (IS_ERR(mbp_backlight_device)) {
|
||||
- release_region(driver_data->iostart, driver_data->iolen);
|
||||
- return PTR_ERR(mbp_backlight_device);
|
||||
- }
|
||||
-
|
||||
- mbp_backlight_device->props.brightness =
|
||||
- driver_data->backlight_ops.get_brightness(mbp_backlight_device);
|
||||
- backlight_update_status(mbp_backlight_device);
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static void __exit mbp_exit(void)
|
||||
-{
|
||||
- backlight_device_unregister(mbp_backlight_device);
|
||||
-
|
||||
- release_region(driver_data->iostart, driver_data->iolen);
|
||||
-}
|
||||
-
|
||||
-module_init(mbp_init);
|
||||
-module_exit(mbp_exit);
|
||||
-
|
||||
-MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>");
|
||||
-MODULE_DESCRIPTION("Nvidia-based Macbook Pro Backlight Driver");
|
||||
-MODULE_LICENSE("GPL");
|
||||
-MODULE_DEVICE_TABLE(dmi, mbp_device_table);
|
|
@ -1,72 +0,0 @@
|
|||
From c564db51fe187362c4da0a9de2905c020e981c75 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Kossifidis <mickflemm@gmail.com>
|
||||
Date: Thu, 2 Jun 2011 03:09:48 +0300
|
||||
Subject: ath5k: Disable fast channel switching by default
|
||||
|
||||
Disable fast channel change by default on AR2413/AR5413 due to
|
||||
some bug reports (it still works for me but it's better to be safe).
|
||||
Add a module parameter "fastchanswitch" in case anyone wants to enable
|
||||
it and play with it.
|
||||
|
||||
Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
|
||||
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/ath/ath5k/base.c | 9 ++++++++-
|
||||
drivers/net/wireless/ath/ath5k/reset.c | 5 ++++-
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
|
||||
index 09ae4ef..0fb6333 100644
|
||||
--- a/drivers/net/wireless/ath/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
||||
@@ -69,6 +69,11 @@ static int modparam_all_channels;
|
||||
module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
|
||||
MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
|
||||
|
||||
+static int modparam_fastchanswitch;
|
||||
+module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
|
||||
+MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
|
||||
+
|
||||
+
|
||||
/* Module info */
|
||||
MODULE_AUTHOR("Jiri Slaby");
|
||||
MODULE_AUTHOR("Nick Kossifidis");
|
||||
@@ -2664,6 +2669,7 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
|
||||
struct ath5k_hw *ah = sc->ah;
|
||||
struct ath_common *common = ath5k_hw_common(ah);
|
||||
int ret, ani_mode;
|
||||
+ bool fast;
|
||||
|
||||
ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
|
||||
|
||||
@@ -2685,7 +2691,8 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
|
||||
sc->curchan = chan;
|
||||
sc->curband = &sc->sbands[chan->band];
|
||||
}
|
||||
- ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL,
|
||||
+ fast = ((chan != NULL) && modparam_fastchanswitch) ? 1 : 0;
|
||||
+ ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, fast,
|
||||
skip_pcu);
|
||||
if (ret) {
|
||||
ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
|
||||
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
|
||||
index 8420689..6f53d2b 100644
|
||||
--- a/drivers/net/wireless/ath/ath5k/reset.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/reset.c
|
||||
@@ -1119,8 +1119,11 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
|
||||
/* Non fatal, can happen eg.
|
||||
* on mode change */
|
||||
ret = 0;
|
||||
- } else
|
||||
+ } else {
|
||||
+ ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
|
||||
+ "fast chan change successful\n");
|
||||
return 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
1.7.5.2
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
From 4c49ff3fe128ca68dabd07537415c419ad7f82f9 Mon Sep 17 00:00:00 2001
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Wed, 1 Jun 2011 08:27:41 +0200
|
||||
Subject: block: blkdev_get() should access ->bd_disk only after
|
||||
success
|
||||
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
|
||||
commit 4c49ff3fe128ca68dabd07537415c419ad7f82f9 upstream.
|
||||
|
||||
d4dc210f69 (block: don't block events on excl write for non-optical
|
||||
devices) added dereferencing of bdev->bd_disk to test
|
||||
GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE; however, bdev->bd_disk can be
|
||||
%NULL if open failed which can lead to an oops.
|
||||
|
||||
Test the flag after testing open was successful, not before.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Reported-by: David Miller <davem@davemloft.net>
|
||||
Tested-by: David Miller <davem@davemloft.net>
|
||||
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
fs/block_dev.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/fs/block_dev.c
|
||||
+++ b/fs/block_dev.c
|
||||
@@ -1272,8 +1272,8 @@ int blkdev_get(struct block_device *bdev
|
||||
* individual writeable reference is too fragile given the
|
||||
* way @mode is used in blkdev_get/put().
|
||||
*/
|
||||
- if ((disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE) &&
|
||||
- !res && (mode & FMODE_WRITE) && !bdev->bd_write_holder) {
|
||||
+ if (!res && (mode & FMODE_WRITE) && !bdev->bd_write_holder &&
|
||||
+ (disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE)) {
|
||||
bdev->bd_write_holder = true;
|
||||
disk_block_events(disk);
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
From: Andy Ross <andy.ross@windriver.com>
|
||||
Date: Mon, 9 May 2011 23:11:16 +0000 (-0700)
|
||||
Subject: Bluetooth: Device ids for ath3k on Pegatron Lucid tablets
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpadovan%2Fbluetooth-next-2.6.git;a=commitdiff_plain;h=2a7bccccdb9604a717c2128a931f022267d35629
|
||||
|
||||
Bluetooth: Device ids for ath3k on Pegatron Lucid tablets
|
||||
|
||||
New ath3k device IDs used on the Pegatron Lucid (ExoPC and WeTab) units.
|
||||
|
||||
Signed-off-by: Andy Ross <andy.ross@windriver.com>
|
||||
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
|
||||
---
|
||||
|
||||
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
|
||||
index 695d441..6bacef3 100644
|
||||
--- a/drivers/bluetooth/ath3k.c
|
||||
+++ b/drivers/bluetooth/ath3k.c
|
||||
@@ -62,6 +62,7 @@ static struct usb_device_id ath3k_table[] = {
|
||||
|
||||
/* Atheros AR3011 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0CF3, 0x3002) },
|
||||
+ { USB_DEVICE(0x13d3, 0x3304) },
|
||||
|
||||
/* Atheros AR9285 Malbec with sflash firmware */
|
||||
{ USB_DEVICE(0x03F0, 0x311D) },
|
||||
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
|
||||
index 762a510..c2de895 100644
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -104,6 +104,7 @@ static struct usb_device_id blacklist_table[] = {
|
||||
|
||||
/* Atheros 3011 with sflash firmware */
|
||||
{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
|
||||
+ { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
|
||||
|
||||
/* Atheros AR9285 Malbec with sflash firmware */
|
||||
{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
|
|
@ -1,32 +0,0 @@
|
|||
From: Dan Rosenberg <drosenberg@vsecurity.com>
|
||||
Date: Fri, 24 Jun 2011 12:38:05 +0000 (-0400)
|
||||
Subject: Bluetooth: Prevent buffer overflow in l2cap config request
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpadovan%2Fbluetooth-2.6.git;a=commitdiff_plain;h=7ac28817536797fd40e9646452183606f9e17f71
|
||||
|
||||
Bluetooth: Prevent buffer overflow in l2cap config request
|
||||
[ backport to 2.6.38 ]
|
||||
|
||||
A remote user can provide a small value for the command size field in
|
||||
the command header of an l2cap configuration request, resulting in an
|
||||
integer underflow when subtracting the size of the configuration request
|
||||
header. This results in copying a very large amount of data via
|
||||
memcpy() and destroying the kernel heap. Check for underflow.
|
||||
|
||||
Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
|
||||
Cc: stable <stable@kernel.org>
|
||||
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
|
||||
---
|
||||
|
||||
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
|
||||
index 56fdd91..7d8a66b 100644
|
||||
--- a/net/bluetooth/l2cap.c
|
||||
+++ b/net/bluetooth/l2cap.c
|
||||
@@ -3116,7 +3116,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
|
||||
|
||||
/* Reject if config buffer is too small. */
|
||||
len = cmd_len - sizeof(*req);
|
||||
- if (l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
|
||||
+ if (len < 0 || l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
|
||||
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
|
||||
l2cap_build_conf_rsp(sk, rsp,
|
||||
L2CAP_CONF_REJECT, flags), rsp);
|
|
@ -1,54 +0,0 @@
|
|||
From: Phil Oester <kernel@linuxace.com>
|
||||
Date: Mon, 14 Mar 2011 06:22:04 +0000 (+0000)
|
||||
Subject: bonding: Incorrect TX queue offset
|
||||
X-Git-Tag: v2.6.39-rc1~468^2~15
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=fd0e435b0fe85622f167b84432552885a4856ac8
|
||||
|
||||
bonding: Incorrect TX queue offset
|
||||
|
||||
When packets come in from a device with >= 16 receive queues
|
||||
headed out a bonding interface, syslog gets filled with this:
|
||||
|
||||
kernel: bond0 selects TX queue 16, but real number of TX queues is 16
|
||||
|
||||
because queue_mapping is offset by 1. Adjust return value
|
||||
to account for the offset.
|
||||
|
||||
This is a revision of my earlier patch (which did not use the
|
||||
skb_rx_queue_* helpers - thanks to Ben for the suggestion).
|
||||
Andy submitted a similar patch which emits a pr_warning on
|
||||
invalid queue selection, but I believe the log spew is
|
||||
not useful. We can revisit that question in the future,
|
||||
but in the interim I believe fixing the core problem is
|
||||
worthwhile.
|
||||
|
||||
Signed-off-by: Phil Oester <kernel@linuxace.com>
|
||||
Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
|
||||
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
|
||||
index 3ad4f50..a93d941 100644
|
||||
--- a/drivers/net/bonding/bond_main.c
|
||||
+++ b/drivers/net/bonding/bond_main.c
|
||||
@@ -4341,11 +4341,18 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
/*
|
||||
* This helper function exists to help dev_pick_tx get the correct
|
||||
- * destination queue. Using a helper function skips the a call to
|
||||
+ * destination queue. Using a helper function skips a call to
|
||||
* skb_tx_hash and will put the skbs in the queue we expect on their
|
||||
* way down to the bonding driver.
|
||||
*/
|
||||
- return skb->queue_mapping;
|
||||
+ u16 txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0;
|
||||
+
|
||||
+ if (unlikely(txq >= dev->real_num_tx_queues)) {
|
||||
+ do
|
||||
+ txq -= dev->real_num_tx_queues;
|
||||
+ while (txq >= dev->real_num_tx_queues);
|
||||
+ }
|
||||
+ return txq;
|
||||
}
|
||||
|
||||
static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
@ -1,44 +0,0 @@
|
|||
From: Jens Axboe <jaxboe@fusionio.com>
|
||||
Date: Sun, 5 Jun 2011 04:01:13 +0000 (+0200)
|
||||
Subject: cfq-iosched: fix locking around ioc->ioc_data assignment
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=ab4bd22d3cce6977dc039664cc2d052e3147d662
|
||||
|
||||
cfq-iosched: fix locking around ioc->ioc_data assignment
|
||||
|
||||
Since we are modifying this RCU pointer, we need to hold
|
||||
the lock protecting it around it.
|
||||
|
||||
This fixes a potential reuse and double free of a cfq
|
||||
io_context structure. The bug has been in CFQ for a long
|
||||
time, it hit very few people but those it did hit seemed
|
||||
to see it a lot.
|
||||
|
||||
Tracked in RH bugzilla here:
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=577968
|
||||
|
||||
Credit goes to Paul Bolle for figuring out that the issue
|
||||
was around the one-hit ioc->ioc_data cache. Thanks to his
|
||||
hard work the issue is now fixed.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
|
||||
---
|
||||
|
||||
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
|
||||
index 3c7b537..545b8d4 100644
|
||||
--- a/block/cfq-iosched.c
|
||||
+++ b/block/cfq-iosched.c
|
||||
@@ -2772,8 +2772,11 @@ static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
|
||||
smp_wmb();
|
||||
cic->key = cfqd_dead_key(cfqd);
|
||||
|
||||
- if (ioc->ioc_data == cic)
|
||||
+ if (rcu_dereference(ioc->ioc_data) == cic) {
|
||||
+ spin_lock(&ioc->lock);
|
||||
rcu_assign_pointer(ioc->ioc_data, NULL);
|
||||
+ spin_unlock(&ioc->lock);
|
||||
+ }
|
||||
|
||||
if (cic->cfqq[BLK_RW_ASYNC]) {
|
||||
cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_ASYNC]);
|
12
config-arm
12
config-arm
|
@ -135,3 +135,15 @@ CONFIG_STRICT_DEVMEM=y
|
|||
# CONFIG_HVC_DCC is not set
|
||||
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
# CONFIG_ARM_PATCH_PHYS_VIRT is not set
|
||||
|
||||
CONFIG_FTMAC100=m
|
||||
|
||||
CONFIG_HWSPINLOCK_OMAP=m
|
||||
|
||||
CONFIG_USE_OF=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
CONFIG_MMC_SDHCI_OF=m
|
||||
|
|
|
@ -41,6 +41,7 @@ CONFIG_DEBUG_OBJECTS=y
|
|||
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
|
||||
CONFIG_DEBUG_OBJECTS_FREE=y
|
||||
CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||
|
||||
CONFIG_X86_PTDUMP=y
|
||||
|
|
229
config-generic
229
config-generic
|
@ -6,6 +6,7 @@ CONFIG_SMP=y
|
|||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_CROSS_COMPILE=""
|
||||
CONFIG_DEFAULT_HOSTNAME="(none)"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -32,6 +33,7 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASK_XACCT=y
|
||||
|
@ -138,6 +140,7 @@ CONFIG_MMC_SDHCI_PLTFM=m
|
|||
CONFIG_MMC_CB710=m
|
||||
CONFIG_MMC_RICOH_MMC=y
|
||||
CONFIG_MMC_USHC=m
|
||||
CONFIG_MMC_VUB300=m
|
||||
|
||||
CONFIG_CB710_CORE=m
|
||||
# CONFIG_CB710_DEBUG is not set
|
||||
|
@ -191,6 +194,7 @@ CONFIG_EXTRA_FIRMWARE=""
|
|||
#
|
||||
CONFIG_MTD=m
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
CONFIG_MTD_SWAP=m
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_AR7_PARTS=m
|
||||
CONFIG_MTD_CONCAT=m
|
||||
|
@ -240,6 +244,7 @@ CONFIG_MTD_ABSENT=m
|
|||
#
|
||||
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
# CONFIG_MTD_LATCH_ADDR is not set
|
||||
CONFIG_MTD_SC520CDP=m
|
||||
CONFIG_MTD_NETSC520=m
|
||||
# CONFIG_MTD_SBC_GXX is not set
|
||||
|
@ -282,6 +287,7 @@ CONFIG_MTD_NAND=m
|
|||
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
|
||||
# CONFIG_MTD_NAND_PLATFORM is not set
|
||||
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
|
||||
# CONFIG_MTD_NAND_ECC_BCH is not set
|
||||
# CONFIG_MTD_NAND_CAFE is not set
|
||||
CONFIG_MTD_NAND_IDS=m
|
||||
CONFIG_MTD_NAND_NANDSIM=m
|
||||
|
@ -447,6 +453,7 @@ CONFIG_SCSI_SCAN_ASYNC=y
|
|||
CONFIG_SCSI_SRP=m
|
||||
CONFIG_SCSI_SRP_ATTRS=m
|
||||
CONFIG_SCSI_TGT=m
|
||||
CONFIG_SCSI_ISCI=m
|
||||
|
||||
CONFIG_SCSI_DH=y
|
||||
CONFIG_SCSI_DH_RDAC=m
|
||||
|
@ -569,6 +576,7 @@ CONFIG_SATA_ACARD_AHCI=m
|
|||
CONFIG_PATA_ACPI=m
|
||||
CONFIG_PATA_ALI=m
|
||||
CONFIG_PATA_AMD=m
|
||||
CONFIG_PATA_ARASAN_CF=m
|
||||
CONFIG_PATA_ARTOP=m
|
||||
CONFIG_PATA_ATIIXP=m
|
||||
CONFIG_PATA_CMD640_PCI=m
|
||||
|
@ -689,6 +697,7 @@ CONFIG_DM_LOG_USERSPACE=m
|
|||
CONFIG_DM_MULTIPATH_QL=m
|
||||
CONFIG_DM_MULTIPATH_ST=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_FLAKEY=m
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -759,6 +768,7 @@ CONFIG_INET_TUNNEL=m
|
|||
CONFIG_INET_DIAG=m
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_FIB_TRIE_STATS=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
|
@ -806,7 +816,7 @@ CONFIG_IP_VS_NQ=m
|
|||
CONFIG_IP_VS_FTP=m
|
||||
CONFIG_IP_VS_PE_SIP=m
|
||||
|
||||
CONFIG_IPV6=m
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IPV6_PRIVACY=y
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_IPV6_ROUTE_INFO=y
|
||||
|
@ -842,11 +852,12 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y
|
|||
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NETFILTER_ADVANCED=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NETFILTER_NETLINK=m
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
CONFIG_NETFILTER_XTABLES=y
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_MARK=m
|
||||
CONFIG_NETFILTER_XT_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
|
@ -902,6 +913,9 @@ CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
|||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CPU=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPVS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
CONFIG_BRIDGE_NETFILTER=y
|
||||
|
@ -927,6 +941,8 @@ CONFIG_NF_CONNTRACK_SIP=m
|
|||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=y
|
||||
CONFIG_NF_CONNTRACK_IPV6=y
|
||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_NAT=m
|
||||
CONFIG_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_NF_CT_PROTO_DCCP=m
|
||||
|
@ -1016,6 +1032,19 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m
|
|||
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
|
||||
CONFIG_INET6_XFRM_MODE_BEET=m
|
||||
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_MAX=256
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
|
@ -1077,6 +1106,10 @@ CONFIG_NET_SCH_RED=m
|
|||
CONFIG_NET_SCH_SFQ=m
|
||||
CONFIG_NET_SCH_TBF=m
|
||||
CONFIG_NET_SCH_TEQL=m
|
||||
CONFIG_NET_SCH_SFB=m
|
||||
CONFIG_NET_SCH_MQPRIO=m
|
||||
CONFIG_NET_SCH_CHOKE=m
|
||||
CONFIG_NET_SCH_QFQ=m
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_CLS_BASIC=m
|
||||
|
@ -1421,7 +1454,10 @@ CONFIG_ADM8211=m
|
|||
CONFIG_ATH_COMMON=m
|
||||
CONFIG_ATH5K=m
|
||||
CONFIG_ATH5K_DEBUG=y
|
||||
# CONFIG_ATH5K_TRACER is not set
|
||||
CONFIG_ATH9K=m
|
||||
CONFIG_ATH9K_PCI=y
|
||||
CONFIG_ATH9K_AHB=y
|
||||
# CONFIG_ATH9K_DEBUG is not set
|
||||
CONFIG_ATH9K_DEBUGFS=y
|
||||
CONFIG_ATH9K_HTC=m
|
||||
|
@ -1479,7 +1515,13 @@ CONFIG_IWLWIFI=m
|
|||
CONFIG_IWLWIFI_DEBUG=y
|
||||
CONFIG_IWLWIFI_DEBUGFS=y
|
||||
CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y
|
||||
CONFIG_IWLWIFI_DEVICE_SVTOOL=y
|
||||
# CONFIG_IWL_P2P is not set
|
||||
CONFIG_IWLAGN=m
|
||||
CONFIG_IWLWIFI_LEGACY=m
|
||||
CONFIG_IWLWIFI_LEGACY_DEBUG=y
|
||||
CONFIG_IWLWIFI_LEGACY_DEBUGFS=y
|
||||
# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not set
|
||||
CONFIG_IWL4965=y
|
||||
CONFIG_IWL5000=y
|
||||
CONFIG_IWL3945=m
|
||||
|
@ -1508,16 +1550,19 @@ CONFIG_RT2500USB=m
|
|||
CONFIG_RT2800USB=m
|
||||
CONFIG_RT2800USB_RT33XX=y
|
||||
CONFIG_RT2800USB_RT35XX=y
|
||||
CONFIG_RT2800USB_RT53XX=y
|
||||
CONFIG_RT2800USB_UNKNOWN=y
|
||||
CONFIG_RT2800PCI=m
|
||||
CONFIG_RT2800PCI_RT33XX=y
|
||||
CONFIG_RT2800PCI_RT35XX=y
|
||||
CONFIG_RT2800PCI_RT53XX=y
|
||||
CONFIG_RT73USB=m
|
||||
CONFIG_RTL8180=m
|
||||
CONFIG_RTL8187=m
|
||||
CONFIG_TMD_HERMES=m
|
||||
CONFIG_USB_ZD1201=m
|
||||
CONFIG_USB_NET_RNDIS_WLAN=m
|
||||
CONFIG_USB_NET_KALMIA=m
|
||||
CONFIG_USB_NET_SMSC75XX=m
|
||||
CONFIG_ZD1211RW=m
|
||||
# CONFIG_ZD1211RW_DEBUG is not set
|
||||
|
@ -1538,6 +1583,11 @@ CONFIG_WL1271_SDIO=m
|
|||
CONFIG_WL1271_SPI=m
|
||||
|
||||
CONFIG_RTL8192CE=m
|
||||
CONFIG_RTL8192SE=m
|
||||
CONFIG_RTL8192CU=m
|
||||
|
||||
CONFIG_MWIFIEX=m
|
||||
CONFIG_MWIFIEX_SDIO=m
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -1597,6 +1647,8 @@ CONFIG_CAN_TSCAN1=m
|
|||
CONFIG_CAN_SLCAN=m
|
||||
CONFIG_CAN_SOFTING=m
|
||||
CONFIG_CAN_SOFTING_CS=m
|
||||
CONFIG_CAN_C_CAN=m
|
||||
CONFIG_CAN_C_CAN_PLATFORM=m
|
||||
# CONFIG_PCH_CAN is not set
|
||||
CONFIG_NETROM=m
|
||||
CONFIG_ROSE=m
|
||||
|
@ -1655,9 +1707,9 @@ CONFIG_WINBOND_FIR=m
|
|||
# Bluetooth support
|
||||
#
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_L2CAP=m
|
||||
CONFIG_BT_L2CAP=y
|
||||
CONFIG_BT_L2CAP_EXT_FEATURES=y
|
||||
CONFIG_BT_SCO=m
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_CMTP=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
|
@ -1689,6 +1741,7 @@ CONFIG_BT_HCIUART_LL=y
|
|||
CONFIG_BT_MRVL=m
|
||||
CONFIG_BT_MRVL_SDIO=m
|
||||
CONFIG_BT_ATH3K=m
|
||||
CONFIG_BT_WILINK=m
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
|
@ -1880,12 +1933,14 @@ CONFIG_KEYBOARD_ATKBD=y
|
|||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_LM8323 is not set
|
||||
# FIXME: Do we really need these keyboards enabled ?
|
||||
CONFIG_KEYBOARD_ADP5588=m
|
||||
CONFIG_KEYBOARD_MAX7359=m
|
||||
# CONFIG_KEYBOARD_ADP5588 is not set
|
||||
# CONFIG_KEYBOARD_MAX7359 is not set
|
||||
# CONFIG_KEYBOARD_ADP5589 is not set
|
||||
# CONFIG_KEYBOARD_MPR121 is not set
|
||||
# CONFIG_KEYBOARD_QT1070 is not set
|
||||
# CONFIG_KEYBOARD_MCS is not set
|
||||
CONFIG_KEYBOARD_OPENCORES=m
|
||||
CONFIG_KEYBOARD_QT2160=m
|
||||
# CONFIG_KEYBOARD_OPENCORES is not set
|
||||
# CONFIG_KEYBOARD_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_TCA6416 is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
|
@ -1959,6 +2014,8 @@ CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
|
|||
CONFIG_TOUCHSCREEN_W90X900=m
|
||||
# CONFIG_TOUCHSCREEN_BU21013 is not set
|
||||
CONFIG_TOUCHSCREEN_ST1232=m
|
||||
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
|
||||
# CONFIG_TOUCHSCREEN_MAX11801 is not set
|
||||
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_PCSPKR=m
|
||||
|
@ -1993,6 +2050,7 @@ CONFIG_SYNCLINKMP=m
|
|||
CONFIG_SYNCLINK_GT=m
|
||||
CONFIG_N_HDLC=m
|
||||
CONFIG_N_GSM=m
|
||||
# CONFIG_TRACE_SINK is not set
|
||||
# CONFIG_STALDRV is not set
|
||||
# CONFIG_IBM_ASM is not set
|
||||
CONFIG_TIFM_CORE=m
|
||||
|
@ -2041,6 +2099,7 @@ CONFIG_SERIAL_JSM=m
|
|||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_XILINX_PS_UART is not set
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
|
@ -2113,6 +2172,8 @@ CONFIG_I2C_TINY_USB=m
|
|||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
# CONFIG_I2C_XILINX is not set
|
||||
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
|
||||
#
|
||||
# I2C Hardware Sensors Chip support
|
||||
#
|
||||
|
@ -2219,6 +2280,23 @@ CONFIG_SENSORS_W83795=m
|
|||
# CONFIG_SENSORS_W83795_FANCTRL is not set
|
||||
CONFIG_SENSORS_DS620=m
|
||||
CONFIG_SENSORS_SHT21=m
|
||||
CONFIG_SENSORS_LINEAGE=m
|
||||
CONFIG_SENSORS_LTC4151=m
|
||||
CONFIG_SENSORS_MAX6639=m
|
||||
CONFIG_SENSORS_SCH5627=m
|
||||
CONFIG_SENSORS_ADS1015=m
|
||||
CONFIG_SENSORS_MAX16065=m
|
||||
CONFIG_SENSORS_MAX6642=m
|
||||
CONFIG_SENSORS_ADM1275=m
|
||||
CONFIG_SENSORS_UCD9000=m
|
||||
CONFIG_SENSORS_UCD9200=m
|
||||
CONFIG_SENSORS_EMC6W201=m
|
||||
|
||||
CONFIG_PMBUS=m
|
||||
CONFIG_SENSORS_PMBUS=m
|
||||
CONFIG_SENSORS_MAX16064=m
|
||||
CONFIG_SENSORS_MAX34440=m
|
||||
CONFIG_SENSORS_MAX8688=m
|
||||
|
||||
# CONFIG_HMC6352 is not set
|
||||
# CONFIG_BMP085 is not set
|
||||
|
@ -2241,6 +2319,9 @@ CONFIG_W1_SLAVE_DS2433=m
|
|||
CONFIG_W1_SLAVE_DS2433_CRC=y
|
||||
CONFIG_W1_SLAVE_DS2760=m
|
||||
CONFIG_W1_SLAVE_DS2423=m
|
||||
CONFIG_W1_SLAVE_DS2408=m
|
||||
CONFIG_W1_SLAVE_DS2780=m
|
||||
CONFIG_W1_SLAVE_BQ27000=m
|
||||
|
||||
#
|
||||
# Mice
|
||||
|
@ -2342,6 +2423,8 @@ CONFIG_RTC_DRV_WM831X=m
|
|||
CONFIG_RTC_DRV_BQ32K=m
|
||||
CONFIG_RTC_DRV_MSM6242=m
|
||||
CONFIG_RTC_DRV_RP5C01=m
|
||||
CONFIG_RTC_DRV_EM3027=m
|
||||
CONFIG_RTC_DRV_RV3029C2=m
|
||||
|
||||
CONFIG_DTLK=m
|
||||
CONFIG_R3964=m
|
||||
|
@ -2402,12 +2485,14 @@ CONFIG_HANGCHECK_TIMER=m
|
|||
# Multimedia devices
|
||||
#
|
||||
CONFIG_MEDIA_SUPPORT=m
|
||||
CONFIG_MEDIA_CONTROLLER=y
|
||||
CONFIG_VIDEO_DEV=m
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
|
||||
CONFIG_VIDEO_ALLOW_V4L1=y
|
||||
CONFIG_VIDEO_V4L1_COMPAT=y
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||
# CONFIG_VIDEO_VIVI is not set
|
||||
|
||||
#
|
||||
|
@ -2424,11 +2509,13 @@ CONFIG_VIDEO_BT848=m
|
|||
CONFIG_VIDEO_BT848_DVB=y
|
||||
CONFIG_VIDEO_BWQCAM=m
|
||||
CONFIG_VIDEO_SR030PC30=m
|
||||
CONFIG_VIDEO_NOON010PC30=m
|
||||
CONFIG_VIDEO_CAFE_CCIC=m
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
CONFIG_VIDEO_CPIA2=m
|
||||
CONFIG_VIDEO_CQCAM=m
|
||||
CONFIG_VIDEO_CX23885=m
|
||||
# CONFIG_MEDIA_ALTERA_CI is not set
|
||||
CONFIG_VIDEO_CX18=m
|
||||
CONFIG_VIDEO_CX18_ALSA=m
|
||||
CONFIG_VIDEO_CX88=m
|
||||
|
@ -2473,6 +2560,7 @@ CONFIG_VIDEO_FB_IVTV=m
|
|||
CONFIG_VIDEO_SAA7164=m
|
||||
CONFIG_VIDEO_TLG2300=m
|
||||
# CONFIG_VIDEO_TIMBERDALE is not set
|
||||
# CONFIG_VIDEO_M5MOLS is not set
|
||||
|
||||
CONFIG_USB_VIDEO_CLASS=m
|
||||
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
|
||||
|
@ -2484,6 +2572,7 @@ CONFIG_RADIO_GEMTEK_PCI=m
|
|||
CONFIG_RADIO_MAXIRADIO=m
|
||||
CONFIG_RADIO_MAESTRO=m
|
||||
CONFIG_RADIO_WL1273=m
|
||||
CONFIG_RADIO_WL128X=m
|
||||
|
||||
CONFIG_MEDIA_ATTACH=y
|
||||
CONFIG_MEDIA_TUNER_CUSTOMISE=y
|
||||
|
@ -2503,6 +2592,7 @@ CONFIG_MEDIA_TUNER_MXL5007T=m
|
|||
CONFIG_MEDIA_TUNER_MC44S803=m
|
||||
CONFIG_MEDIA_TUNER_MAX2165=m
|
||||
CONFIG_MEDIA_TUNER_TDA18218=m
|
||||
CONFIG_MEDIA_TUNER_TDA18212=m
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -2574,6 +2664,8 @@ CONFIG_DVB_ATBM8830=m
|
|||
CONFIG_DVB_TDA665x=m
|
||||
CONFIG_DVB_STV0299=m
|
||||
CONFIG_DVB_MB86A16=m
|
||||
CONFIG_DVB_DRXD=m
|
||||
CONFIG_DVB_CXD2820R=m
|
||||
|
||||
#
|
||||
# Supported Frontend Modules
|
||||
|
@ -2601,6 +2693,9 @@ CONFIG_DVB_DUMMY_FE=m
|
|||
CONFIG_DVB_FIREDTV=m
|
||||
CONFIG_DVB_NGENE=m
|
||||
CONFIG_DVB_MB86A20S=m
|
||||
CONFIG_DVB_USB_TECHNISAT_USB2=m
|
||||
CONFIG_DVB_DIB9000=m
|
||||
CONFIG_DVB_STV0367=m
|
||||
|
||||
#
|
||||
# Supported SAA7146 based PCI Adapters
|
||||
|
@ -2675,6 +2770,12 @@ CONFIG_IR_JVC_DECODER=m
|
|||
CONFIG_IR_SONY_DECODER=m
|
||||
CONFIG_IR_RC5_SZ_DECODER=m
|
||||
CONFIG_IR_LIRC_CODEC=m
|
||||
CONFIG_IR_IMON=m
|
||||
CONFIG_IR_MCEUSB=m
|
||||
CONFIG_IR_ITE_CIR=m
|
||||
CONFIG_IR_NUVOTON=m
|
||||
CONFIG_IR_FINTEK=m
|
||||
CONFIG_IR_REDRAT3=m
|
||||
|
||||
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
||||
# CONFIG_VIDEO_MEM2MEM_TESTDEV is not set
|
||||
|
@ -2740,6 +2841,7 @@ CONFIG_FB_RIVA=m
|
|||
# CONFIG_FB_RIVA_I2C is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
CONFIG_FB_S3=m
|
||||
CONFIG_FB_S3_DDC=y
|
||||
CONFIG_FB_SAVAGE=m
|
||||
CONFIG_FB_SAVAGE_I2C=y
|
||||
CONFIG_FB_SAVAGE_ACCEL=y
|
||||
|
@ -2757,11 +2859,13 @@ CONFIG_FB_VOODOO1=m
|
|||
# CONFIG_FB_VT8623 is not set
|
||||
CONFIG_FB_EFI=y
|
||||
CONFIG_FB_VIA=m
|
||||
CONFIG_FB_VIA_X_COMPATIBILITY=y
|
||||
# CONFIG_FB_VIA_DIRECT_PROCFS is not set
|
||||
CONFIG_FB_METRONOME=m
|
||||
CONFIG_FB_MB862XX=m
|
||||
CONFIG_FB_MB862XX_PCI_GDC=y
|
||||
CONFIG_FB_MB862XX_LIME=y
|
||||
CONFIG_FB_MB862XX_I2C=y
|
||||
# CONFIG_FB_PRE_INIT_FB is not set
|
||||
# CONFIG_FB_TMIO is not set
|
||||
# CONFIG_FB_BROADSHEET is not set
|
||||
|
@ -2872,6 +2976,7 @@ CONFIG_SND_ENS1371=m
|
|||
CONFIG_SND_ES1938=m
|
||||
CONFIG_SND_ES1968=m
|
||||
CONFIG_SND_ES1968_INPUT=y
|
||||
CONFIG_SND_ES1968_RADIO=y
|
||||
CONFIG_SND_FM801=m
|
||||
CONFIG_SND_FM801_TEA575X_BOOL=y
|
||||
CONFIG_SND_CTXFI=m
|
||||
|
@ -2929,6 +3034,7 @@ CONFIG_SND_VIRTUOSO=m
|
|||
CONFIG_SND_VX222=m
|
||||
CONFIG_SND_YMFPCI=m
|
||||
CONFIG_SND_ASIHPI=m
|
||||
CONFIG_SND_LOLA=m
|
||||
|
||||
#
|
||||
# ALSA USB devices
|
||||
|
@ -2940,6 +3046,7 @@ CONFIG_SND_USB_CAIAQ_INPUT=y
|
|||
CONFIG_SND_USB_USX2Y=m
|
||||
CONFIG_SND_USB_US122L=m
|
||||
CONFIG_SND_USB_UA101=m
|
||||
CONFIG_SND_USB_6FIRE=m
|
||||
|
||||
#
|
||||
# PCMCIA devices
|
||||
|
@ -2948,6 +3055,10 @@ CONFIG_SND_PCMCIA=y
|
|||
CONFIG_SND_VXPOCKET=m
|
||||
CONFIG_SND_PDAUDIOCF=m
|
||||
|
||||
CONFIG_SND_FIREWIRE=y
|
||||
CONFIG_SND_FIREWIRE_SPEAKERS=m
|
||||
CONFIG_SND_ISIGHT=m
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
#
|
||||
|
@ -2980,6 +3091,8 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y
|
|||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_HCD_SSB is not set
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
CONFIG_USB_SL811_HCD=m
|
||||
CONFIG_USB_SL811_HCD_ISO=y
|
||||
# CONFIG_USB_SL811_CS is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
CONFIG_USB_XHCI_HCD=m
|
||||
|
@ -3000,17 +3113,19 @@ CONFIG_USB_TMC=m
|
|||
# CONFIG_BLK_DEV_UB is not set
|
||||
CONFIG_USB_STORAGE=m
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_ISD200=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
|
||||
CONFIG_USB_STORAGE_DATAFAB=m
|
||||
CONFIG_USB_STORAGE_FREECOM=m
|
||||
CONFIG_USB_STORAGE_ISD200=m
|
||||
CONFIG_USB_STORAGE_SDDR09=m
|
||||
CONFIG_USB_STORAGE_SDDR55=m
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=m
|
||||
CONFIG_USB_STORAGE_USBAT=y
|
||||
CONFIG_USB_STORAGE_ONETOUCH=y
|
||||
CONFIG_USB_STORAGE_ALAUDA=y
|
||||
CONFIG_USB_STORAGE_KARMA=y
|
||||
CONFIG_USB_STORAGE_ONETOUCH=m
|
||||
CONFIG_USB_STORAGE_ALAUDA=m
|
||||
CONFIG_USB_STORAGE_KARMA=m
|
||||
CONFIG_USB_STORAGE_REALTEK=m
|
||||
CONFIG_USB_STORAGE_ENE_UB6250=m
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
CONFIG_USB_UAS=m
|
||||
|
||||
|
@ -3064,12 +3179,10 @@ CONFIG_HID_SONY=m
|
|||
CONFIG_HID_SUNPLUS=m
|
||||
CONFIG_HID_GREENASIA=m
|
||||
CONFIG_HID_SMARTJOYPLUS=m
|
||||
CONFIG_HID_TIVO_SLIDE=m
|
||||
CONFIG_HID_TOPSEED=m
|
||||
CONFIG_HID_THRUSTMASTER=m
|
||||
CONFIG_HID_ZEROPLUS=m
|
||||
CONFIG_HID_ZYDACRON=m
|
||||
CONFIG_HID_ACRUX=m
|
||||
CONFIG_HID_ACRUX_FF=m
|
||||
CONFIG_HID_EMS_FF=m
|
||||
CONFIG_HID_ELECOM=m
|
||||
|
@ -3077,6 +3190,11 @@ CONFIG_HID_UCLOGIC=m
|
|||
CONFIG_HID_WALTOP=m
|
||||
CONFIG_HID_ROCCAT_PYRA=m
|
||||
CONFIG_HID_ROCCAT_KONEPLUS=m
|
||||
CONFIG_HID_ACRUX=m
|
||||
CONFIG_HID_KEYTOUCH=m
|
||||
CONFIG_HID_LCPOWER=m
|
||||
CONFIG_HID_ROCCAT_ARVO=m
|
||||
CONFIG_HID_ROCCAT_KOVAPLUS=m
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
|
@ -3135,6 +3253,9 @@ CONFIG_USB_GSPCA_KONICA=m
|
|||
CONFIG_USB_GSPCA_XIRLINK_CIT=m
|
||||
CONFIG_USB_GSPCA_SPCA1528=m
|
||||
CONFIG_USB_GSPCA_SQ930X=m
|
||||
CONFIG_USB_GSPCA_NW80X=m
|
||||
CONFIG_USB_GSPCA_VICAM=m
|
||||
CONFIG_USB_GSPCA_KINECT=m
|
||||
|
||||
CONFIG_USB_IBMCAM=m
|
||||
CONFIG_USB_KONICAWC=m
|
||||
|
@ -3160,6 +3281,7 @@ CONFIG_SOC_CAMERA_OV9640=m
|
|||
CONFIG_SOC_CAMERA_OV6650=m
|
||||
CONFIG_SOC_CAMERA_IMX074=m
|
||||
CONFIG_SOC_CAMERA_OV2640=m
|
||||
CONFIG_SOC_CAMERA_OV9740=m
|
||||
|
||||
#
|
||||
# USB Network adaptors
|
||||
|
@ -3188,6 +3310,7 @@ CONFIG_USB_NET_INT51X1=m
|
|||
CONFIG_USB_CDC_PHONET=m
|
||||
CONFIG_USB_IPHETH=m
|
||||
CONFIG_USB_SIERRA_NET=m
|
||||
CONFIG_USB_VL600=m
|
||||
|
||||
#
|
||||
# USB Host-to-Host Cables
|
||||
|
@ -3212,7 +3335,7 @@ CONFIG_USB_USS720=m
|
|||
#
|
||||
# USB Serial Converter support
|
||||
#
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
CONFIG_USB_SERIAL_AIRCABLE=m
|
||||
CONFIG_USB_SERIAL_ARK3116=m
|
||||
|
@ -3278,6 +3401,8 @@ CONFIG_USB_SERIAL_DEBUG=m
|
|||
CONFIG_USB_SERIAL_SSU100=m
|
||||
CONFIG_USB_SERIAL_SAMBA=m
|
||||
|
||||
CONFIG_USB_SERIAL_CONSOLE=y
|
||||
|
||||
CONFIG_USB_EZUSB=y
|
||||
CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_LED=m
|
||||
|
@ -3321,7 +3446,6 @@ CONFIG_USB_PWC_INPUT_EVDEV=y
|
|||
# CONFIG_USB_PWC_DEBUG is not set
|
||||
# CONFIG_USB_RIO500 is not set
|
||||
# CONFIG_USB_QUICKCAM_MESSENGER is not set
|
||||
CONFIG_USB_SL811_HCD=m
|
||||
CONFIG_USB_SISUSBVGA=m
|
||||
CONFIG_USB_SISUSBVGA_CON=y
|
||||
CONFIG_RADIO_SI470X=y
|
||||
|
@ -3361,7 +3485,6 @@ CONFIG_PCF50633_GPIO=m
|
|||
# CONFIG_AB3100_CORE is not set
|
||||
CONFIG_INPUT_PCF50633_PMU=m
|
||||
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
|
||||
CONFIG_CHARGER_PCF50633=m
|
||||
CONFIG_RTC_DRV_PCF50633=m
|
||||
CONFIG_RTC_DRV_DS3232=m
|
||||
CONFIG_RTC_DRV_ISL12022=m
|
||||
|
@ -3487,6 +3610,7 @@ CONFIG_PROC_KCORE=y
|
|||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
|
@ -3549,9 +3673,10 @@ CONFIG_NFS_FSCACHE=y
|
|||
# CONFIG_NFS_USE_LEGACY_DNS is not set
|
||||
# CONFIG_NFS_USE_NEW_IDMAPPER is not set
|
||||
# CONFIG_NFSD_DEPRECATED is not set
|
||||
CONFIG_PNFS_OBJLAYOUT=m
|
||||
CONFIG_LOCKD=m
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=m
|
||||
CONFIG_EXPORTFS=y
|
||||
CONFIG_SUNRPC=m
|
||||
CONFIG_SUNRPC_GSS=m
|
||||
CONFIG_SUNRPC_XPRT_RDMA=m
|
||||
|
@ -3571,6 +3696,7 @@ CONFIG_CIFS_ACL=y
|
|||
CONFIG_CIFS_WEAK_PW_HASH=y
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_NFSD_EXPORT=y
|
||||
CONFIG_NCP_FS=m
|
||||
CONFIG_NCPFS_PACKET_SIGNING=y
|
||||
CONFIG_NCPFS_IOCTL_LOCKING=y
|
||||
|
@ -3825,6 +3951,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=m
|
|||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_BACKLIGHT_PROGEAR=m
|
||||
# CONFIG_BACKLIGHT_ADP8860 is not set
|
||||
# CONFIG_BACKLIGHT_ADP8870 is not set
|
||||
CONFIG_FB_NVIDIA_BACKLIGHT=y
|
||||
CONFIG_FB_RIVA_BACKLIGHT=y
|
||||
CONFIG_FB_RADEON_BACKLIGHT=y
|
||||
|
@ -3857,6 +3984,7 @@ CONFIG_CGROUP_SCHED=y
|
|||
CONFIG_CGROUP_MEM_RES_CTLR=y
|
||||
CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y # XXX disabled by default, pass 'swapaccount'
|
||||
# CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is not set
|
||||
CONFIG_CGROUP_PERF=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
# CONFIG_DEBUG_BLK_CGROUP is not set
|
||||
|
||||
|
@ -4068,9 +4196,11 @@ CONFIG_LEDS_TRIGGER_GPIO=m
|
|||
CONFIG_LEDS_INTEL_SS4200=m
|
||||
CONFIG_LEDS_LP5521=m
|
||||
CONFIG_LEDS_LP5523=m
|
||||
CONFIG_LEDS_LM3530=m
|
||||
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DW_DMAC=m
|
||||
# CONFIG_TIMB_DMA is not set
|
||||
CONFIG_NET_DMA=y
|
||||
# CONFIG_DMATEST is not set
|
||||
|
@ -4078,8 +4208,6 @@ CONFIG_ASYNC_TX_DMA=y
|
|||
|
||||
CONFIG_UNUSED_SYMBOLS=y
|
||||
|
||||
CONFIG_UTRACE=y
|
||||
|
||||
CONFIG_FTRACE=y
|
||||
CONFIG_DYNAMIC_FTRACE=y
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
|
@ -4122,13 +4250,15 @@ CONFIG_APM_POWER=m
|
|||
# CONFIG_BATTERY_DS2760 is not set
|
||||
# CONFIG_BATTERY_DS2782 is not set
|
||||
# CONFIG_BATTERY_BQ20Z75 is not set
|
||||
# CONFIG_BATTERY_DS2780 is not set
|
||||
# CONFIG_CHARGER_ISP1704 is not set
|
||||
CONFIG_BATTERY_PMU=m
|
||||
# CONFIG_CHARGER_MAX8903 is not set
|
||||
# CONFIG_BATTERY_BQ27x00 is not set
|
||||
# CONFIG_BATTERY_MAX17040 is not set
|
||||
# CONFIG_PDA_POWER is not set
|
||||
# CONFIG_CHARGER_GPIO is not set
|
||||
# CONFIG_BATTERY_MAX17042 is not set
|
||||
# CONFIG_CHARGER_PCF50633 is not set
|
||||
|
||||
CONFIG_AUXDISPLAY=y
|
||||
|
||||
|
@ -4172,6 +4302,8 @@ CONFIG_PM_TRACE_RTC=y
|
|||
CONFIG_R6040=m
|
||||
|
||||
CONFIG_BNX2X=m
|
||||
CONFIG_SCSI_BNX2X_FCOE=m
|
||||
|
||||
CONFIG_NOZOMI=m
|
||||
# CONFIG_TPS65010 is not set
|
||||
# CONFIG_DEBUG_SECTION_MISMATCH is not set
|
||||
|
@ -4199,6 +4331,7 @@ CONFIG_MEMSTICK=m
|
|||
CONFIG_MSPRO_BLOCK=m
|
||||
CONFIG_MEMSTICK_TIFM_MS=m
|
||||
CONFIG_MEMSTICK_JMICRON_38X=m
|
||||
CONFIG_MEMSTICK_R592=m
|
||||
|
||||
CONFIG_ACCESSIBILITY=y
|
||||
CONFIG_A11Y_BRAILLE_CONSOLE=y
|
||||
|
@ -4238,7 +4371,6 @@ CONFIG_PHONET=m
|
|||
|
||||
CONFIG_ICS932S401=m
|
||||
# CONFIG_C2PORT is not set
|
||||
CONFIG_W1_SLAVE_BQ27000=m
|
||||
|
||||
|
||||
CONFIG_IT87_WDT=m
|
||||
|
@ -4327,6 +4459,15 @@ CONFIG_USB_ATMEL=m
|
|||
# CONFIG_DX_SEP is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
|
||||
# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
|
||||
# CONFIG_RTS_PSTOR is not set
|
||||
# CONFIG_DRM_PSB is not set
|
||||
# CONFIG_ALTERA_STAPL is not set
|
||||
# CONFIG_DVB_CXD2099 is not set
|
||||
# CONFIG_USBIP_CORE is not set
|
||||
# CONFIG_BRCMSMAC is not set
|
||||
# CONFIG_BRCMFMAC is not set
|
||||
# CONFIG_INTEL_MEI is not set
|
||||
# CONFIG_ZCACHE is not set
|
||||
|
||||
#
|
||||
# Android
|
||||
|
@ -4370,6 +4511,7 @@ CONFIG_STRIP_ASM_SYMS=y
|
|||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_SRCU_SYNCHRONIZE_DELAY=10
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||
|
||||
CONFIG_KSM=y
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
|
@ -4392,6 +4534,8 @@ CONFIG_PPS_CLIENT_PARPORT=m
|
|||
CONFIG_PPS_GENERATOR_PARPORT=m
|
||||
CONFIG_NTP_PPS=y
|
||||
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
|
||||
# CONFIG_USB_SERIAL_QUATECH2 is not set
|
||||
# CONFIG_VT6655 is not set
|
||||
CONFIG_FB_UDL=m
|
||||
|
@ -4422,12 +4566,14 @@ CONFIG_DETECT_SOFTLOCKUP=y
|
|||
CONFIG_LOCKUP_DETECTOR=y
|
||||
# CONFIG_DEBUG_INFO_REDUCED is not set
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
|
||||
# CONFIG_DETECT_HUNG_TASK is not set
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
CONFIG_ATOMIC64_SELFTEST=y
|
||||
|
||||
CONFIG_MEMORY_FAILURE=y
|
||||
CONFIG_HWPOISON_INJECT=m
|
||||
CONFIG_CLEANCACHE=y
|
||||
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
|
||||
|
@ -4448,6 +4594,7 @@ CONFIG_GPIO_SYSFS=y
|
|||
# CONFIG_GPIO_IT8761E is not set
|
||||
# CONFIG_GPIO_MAX7300 is not set
|
||||
# CONFIG_UCB1400_CORE is not set
|
||||
# CONFIG_TPS6105X is not set
|
||||
# CONFIG_RADIO_MIROPCM20 is not set
|
||||
# CONFIG_USB_GPIO_VBUS is not set
|
||||
# CONFIG_GPIO_SCH is not set
|
||||
|
@ -4468,10 +4615,6 @@ CONFIG_IR_CORE=m
|
|||
CONFIG_IR_ENE=m
|
||||
CONFIG_IR_STREAMZAP=m
|
||||
CONFIG_IR_WINBOND_CIR=m
|
||||
CONFIG_IR_IMON=m
|
||||
CONFIG_IR_MCEUSB=m
|
||||
CONFIG_IR_NUVOTON=m
|
||||
CONFIG_IR_ITE_CIR=m
|
||||
|
||||
# CONFIG_GPIO_SX150X is not set
|
||||
# CONFIG_MFD_STMPE is not set
|
||||
|
@ -4493,8 +4636,28 @@ CONFIG_NFC_DEVICES=y
|
|||
CONFIG_PN544_NFC=m
|
||||
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_LOOPBACK_TARGET=m
|
||||
# CONFIG_LOOPBACK_TARGET_CDB_DEBUG is not set
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_TCM_FC=m
|
||||
|
||||
CONFIG_HWSPINLOCK=m
|
||||
|
||||
CONFIG_PSTORE=y
|
||||
|
||||
# CONFIG_AVERAGE is not set
|
||||
|
||||
# CONFIG_SIGMA is not set
|
||||
|
||||
CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
|
||||
|
||||
CONFIG_TEST_KSTRTOX=m
|
||||
|
||||
CONFIG_BCMA=m
|
||||
CONFIG_BCMA_HOST_PCI=y
|
||||
# CONFIG_BCMA_DEBUG is not set
|
||||
|
||||
# CONFIG_GOOGLE_FIRMWARE is not set
|
||||
CONFIG_INTEL_MID_PTI=m
|
||||
|
|
|
@ -140,6 +140,8 @@ CONFIG_ACPI_VIDEO=m
|
|||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_EC_DEBUGFS=m
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
CONFIG_PM=y
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
|
@ -183,6 +185,7 @@ CONFIG_PROC_VMCORE=y
|
|||
# CONFIG_IA64_MC_ERR_INJECT is not set
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
|
||||
|
@ -206,3 +209,5 @@ CONFIG_RCU_FANOUT=64
|
|||
|
||||
CONFIG_ACPI_POWER_METER=m
|
||||
CONFIG_I2C_SCMI=m
|
||||
|
||||
# CONFIG_HP_ACCEL is not set
|
||||
|
|
|
@ -41,6 +41,7 @@ CONFIG_CPUMASK_OFFSTACK=y
|
|||
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
|
||||
# CONFIG_DEBUG_OBJECTS_FREE is not set
|
||||
# CONFIG_DEBUG_OBJECTS_TIMERS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
|
||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||
|
||||
# CONFIG_X86_PTDUMP is not set
|
||||
|
|
|
@ -325,6 +325,9 @@ CONFIG_PATA_MACIO=m
|
|||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_88PM8607 is not set
|
||||
# CONFIG_MFD_MAX8997 is not set
|
||||
# CONFIG_MFD_TPS65910 is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
# CONFIG_XPS_USB_HCD_XILINX is not set
|
||||
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
|
||||
# CONFIG_MMC_SDHCI_OF_HLWD is not set
|
||||
|
@ -339,5 +342,16 @@ CONFIG_MPC512X_DMA=m
|
|||
|
||||
CONFIG_KVM_GUEST=y
|
||||
|
||||
CONFIG_I2C_MPC=m
|
||||
|
||||
# CONFIG_IMA is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=m
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m
|
||||
|
|
|
@ -182,5 +182,6 @@ CONFIG_EVENT_PROFILE=y
|
|||
|
||||
CONFIG_KVM_BOOK3S_32=m
|
||||
|
||||
### needs non-existant readq/writeq
|
||||
# CONFIG_SCSI_QLA_ISCSI is not set
|
||||
|
||||
CONFIG_BATTERY_PMU=m
|
||||
|
|
|
@ -184,3 +184,7 @@ CONFIG_CMM=y
|
|||
# CONFIG_SPARSEMEM_VMEMMAP is not set
|
||||
|
||||
CONFIG_PSERIES_ENERGY=m
|
||||
|
||||
CONFIG_PPC_ICSWX=y
|
||||
CONFIG_IO_EVENT_IRQ=y
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
|
|
|
@ -233,3 +233,8 @@ CONFIG_SCHED_MC=y
|
|||
CONFIG_SCHED_BOOK=y
|
||||
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
# CONFIG_WARN_DYNAMIC_STACK is not set
|
||||
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_CRYPTO_GHASH_S390=m
|
||||
|
|
|
@ -152,9 +152,11 @@ CONFIG_ACPI_POWER_METER=m
|
|||
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_APEI=y
|
||||
CONFIG_ACPI_APEI_PCIEAER=y
|
||||
CONFIG_ACPI_APEI_GHES=m
|
||||
# CONFIG_ACPI_APEI_EINJ is not set
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
|
||||
#
|
||||
# CPUFreq processor drivers
|
||||
|
@ -198,7 +200,6 @@ CONFIG_X86_TRAMPOLINE=y
|
|||
#
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_IBM_ASM=m
|
||||
CONFIG_CRYPTO_AES_586=m
|
||||
CONFIG_CRYPTO_TWOFISH_586=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
|
||||
|
@ -324,6 +325,11 @@ CONFIG_TC1100_WMI=m
|
|||
CONFIG_HP_WMI=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_DELL_WMI=m
|
||||
CONFIG_DELL_WMI_AIO=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
CONFIG_XO15_EBOOK=m
|
||||
CONFIG_INTEL_OAKTRAIL=m
|
||||
|
||||
# CONFIG_TOUCHSCREEN_INTEL_MID is not set
|
||||
|
||||
|
@ -362,6 +368,7 @@ CONFIG_LGUEST_GUEST=y
|
|||
CONFIG_VMI=y
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=8
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
|
@ -371,13 +378,18 @@ CONFIG_XEN_FBDEV_FRONTEND=y
|
|||
CONFIG_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_BACKEND=m
|
||||
CONFIG_XEN_WDT=m
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
||||
CONFIG_XENFS=m
|
||||
CONFIG_XEN_COMPAT_XENFS=y
|
||||
CONFIG_XEN_BACKEND=y
|
||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_PLATFORM_PCI=m
|
||||
CONFIG_XEN_GNTDEV=m
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
|
||||
CONFIG_MTD_ESB2ROM=m
|
||||
CONFIG_MTD_CK804XROM=m
|
||||
|
@ -400,6 +412,8 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
|
|||
CONFIG_MACINTOSH_DRIVERS=y
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_ISCSI_IBFT_FIND=y
|
||||
CONFIG_ISCSI_IBFT=m
|
||||
|
||||
|
@ -407,6 +421,8 @@ CONFIG_DMADEVICES=y
|
|||
CONFIG_INTEL_IOATDMA=m
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
# CONFIG_CPA_DEBUG is not set
|
||||
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
|
||||
|
@ -420,6 +436,9 @@ CONFIG_OLPC_OPENFIRMWARE=y
|
|||
CONFIG_BATTERY_OLPC=y
|
||||
CONFIG_MOUSE_PS2_OLPC=y
|
||||
|
||||
# staging
|
||||
# CONFIG_FB_OLPC_DCON is not set
|
||||
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
# CONFIG_NO_BOOTMEM is not set
|
||||
|
@ -478,6 +497,7 @@ CONFIG_SFI=y
|
|||
|
||||
CONFIG_INPUT_WINBOND_CIR=m
|
||||
CONFIG_I2C_SCMI=m
|
||||
CONFIG_I2C_PXA=m
|
||||
CONFIG_SBC_FITPC2_WATCHDOG=m
|
||||
CONFIG_EDAC_I3200=m
|
||||
CONFIG_EDAC_DECODE_MCE=m
|
||||
|
@ -536,7 +556,8 @@ CONFIG_X86_32_IRIS=m
|
|||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=m
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=y
|
||||
CONFIG_CRYPTO_AES_586=y
|
||||
|
||||
CONFIG_MTD_OF_PARTS=m
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
|
@ -544,3 +565,7 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
# CONFIG_MMC_SDHCI_OF is not set
|
||||
|
||||
CONFIG_HP_ACCEL=m
|
||||
|
||||
# CONFIG_RAPIDIO is not set
|
||||
|
|
|
@ -98,9 +98,11 @@ CONFIG_ACPI_POWER_METER=m
|
|||
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_APEI=y
|
||||
CONFIG_ACPI_APEI_PCIEAER=y
|
||||
CONFIG_ACPI_APEI_GHES=m
|
||||
# CONFIG_ACPI_APEI_EINJ is not set
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
|
||||
CONFIG_X86_PLATFORM_DEVICES=y
|
||||
CONFIG_ASUS_LAPTOP=m
|
||||
|
@ -118,6 +120,12 @@ CONFIG_ACER_WMI=m
|
|||
CONFIG_ACERHDF=m
|
||||
CONFIG_HP_WMI=m
|
||||
CONFIG_DELL_WMI=m
|
||||
CONFIG_DELL_WMI_AIO=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
# CONFIG_XO15_EBOOK is not set
|
||||
CONFIG_INTEL_OAKTRAIL=m
|
||||
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
|
||||
# CONFIG_TOUCHSCREEN_INTEL_MID is not set
|
||||
|
@ -160,6 +168,7 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
|
|||
|
||||
CONFIG_CRYPTO_AES_X86_64=y
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=y
|
||||
|
||||
CONFIG_CRYPTO_TWOFISH_X86_64=m
|
||||
CONFIG_CRYPTO_SALSA20_X86_64=m
|
||||
|
||||
|
@ -269,6 +278,8 @@ CONFIG_PROC_VMCORE=y
|
|||
CONFIG_CRASH=m
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_ISCSI_IBFT_FIND=y
|
||||
CONFIG_ISCSI_IBFT=m
|
||||
|
||||
|
@ -294,6 +305,7 @@ CONFIG_KVM_GUEST=y
|
|||
CONFIG_KVM_MMU_AUDIT=y
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=32
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
|
@ -303,20 +315,27 @@ CONFIG_XEN_FBDEV_FRONTEND=y
|
|||
CONFIG_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_BACKEND=m
|
||||
CONFIG_XEN_WDT=m
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
||||
CONFIG_XENFS=m
|
||||
CONFIG_XEN_COMPAT_XENFS=y
|
||||
CONFIG_XEN_DEV_EVTCHN=m
|
||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
CONFIG_XEN_BACKEND=y
|
||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||
CONFIG_XEN_GNTDEV=m
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_PLATFORM_PCI=m
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
# CONFIG_COMPAT_VDSO is not set
|
||||
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
|
||||
|
@ -449,3 +468,9 @@ CONFIG_JUMP_LABEL=y
|
|||
CONFIG_HP_ILO=m
|
||||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
|
||||
CONFIG_HP_ACCEL=m
|
||||
|
||||
# CONFIG_RAPIDIO is not set
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
|
|
|
@ -1,134 +0,0 @@
|
|||
From: Andy Lutomirski <luto@mit.edu>
|
||||
Date: Mon, 16 May 2011 05:12:47 +0000 (+1000)
|
||||
Subject: crypto: aesni-intel - Merge with fpu.ko
|
||||
X-Git-Tag: v3.0-rc1~371^2~5
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=b23b64516500df6b70fcafb820970f18538252cf
|
||||
|
||||
crypto: aesni-intel - Merge with fpu.ko
|
||||
|
||||
Loading fpu without aesni-intel does nothing. Loading aesni-intel
|
||||
without fpu causes modes like xts to fail. (Unloading
|
||||
aesni-intel will restore those modes.)
|
||||
|
||||
One solution would be to make aesni-intel depend on fpu, but it
|
||||
seems cleaner to just combine the modules.
|
||||
|
||||
This is probably responsible for bugs like:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=589390
|
||||
|
||||
Signed-off-by: Andy Lutomirski <luto@mit.edu>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
[also 9bed4aca for the bugfix. --kyle]
|
||||
|
||||
---
|
||||
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
|
||||
index 1a58ad8..c04f1b7 100644
|
||||
--- a/arch/x86/crypto/Makefile
|
||||
+++ b/arch/x86/crypto/Makefile
|
||||
@@ -2,8 +2,6 @@
|
||||
# Arch-specific CryptoAPI modules.
|
||||
#
|
||||
|
||||
-obj-$(CONFIG_CRYPTO_FPU) += fpu.o
|
||||
-
|
||||
obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o
|
||||
obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o
|
||||
obj-$(CONFIG_CRYPTO_SALSA20_586) += salsa20-i586.o
|
||||
@@ -24,6 +22,6 @@ aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o
|
||||
twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_glue.o
|
||||
salsa20-x86_64-y := salsa20-x86_64-asm_64.o salsa20_glue.o
|
||||
|
||||
-aesni-intel-y := aesni-intel_asm.o aesni-intel_glue.o
|
||||
+aesni-intel-y := aesni-intel_asm.o aesni-intel_glue.o fpu.o
|
||||
|
||||
ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o
|
||||
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
|
||||
index b375b2a..ede3fa7 100644
|
||||
--- a/arch/x86/crypto/aesni-intel_glue.c
|
||||
+++ b/arch/x86/crypto/aesni-intel_glue.c
|
||||
@@ -94,6 +94,10 @@ asmlinkage void aesni_cbc_enc(struct crypto_aes_ctx *ctx, u8 *out,
|
||||
const u8 *in, unsigned int len, u8 *iv);
|
||||
asmlinkage void aesni_cbc_dec(struct crypto_aes_ctx *ctx, u8 *out,
|
||||
const u8 *in, unsigned int len, u8 *iv);
|
||||
+
|
||||
+int crypto_fpu_init(void);
|
||||
+void crypto_fpu_exit(void);
|
||||
+
|
||||
#ifdef CONFIG_X86_64
|
||||
asmlinkage void aesni_ctr_enc(struct crypto_aes_ctx *ctx, u8 *out,
|
||||
const u8 *in, unsigned int len, u8 *iv);
|
||||
@@ -1259,6 +1263,8 @@ static int __init aesni_init(void)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+ if ((err = crypto_fpu_init()))
|
||||
+ goto fpu_err;
|
||||
if ((err = crypto_register_alg(&aesni_alg)))
|
||||
goto aes_err;
|
||||
if ((err = crypto_register_alg(&__aesni_alg)))
|
||||
@@ -1336,6 +1342,7 @@ blk_ecb_err:
|
||||
__aes_err:
|
||||
crypto_unregister_alg(&aesni_alg);
|
||||
aes_err:
|
||||
+fpu_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1365,6 +1372,8 @@ static void __exit aesni_exit(void)
|
||||
crypto_unregister_alg(&blk_ecb_alg);
|
||||
crypto_unregister_alg(&__aesni_alg);
|
||||
crypto_unregister_alg(&aesni_alg);
|
||||
+
|
||||
+ crypto_fpu_exit();
|
||||
}
|
||||
|
||||
module_init(aesni_init);
|
||||
diff --git a/arch/x86/crypto/fpu.c b/arch/x86/crypto/fpu.c
|
||||
index 1a8f864..98d7a18 100644
|
||||
--- a/arch/x86/crypto/fpu.c
|
||||
+++ b/arch/x86/crypto/fpu.c
|
||||
@@ -150,18 +150,12 @@ static struct crypto_template crypto_fpu_tmpl = {
|
||||
.module = THIS_MODULE,
|
||||
};
|
||||
|
||||
-static int __init crypto_fpu_module_init(void)
|
||||
+int __init crypto_fpu_init(void)
|
||||
{
|
||||
return crypto_register_template(&crypto_fpu_tmpl);
|
||||
}
|
||||
|
||||
-static void __exit crypto_fpu_module_exit(void)
|
||||
+void __exit crypto_fpu_exit(void)
|
||||
{
|
||||
crypto_unregister_template(&crypto_fpu_tmpl);
|
||||
}
|
||||
-
|
||||
-module_init(crypto_fpu_module_init);
|
||||
-module_exit(crypto_fpu_module_exit);
|
||||
-
|
||||
-MODULE_LICENSE("GPL");
|
||||
-MODULE_DESCRIPTION("FPU block cipher wrapper");
|
||||
diff --git a/crypto/Kconfig b/crypto/Kconfig
|
||||
index 4b7cb0e..87b22ca 100644
|
||||
--- a/crypto/Kconfig
|
||||
+++ b/crypto/Kconfig
|
||||
@@ -264,11 +264,6 @@ config CRYPTO_XTS
|
||||
key size 256, 384 or 512 bits. This implementation currently
|
||||
can't handle a sectorsize which is not a multiple of 16 bytes.
|
||||
|
||||
-config CRYPTO_FPU
|
||||
- tristate
|
||||
- select CRYPTO_BLKCIPHER
|
||||
- select CRYPTO_MANAGER
|
||||
-
|
||||
comment "Hash modes"
|
||||
|
||||
config CRYPTO_HMAC
|
||||
@@ -543,7 +538,6 @@ config CRYPTO_AES_NI_INTEL
|
||||
select CRYPTO_AES_586 if !64BIT
|
||||
select CRYPTO_CRYPTD
|
||||
select CRYPTO_ALGAPI
|
||||
- select CRYPTO_FPU
|
||||
help
|
||||
Use Intel AES-NI instructions for AES algorithm.
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
From linux-kernel-owner@vger.kernel.org Thu May 5 20:14:44 2011
|
||||
Date: Thu, 05 May 2011 17:11:08 -0700
|
||||
From: Greg KH <gregkh@suse.de>
|
||||
To: linux-kernel@vger.kernel.org, stable@kernel.org,
|
||||
Greg KH <greg@kroah.com>
|
||||
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
|
||||
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
|
||||
Jarod Wilson <jarod@wilsonet.com>,
|
||||
Lawrence Rust <lawrence@softsystem.co.uk>,
|
||||
Linux Media Mailing List <linux-media@vger.kernel.org>,
|
||||
Lawrence Rust <lvr@softsystem.dot.uk>,
|
||||
Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Subject: [patch 36/38] [media] cx88: Fix HVR4000 IR keymap
|
||||
In-Reply-To: <20110506001225.GA10547@kroah.com>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
|
||||
2.6.38-stable review patch. If anyone has any objections, please let us know.
|
||||
|
||||
------------------
|
||||
|
||||
From: Lawrence Rust <lvr@softsystem.dot.uk>
|
||||
|
||||
[fixed in .39 in a much different way that is too big to backport to
|
||||
.38 - gregkh]
|
||||
|
||||
Fixes the RC key input for Nova-S plus, HVR1100, HVR3000 and HVR4000 in
|
||||
the 2.6.38 kernel.
|
||||
|
||||
Signed-off-by: Lawrence Rust <lvr@softsystem.dot.uk>
|
||||
Acked-by: Jarod Wilson <jarod@wilsonet.com>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
|
||||
---
|
||||
drivers/media/video/cx88/cx88-input.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/media/video/cx88/cx88-input.c
|
||||
+++ b/drivers/media/video/cx88/cx88-input.c
|
||||
@@ -283,7 +283,7 @@ int cx88_ir_init(struct cx88_core *core,
|
||||
case CX88_BOARD_PCHDTV_HD3000:
|
||||
case CX88_BOARD_PCHDTV_HD5500:
|
||||
case CX88_BOARD_HAUPPAUGE_IRONLY:
|
||||
- ir_codes = RC_MAP_HAUPPAUGE_NEW;
|
||||
+ ir_codes = RC_MAP_RC5_HAUPPAUGE_NEW;
|
||||
ir->sampling = 1;
|
||||
break;
|
||||
case CX88_BOARD_WINFAST_DTV2000H:
|
||||
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Tue, 21 Jun 2011 17:37:59 +0000 (+0100)
|
||||
Subject: drm/i915: Apply HWSTAM workaround for BSD ring on SandyBridge
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=ec6a890dfed7dd245beba5e5bcdfcffbd934c284
|
||||
|
||||
drm/i915: Apply HWSTAM workaround for BSD ring on SandyBridge
|
||||
|
||||
...we need to apply exactly the same workaround for missing interrupts
|
||||
from BSD as for the BLT ring, apparently.
|
||||
|
||||
See also commit 498e720b96379d8ee9c294950a01534a73defcf3
|
||||
(drm/i915: Fix gen6 (SNB) missed BLT ring interrupts).
|
||||
|
||||
Reported-and-tested-by: nkalkhof@web.de
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38529
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
||||
index 9e34a1a..ae2b499 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_irq.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
||||
@@ -1749,6 +1749,7 @@ void ironlake_irq_preinstall(struct drm_device *dev)
|
||||
* happens.
|
||||
*/
|
||||
I915_WRITE(GEN6_BLITTER_HWSTAM, ~GEN6_BLITTER_USER_INTERRUPT);
|
||||
+ I915_WRITE(GEN6_BSD_HWSTAM, ~GEN6_BSD_USER_INTERRUPT);
|
||||
}
|
||||
|
||||
/* XXX hotplug from PCH */
|
||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
||||
index 2f967af..5d5def7 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
||||
@@ -531,6 +531,7 @@
|
||||
#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE 0
|
||||
#define GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR (1 << 3)
|
||||
|
||||
+#define GEN6_BSD_HWSTAM 0x12098
|
||||
#define GEN6_BSD_IMR 0x120a8
|
||||
#define GEN6_BSD_USER_INTERRUPT (1 << 12)
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
From 3b936797f5e4623ae1b80a5f0c4df30a17360bf5 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Thu, 17 Mar 2011 15:23:22 +0000
|
||||
Subject: [PATCH] drm/i915: Fix pipelined fencing
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34584
|
||||
Cc: Andy Whitcroft <apw@canonical.com>
|
||||
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem.c | 46 ++++++++++++++++----------------------
|
||||
1 files changed, 19 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
|
||||
index 36e66cc..10378a3 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem.c
|
||||
@@ -2544,8 +2544,25 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
|
||||
reg = &dev_priv->fence_regs[obj->fence_reg];
|
||||
list_move_tail(®->lru_list, &dev_priv->mm.fence_list);
|
||||
|
||||
- if (!obj->fenced_gpu_access && !obj->last_fenced_seqno)
|
||||
- pipelined = NULL;
|
||||
+ if (obj->tiling_changed) {
|
||||
+ ret = i915_gem_object_flush_fence(obj,
|
||||
+ pipelined,
|
||||
+ interruptible);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (!obj->fenced_gpu_access && !obj->last_fenced_seqno)
|
||||
+ pipelined = NULL;
|
||||
+
|
||||
+ if (pipelined) {
|
||||
+ reg->setup_seqno =
|
||||
+ i915_gem_next_request_seqno(dev, pipelined);
|
||||
+ obj->last_fenced_seqno = reg->setup_seqno;
|
||||
+ obj->last_fenced_ring = pipelined;
|
||||
+ }
|
||||
+
|
||||
+ goto update;
|
||||
+ }
|
||||
|
||||
if (!pipelined) {
|
||||
if (reg->setup_seqno) {
|
||||
@@ -2568,31 +2585,6 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
|
||||
interruptible);
|
||||
if (ret)
|
||||
return ret;
|
||||
- } else if (obj->tiling_changed) {
|
||||
- if (obj->fenced_gpu_access) {
|
||||
- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
|
||||
- ret = i915_gem_flush_ring(obj->base.dev, obj->ring,
|
||||
- 0, obj->base.write_domain);
|
||||
- if (ret)
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- obj->fenced_gpu_access = false;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (!obj->fenced_gpu_access && !obj->last_fenced_seqno)
|
||||
- pipelined = NULL;
|
||||
- BUG_ON(!pipelined && reg->setup_seqno);
|
||||
-
|
||||
- if (obj->tiling_changed) {
|
||||
- if (pipelined) {
|
||||
- reg->setup_seqno =
|
||||
- i915_gem_next_request_seqno(dev, pipelined);
|
||||
- obj->last_fenced_seqno = reg->setup_seqno;
|
||||
- obj->last_fenced_ring = pipelined;
|
||||
- }
|
||||
- goto update;
|
||||
}
|
||||
|
||||
return 0;
|
||||
--
|
||||
1.5.6.5
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
commit 498e720b96379d8ee9c294950a01534a73defcf3
|
||||
Author: Daniel J Blueman <daniel.blueman@gmail.com>
|
||||
Date: Fri Jun 17 11:32:19 2011 -0700
|
||||
|
||||
drm/i915: Fix gen6 (SNB) missed BLT ring interrupts.
|
||||
|
||||
The failure appeared in dmesg as:
|
||||
|
||||
[drm:i915_hangcheck_ring_idle] *ERROR* Hangcheck timer elapsed... blt
|
||||
ring idle [waiting on 35064155, at 35064155], missed IRQ?
|
||||
|
||||
This works around that problem on by making the blitter command
|
||||
streamer write interrupt state to the Hardware Status Page when a
|
||||
MI_USER_INTERRUPT command is decoded, which appears to force the seqno
|
||||
out to memory before the interrupt happens.
|
||||
|
||||
v1->v2: Moved to prior interrupt handler installation and RMW flags as
|
||||
per feedback.
|
||||
v2->v3: Removed RMW of flags (by anholt)
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Tested-by: Chris Wilson <chris@chris-wilson.co.uk> [v1]
|
||||
Tested-by: Eric Anholt <eric@anholt.net> [v1,v3]
|
||||
(incidence of the bug with a testcase went from avg 2/1000 to
|
||||
0/12651 in the latest test run (plus more for v1))
|
||||
Tested-by: Kenneth Graunke <kenneth@whitecape.org> [v1]
|
||||
Tested-by: Robert Hooker <robert.hooker@canonical.com> [v1]
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33394
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
||||
index b9fafe3..9e34a1a 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_irq.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
||||
@@ -1740,6 +1740,16 @@ void ironlake_irq_preinstall(struct drm_device *dev)
|
||||
INIT_WORK(&dev_priv->rps_work, gen6_pm_rps_work);
|
||||
|
||||
I915_WRITE(HWSTAM, 0xeffe);
|
||||
+ if (IS_GEN6(dev)) {
|
||||
+ /* Workaround stalls observed on Sandy Bridge GPUs by
|
||||
+ * making the blitter command streamer generate a
|
||||
+ * write to the Hardware Status Page for
|
||||
+ * MI_USER_INTERRUPT. This appears to serialize the
|
||||
+ * previous seqno write out before the interrupt
|
||||
+ * happens.
|
||||
+ */
|
||||
+ I915_WRITE(GEN6_BLITTER_HWSTAM, ~GEN6_BLITTER_USER_INTERRUPT);
|
||||
+ }
|
||||
|
||||
/* XXX hotplug from PCH */
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
omgwtfbbqchainsaw?
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 5 +++++
|
||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
index e698343..21e601d1 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
@@ -1090,6 +1090,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
|
||||
if (ret)
|
||||
goto pre_mutex_err;
|
||||
|
||||
+ /* We don't get the flushing right for these chipsets, use the
|
||||
+ * big hammer for now to avoid random crashiness. */
|
||||
+ if (IS_I85X(dev) || IS_I865G(dev))
|
||||
+ wbinvd();
|
||||
+
|
||||
if (dev_priv->mm.suspended) {
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
ret = -EBUSY;
|
|
@ -1,44 +0,0 @@
|
|||
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
|
||||
index f737960..b1f8164 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_drv.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_drv.c
|
||||
@@ -509,6 +509,8 @@ i915_pci_remove(struct pci_dev *pdev)
|
||||
{
|
||||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
|
||||
+ pci_disable_device(pdev); /* core did previous enable */
|
||||
+
|
||||
drm_put_dev(dev);
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 300f64b..2e3db37 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -795,7 +795,8 @@ static bool ironlake_edp_panel_on (struct intel_dp *intel_dp)
|
||||
{
|
||||
struct drm_device *dev = intel_dp->base.base.dev;
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
- u32 pp, idle_on_mask = PP_ON | PP_SEQUENCE_STATE_ON_IDLE;
|
||||
+ u32 pp, idle_on = PP_ON | PP_SEQUENCE_STATE_ON_IDLE;
|
||||
+ u32 idle_on_mask = PP_ON | PP_SEQUENCE_STATE_MASK;
|
||||
|
||||
if (I915_READ(PCH_PP_STATUS) & PP_ON)
|
||||
return true;
|
||||
@@ -816,7 +817,7 @@ static bool ironlake_edp_panel_on (struct intel_dp *intel_dp)
|
||||
*/
|
||||
msleep(300);
|
||||
|
||||
- if (wait_for((I915_READ(PCH_PP_STATUS) & idle_on_mask) == idle_on_mask,
|
||||
+ if (wait_for((I915_READ(PCH_PP_STATUS) & idle_on_mask) == idle_on,
|
||||
5000))
|
||||
DRM_ERROR("panel on wait timed out: 0x%08x\n",
|
||||
I915_READ(PCH_PP_STATUS));
|
||||
@@ -922,6 +923,7 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
|
||||
|
||||
if (is_edp(intel_dp)) {
|
||||
ironlake_edp_backlight_off(dev);
|
||||
+ ironlake_edp_panel_off(dev);
|
||||
ironlake_edp_panel_on(intel_dp);
|
||||
if (!is_pch_edp(intel_dp))
|
||||
ironlake_edp_pll_on(encoder);
|
|
@ -1,36 +0,0 @@
|
|||
From ab737b006568d01204cc51368c7e2067eecb2cff Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Thu, 7 Apr 2011 13:31:57 +0200
|
||||
Subject: [PATCH] drm/i915: Add a no lvds quirk for the Asus EeeBox PC EB1007
|
||||
|
||||
I found this while figuring out why gnome-shell would not run on my
|
||||
Asus EeeBox PC EB1007. As a standalone "pc" this device cleary does not have
|
||||
an internal panel, yet it claims it does. Add a quirk to fix this.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++
|
||||
1 files changed, 8 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
index a562bd2..954822a 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lvds.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
@@ -724,6 +724,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "U800"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ .callback = intel_no_lvds_dmi_callback,
|
||||
+ .ident = "Asus EeeBox PC EB1007",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer INC."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "EB1007"),
|
||||
+ },
|
||||
+ },
|
||||
|
||||
{ } /* terminating entry */
|
||||
};
|
||||
--
|
||||
1.7.4.2
|
||||
|
|
@ -1,23 +1,18 @@
|
|||
drivers/gpu/drm/i915/intel_display.c | 2 --
|
||||
1 files changed, 0 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index 990f065..171a797 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -4568,7 +4568,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
struct drm_connector *connector, int dpms_mode)
|
||||
@@ -5821,7 +5821,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
struct intel_load_detect_pipe *old)
|
||||
{
|
||||
struct drm_encoder *encoder = &intel_encoder->base;
|
||||
- struct drm_device *dev = encoder->dev;
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
@@ -4578,7 +4577,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
connector->encoder = NULL;
|
||||
intel_encoder->load_detect_temp = false;
|
||||
crtc->enabled = drm_helper_crtc_in_use(crtc);
|
||||
- drm_helper_disable_unused_functions(dev);
|
||||
}
|
||||
@@ -5832,7 +5831,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
|
||||
/* Switch crtc and encoder back off if necessary */
|
||||
if (old->load_detect_temp) {
|
||||
connector->encoder = NULL;
|
||||
- drm_helper_disable_unused_functions(dev);
|
||||
|
||||
if (old->release_fb)
|
||||
old->release_fb->funcs->destroy(old->release_fb);
|
||||
|
|
|
@ -1,128 +0,0 @@
|
|||
From e8e7a2b8ccfdae0d4cb6bd25824bbedcd42da316 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Thu, 21 Apr 2011 22:18:32 +0100
|
||||
Subject: [PATCH] drm/i915: restore only the mode of this driver on lastclose (v2)
|
||||
|
||||
i915 calls the panic handler function on last close to reset the modes,
|
||||
however this is a really bad idea for multi-gpu machines, esp shareable
|
||||
gpus machines. So add a new entry point for the driver to just restore
|
||||
its own fbcon mode.
|
||||
|
||||
v2: move code into fb helper, fix panic code to block mode change on
|
||||
powered off GPUs.
|
||||
|
||||
[airlied: this hits drm core and I wrote it and it was reviewed on intel-gfx
|
||||
so really I signed it off twice ;-).]
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/drm_fb_helper.c | 27 ++++++++++++++++++++-------
|
||||
drivers/gpu/drm/i915/i915_dma.c | 2 +-
|
||||
drivers/gpu/drm/i915/intel_drv.h | 1 +
|
||||
drivers/gpu/drm/i915/intel_fb.c | 10 ++++++++++
|
||||
include/drm/drm_fb_helper.h | 1 +
|
||||
5 files changed, 33 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
|
||||
index 9507204..11d7a72 100644
|
||||
--- a/drivers/gpu/drm/drm_fb_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_fb_helper.c
|
||||
@@ -342,9 +342,22 @@ int drm_fb_helper_debug_leave(struct fb_info *info)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_debug_leave);
|
||||
|
||||
+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper)
|
||||
+{
|
||||
+ bool error = false;
|
||||
+ int i, ret;
|
||||
+ for (i = 0; i < fb_helper->crtc_count; i++) {
|
||||
+ struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set;
|
||||
+ ret = drm_crtc_helper_set_config(mode_set);
|
||||
+ if (ret)
|
||||
+ error = true;
|
||||
+ }
|
||||
+ return error;
|
||||
+}
|
||||
+EXPORT_SYMBOL(drm_fb_helper_restore_fbdev_mode);
|
||||
+
|
||||
bool drm_fb_helper_force_kernel_mode(void)
|
||||
{
|
||||
- int i = 0;
|
||||
bool ret, error = false;
|
||||
struct drm_fb_helper *helper;
|
||||
|
||||
@@ -352,12 +365,12 @@ bool drm_fb_helper_force_kernel_mode(void)
|
||||
return false;
|
||||
|
||||
list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
|
||||
- for (i = 0; i < helper->crtc_count; i++) {
|
||||
- struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set;
|
||||
- ret = drm_crtc_helper_set_config(mode_set);
|
||||
- if (ret)
|
||||
- error = true;
|
||||
- }
|
||||
+ if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF)
|
||||
+ continue;
|
||||
+
|
||||
+ ret = drm_fb_helper_restore_fbdev_mode(helper);
|
||||
+ if (ret)
|
||||
+ error = true;
|
||||
}
|
||||
return error;
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
|
||||
index 7273037..12876f2 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_dma.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_dma.c
|
||||
@@ -2207,7 +2207,7 @@ void i915_driver_lastclose(struct drm_device * dev)
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
|
||||
if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) {
|
||||
- drm_fb_helper_restore();
|
||||
+ intel_fb_restore_mode(dev);
|
||||
vga_switcheroo_process_delayed_switch();
|
||||
return;
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
|
||||
index f5b0d83..1d20712 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_drv.h
|
||||
+++ b/drivers/gpu/drm/i915/intel_drv.h
|
||||
@@ -338,4 +338,5 @@ extern int intel_overlay_attrs(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
extern void intel_fb_output_poll_changed(struct drm_device *dev);
|
||||
+extern void intel_fb_restore_mode(struct drm_device *dev);
|
||||
#endif /* __INTEL_DRV_H__ */
|
||||
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
|
||||
index 5127827..ec49bae 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_fb.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_fb.c
|
||||
@@ -264,3 +264,13 @@ void intel_fb_output_poll_changed(struct drm_device *dev)
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
|
||||
}
|
||||
+
|
||||
+void intel_fb_restore_mode(struct drm_device *dev)
|
||||
+{
|
||||
+ int ret;
|
||||
+ drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
+
|
||||
+ ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper);
|
||||
+ if (ret)
|
||||
+ DRM_DEBUG("failed to restore crtc mode\n");
|
||||
+}
|
||||
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
|
||||
index f22e7fe..ade09d7 100644
|
||||
--- a/include/drm/drm_fb_helper.h
|
||||
+++ b/include/drm/drm_fb_helper.h
|
||||
@@ -118,6 +118,7 @@ int drm_fb_helper_setcolreg(unsigned regno,
|
||||
unsigned transp,
|
||||
struct fb_info *info);
|
||||
|
||||
+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper);
|
||||
void drm_fb_helper_restore(void);
|
||||
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
|
||||
uint32_t fb_width, uint32_t fb_height);
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1 +0,0 @@
|
|||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,56 +0,0 @@
|
|||
From linux-kernel-owner@vger.kernel.org Thu May 5 20:17:19 2011
|
||||
Date: Thu, 05 May 2011 17:10:51 -0700
|
||||
From: Greg KH <gregkh@suse.de>
|
||||
To: linux-kernel@vger.kernel.org, stable@kernel.org
|
||||
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
|
||||
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
|
||||
Dave Airlie <airlied@redhat.com>
|
||||
Subject: [patch 19/38] drm/radeon: fix regression on atom cards with hardcoded EDID record.
|
||||
In-Reply-To: <20110506001225.GA10547@kroah.com>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
|
||||
2.6.38-stable review patch. If anyone has any objections, please let us know.
|
||||
|
||||
------------------
|
||||
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit eaa4f5e1d0b816291a59a47917e569c0384f2b6f upstream.
|
||||
|
||||
Since fafcf94e2b5732d1e13b440291c53115d2b172e9 introduced an edid size, it seems to have broken this path.
|
||||
|
||||
This manifest as oops on T500 Lenovo laptops with dual graphics primarily.
|
||||
|
||||
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=33812
|
||||
|
||||
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_atombios.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
@@ -1599,9 +1599,10 @@ struct radeon_encoder_atom_dig *radeon_a
|
||||
memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0],
|
||||
fake_edid_record->ucFakeEDIDLength);
|
||||
|
||||
- if (drm_edid_is_valid(edid))
|
||||
+ if (drm_edid_is_valid(edid)) {
|
||||
rdev->mode_info.bios_hardcoded_edid = edid;
|
||||
- else
|
||||
+ rdev->mode_info.bios_hardcoded_edid_size = edid_size;
|
||||
+ } else
|
||||
kfree(edid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
From 498c555f56a02ec1059bc150cde84411ba0ac010 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Sun, 29 May 2011 17:48:32 +1000
|
||||
Subject: [PATCH] drm/radeon: fix oops in ttm reserve when pageflipping (v2)
|
||||
|
||||
We need to take a reference to this object, pinning doesn't take a reference
|
||||
so if userspace deletes the object it can disappear even if pinned.
|
||||
|
||||
v2: fix error paths to unreference properly also.
|
||||
|
||||
should fix:
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=32402
|
||||
and
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=680651
|
||||
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 13 ++++++++-----
|
||||
1 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index ae247ee..292f73f 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -264,6 +264,8 @@ static void radeon_unpin_work_func(struct work_struct *__work)
|
||||
radeon_bo_unreserve(work->old_rbo);
|
||||
} else
|
||||
DRM_ERROR("failed to reserve buffer after flip\n");
|
||||
+
|
||||
+ drm_gem_object_unreference_unlocked(work->old_rbo->gobj);
|
||||
kfree(work);
|
||||
}
|
||||
|
||||
@@ -371,6 +373,8 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
|
||||
new_radeon_fb = to_radeon_framebuffer(fb);
|
||||
/* schedule unpin of the old buffer */
|
||||
obj = old_radeon_fb->obj;
|
||||
+ /* take a reference to the old object */
|
||||
+ drm_gem_object_reference(obj);
|
||||
rbo = obj->driver_private;
|
||||
work->old_rbo = rbo;
|
||||
INIT_WORK(&work->work, radeon_unpin_work_func);
|
||||
@@ -378,12 +382,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
|
||||
/* We borrow the event spin lock for protecting unpin_work */
|
||||
spin_lock_irqsave(&dev->event_lock, flags);
|
||||
if (radeon_crtc->unpin_work) {
|
||||
- spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||
- kfree(work);
|
||||
- radeon_fence_unref(&fence);
|
||||
-
|
||||
DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
|
||||
- return -EBUSY;
|
||||
+ r = -EBUSY;
|
||||
+ goto unlock_free;
|
||||
}
|
||||
radeon_crtc->unpin_work = work;
|
||||
radeon_crtc->deferred_flip_completion = 0;
|
||||
@@ -497,6 +498,8 @@ pflip_cleanup1:
|
||||
pflip_cleanup:
|
||||
spin_lock_irqsave(&dev->event_lock, flags);
|
||||
radeon_crtc->unpin_work = NULL;
|
||||
+unlock_free:
|
||||
+ drm_gem_object_unreference_unlocked(old_radeon_fb->obj);
|
||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||
radeon_fence_unref(&fence);
|
||||
kfree(work);
|
||||
--
|
||||
1.7.4.4
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,820 +0,0 @@
|
|||
commit 3c79cf677a2eca93762d15f69744937d43185573
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Thu Jun 23 12:19:32 2011 -0400
|
||||
|
||||
drm/radeon/kms: handle special cases for vddc
|
||||
|
||||
A voltage value of 0xff01 requires that the driver
|
||||
look up the max voltage for the board based using the
|
||||
atom SetVoltage command table.
|
||||
|
||||
Setting the proper voltage should fix stability on
|
||||
some newer asics.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 63311583922e52b7687233c18e9eebe83207d2e8
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Thu Jun 23 00:49:29 2011 -0400
|
||||
|
||||
drm/radeon/kms: fix num_banks tiling config for fusion
|
||||
|
||||
The field is encoded:
|
||||
0 = 4 banks
|
||||
1 = 8 banks
|
||||
2 = 16 banks
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 1421991c155016ce31777d09ebfdfe3eb04cb78c
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Mon Jun 20 13:00:31 2011 -0400
|
||||
|
||||
drm/radeon/kms/r6xx+: voltage fixes
|
||||
|
||||
0xff01 is not an actual voltage value, but a flag
|
||||
for the driver. If the power state as that value,
|
||||
skip setting the voltage.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit a7b65dda144af8ba443f1745875440c87a41b0a3
|
||||
Author: Dave Airlie <airlied@redhat.com>
|
||||
Date: Sat Jun 18 03:59:51 2011 +0000
|
||||
|
||||
drm/radeon: avoid warnings from r600/eg irq handlers on powered off card.
|
||||
|
||||
Since we were calling the wptr function before checking if the IH was
|
||||
even enabled, or the GPU wasn't shutdown, we'd get spam in the logs when
|
||||
the GPU readback 0xffffffff. This reorders things so we return early
|
||||
in the no IH and GPU shutdown cases.
|
||||
|
||||
Reported-and-tested-by: ManDay on #radeon
|
||||
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 3f662051e0acf55bc8c2ea246c9f05e004a2d698
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Fri Jun 17 06:11:30 2011 +0000
|
||||
|
||||
drm/radeon/kms: add missing param for dce3.2 DP transmitter setup
|
||||
|
||||
This is used during phy init to set up the phy for DP. This may
|
||||
fix DP problems on DCE3.2 cards.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit dc4f34ba0796f4b09501b035825c02c405335063
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Fri Jun 17 13:13:52 2011 -0400
|
||||
|
||||
drm/radeon/kms/atom: fix duallink on some early DCE3.2 cards
|
||||
|
||||
Certain revisions of the vbios on DCE3.2 cards have a bug
|
||||
in the transmitter control table which prevents duallink from
|
||||
being enabled properly on some cards. The action switch statement
|
||||
jumps to the wrong offset for the OUTPUT_ENABLE action. The fix
|
||||
is to use the ENABLE action rather than the OUTPUT_ENABLE action
|
||||
on the affected cards. In fixed version of the vbios, both
|
||||
actions jump to the same offset, so the change should be safe.
|
||||
|
||||
Reported-and-tested-by: Dave Airlie <airlied@redhat.com>
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit b5097472f2119480f60657f92b17dd79bcf8e24a
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Mon Jun 13 17:39:06 2011 -0400
|
||||
|
||||
drm/radeon/kms: use helper functions for fence read/write
|
||||
|
||||
The existing code assumed scratch registers in a number
|
||||
of places while in most cases we are be using writeback
|
||||
and events rather than scratch registers.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 4414ac4ea84407d14e9fde512c1c229f9cfc96c4
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Thu Jun 16 18:14:22 2011 +0000
|
||||
|
||||
drm/radeon/kms: fix num crtcs for Cedar and Caicos
|
||||
|
||||
Only support 4 rather than 6.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit c4eee24a87a71c14f223e85065cccea6bf32321d
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Mon Jun 13 22:02:51 2011 +0000
|
||||
|
||||
drm/radeon/kms: clear wb memory by default
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 12ca85df2db5988ea5c53d0ee53ff1b1cf1257fd
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Tue Jun 14 19:15:53 2011 +0000
|
||||
|
||||
drm/radeon/kms: signed fix for evergreen thermal
|
||||
|
||||
temperature is signed.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit dd53acd144d8fa6385e50949f4f635890420ba0b
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Wed Jun 8 13:01:11 2011 -0400
|
||||
|
||||
drm/radeon/kms: check modes against max pixel clock
|
||||
|
||||
Filter out modes that are higher than the max pixel
|
||||
clock.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit a812b560d0d041f2318ae4243ead692e26bae429
|
||||
Author: Daniel Haid <d.haid@gogi.tv>
|
||||
Date: Wed Jun 8 20:04:45 2011 +1000
|
||||
|
||||
drm/radeon/kms: fix for radeon on systems >4GB without hardware iommu
|
||||
|
||||
On my x86_64 system with >4GB of ram and swiotlb instead of
|
||||
a hardware iommu (because I have a VIA chipset), the call
|
||||
to pci_set_dma_mask (see below) with 40bits returns an error.
|
||||
|
||||
But it seems that the radeon driver is designed to have
|
||||
need_dma32 = true exactly if pci_set_dma_mask is called
|
||||
with 32 bits and false if it is called with 40 bits.
|
||||
|
||||
I have read somewhere that the default are 32 bits. So if the
|
||||
call fails I suppose that need_dma32 should be set to true.
|
||||
|
||||
And indeed the patch fixes the problem I have had before
|
||||
and which I had described here:
|
||||
http://choon.net/forum/read.php?21,106131,115940
|
||||
|
||||
Acked-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
cc: stable@kernel.org
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 262016fe924bbc06d50bcfc816c635d465cd503d
|
||||
Author: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Fri May 27 10:05:03 2011 -0400
|
||||
|
||||
drm/radeon/kms: viewport height has to be even
|
||||
|
||||
Otherwise, no vblank interrupts.
|
||||
Fixes:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=37522
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 36b3cb168810e68ae8dd2036189c4f2cfc0c6d49
|
||||
Author: Marek Olšák <maraeo@gmail.com>
|
||||
Date: Fri Jun 10 14:41:26 2011 +0000
|
||||
|
||||
drm/radeon/kms: do bounds checking for 3D_LOAD_VBPNTR and bump array limit
|
||||
|
||||
To my knowledge, the limit is 16 on r300.
|
||||
(the docs don't say what the limit is)
|
||||
|
||||
The lack of bounds checking can be abused to do all sorts of things
|
||||
(from bypassing parts of the CS checker to crashing the kernel).
|
||||
|
||||
Bugzilla:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=36745
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Marek Olšák <maraeo@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
index 2bab32f..1fce6b7 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
@@ -1011,7 +1011,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
uint64_t fb_location;
|
||||
uint32_t fb_format, fb_pitch_pixels, tiling_flags;
|
||||
u32 fb_swap = EVERGREEN_GRPH_ENDIAN_SWAP(EVERGREEN_GRPH_ENDIAN_NONE);
|
||||
- u32 tmp;
|
||||
+ u32 tmp, viewport_w, viewport_h;
|
||||
int r;
|
||||
|
||||
/* no fb bound */
|
||||
@@ -1137,8 +1137,10 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
y &= ~1;
|
||||
WREG32(EVERGREEN_VIEWPORT_START + radeon_crtc->crtc_offset,
|
||||
(x << 16) | y);
|
||||
+ viewport_w = crtc->mode.hdisplay;
|
||||
+ viewport_h = (crtc->mode.vdisplay + 1) & ~1;
|
||||
WREG32(EVERGREEN_VIEWPORT_SIZE + radeon_crtc->crtc_offset,
|
||||
- (crtc->mode.hdisplay << 16) | crtc->mode.vdisplay);
|
||||
+ (viewport_w << 16) | viewport_h);
|
||||
|
||||
/* pageflip setup */
|
||||
/* make sure flip is at vb rather than hb */
|
||||
@@ -1179,7 +1181,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
uint64_t fb_location;
|
||||
uint32_t fb_format, fb_pitch_pixels, tiling_flags;
|
||||
u32 fb_swap = R600_D1GRPH_SWAP_ENDIAN_NONE;
|
||||
- u32 tmp;
|
||||
+ u32 tmp, viewport_w, viewport_h;
|
||||
int r;
|
||||
|
||||
/* no fb bound */
|
||||
@@ -1304,8 +1306,10 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
y &= ~1;
|
||||
WREG32(AVIVO_D1MODE_VIEWPORT_START + radeon_crtc->crtc_offset,
|
||||
(x << 16) | y);
|
||||
+ viewport_w = crtc->mode.hdisplay;
|
||||
+ viewport_h = (crtc->mode.vdisplay + 1) & ~1;
|
||||
WREG32(AVIVO_D1MODE_VIEWPORT_SIZE + radeon_crtc->crtc_offset,
|
||||
- (crtc->mode.hdisplay << 16) | crtc->mode.vdisplay);
|
||||
+ (viewport_w << 16) | viewport_h);
|
||||
|
||||
/* pageflip setup */
|
||||
/* make sure flip is at vb rather than hb */
|
||||
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
|
||||
index 1b583f8..81f5211 100644
|
||||
--- a/drivers/gpu/drm/radeon/evergreen.c
|
||||
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
||||
@@ -88,7 +88,8 @@ u32 evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
|
||||
/* get temperature in millidegrees */
|
||||
int evergreen_get_temp(struct radeon_device *rdev)
|
||||
{
|
||||
- u32 temp, toffset, actual_temp = 0;
|
||||
+ u32 temp, toffset;
|
||||
+ int actual_temp = 0;
|
||||
|
||||
if (rdev->family == CHIP_JUNIPER) {
|
||||
toffset = (RREG32(CG_THERMAL_CTRL) & TOFFSET_MASK) >>
|
||||
@@ -139,11 +140,17 @@ void evergreen_pm_misc(struct radeon_device *rdev)
|
||||
struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
|
||||
|
||||
if (voltage->type == VOLTAGE_SW) {
|
||||
+ /* 0xff01 is a flag rather then an actual voltage */
|
||||
+ if (voltage->voltage == 0xff01)
|
||||
+ return;
|
||||
if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) {
|
||||
radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
|
||||
rdev->pm.current_vddc = voltage->voltage;
|
||||
DRM_DEBUG("Setting: vddc: %d\n", voltage->voltage);
|
||||
}
|
||||
+ /* 0xff01 is a flag rather then an actual voltage */
|
||||
+ if (voltage->vddci == 0xff01)
|
||||
+ return;
|
||||
if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) {
|
||||
radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI);
|
||||
rdev->pm.current_vddci = voltage->vddci;
|
||||
@@ -1954,9 +1961,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
|
||||
rdev->config.evergreen.tile_config |= (3 << 0);
|
||||
break;
|
||||
}
|
||||
- /* num banks is 8 on all fusion asics */
|
||||
+ /* num banks is 8 on all fusion asics. 0 = 4, 1 = 8, 2 = 16 */
|
||||
if (rdev->flags & RADEON_IS_IGP)
|
||||
- rdev->config.evergreen.tile_config |= 8 << 4;
|
||||
+ rdev->config.evergreen.tile_config |= 1 << 4;
|
||||
else
|
||||
rdev->config.evergreen.tile_config |=
|
||||
((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
|
||||
@@ -2636,28 +2643,25 @@ static inline u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
|
||||
|
||||
int evergreen_irq_process(struct radeon_device *rdev)
|
||||
{
|
||||
- u32 wptr = evergreen_get_ih_wptr(rdev);
|
||||
- u32 rptr = rdev->ih.rptr;
|
||||
+ u32 wptr;
|
||||
+ u32 rptr;
|
||||
u32 src_id, src_data;
|
||||
u32 ring_index;
|
||||
unsigned long flags;
|
||||
bool queue_hotplug = false;
|
||||
|
||||
- DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
|
||||
- if (!rdev->ih.enabled)
|
||||
+ if (!rdev->ih.enabled || rdev->shutdown)
|
||||
return IRQ_NONE;
|
||||
|
||||
- spin_lock_irqsave(&rdev->ih.lock, flags);
|
||||
+ wptr = evergreen_get_ih_wptr(rdev);
|
||||
+ rptr = rdev->ih.rptr;
|
||||
+ DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
|
||||
|
||||
+ spin_lock_irqsave(&rdev->ih.lock, flags);
|
||||
if (rptr == wptr) {
|
||||
spin_unlock_irqrestore(&rdev->ih.lock, flags);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
- if (rdev->shutdown) {
|
||||
- spin_unlock_irqrestore(&rdev->ih.lock, flags);
|
||||
- return IRQ_NONE;
|
||||
- }
|
||||
-
|
||||
restart_ih:
|
||||
/* display interrupts */
|
||||
evergreen_irq_ack(rdev);
|
||||
diff --git a/drivers/gpu/drm/radeon/r100_track.h b/drivers/gpu/drm/radeon/r100_track.h
|
||||
index 2fef9de..686f9dc 100644
|
||||
--- a/drivers/gpu/drm/radeon/r100_track.h
|
||||
+++ b/drivers/gpu/drm/radeon/r100_track.h
|
||||
@@ -63,7 +63,7 @@ struct r100_cs_track {
|
||||
unsigned num_arrays;
|
||||
unsigned max_indx;
|
||||
unsigned color_channel_mask;
|
||||
- struct r100_cs_track_array arrays[11];
|
||||
+ struct r100_cs_track_array arrays[16];
|
||||
struct r100_cs_track_cb cb[R300_MAX_CB];
|
||||
struct r100_cs_track_cb zb;
|
||||
struct r100_cs_track_cb aa;
|
||||
@@ -146,6 +146,12 @@ static inline int r100_packet3_load_vbpntr(struct radeon_cs_parser *p,
|
||||
ib = p->ib->ptr;
|
||||
track = (struct r100_cs_track *)p->track;
|
||||
c = radeon_get_ib_value(p, idx++) & 0x1F;
|
||||
+ if (c > 16) {
|
||||
+ DRM_ERROR("Only 16 vertex buffers are allowed %d\n",
|
||||
+ pkt->opcode);
|
||||
+ r100_cs_dump_packet(p, pkt);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
track->num_arrays = c;
|
||||
for (i = 0; i < (c - 1); i+=2, idx+=3) {
|
||||
r = r100_cs_packet_next_reloc(p, &reloc);
|
||||
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
|
||||
index 70e9fb0..e7157b7 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600.c
|
||||
@@ -586,6 +586,9 @@ void r600_pm_misc(struct radeon_device *rdev)
|
||||
struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
|
||||
|
||||
if ((voltage->type == VOLTAGE_SW) && voltage->voltage) {
|
||||
+ /* 0xff01 is a flag rather then an actual voltage */
|
||||
+ if (voltage->voltage == 0xff01)
|
||||
+ return;
|
||||
if (voltage->voltage != rdev->pm.current_vddc) {
|
||||
radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
|
||||
rdev->pm.current_vddc = voltage->voltage;
|
||||
@@ -3286,27 +3289,26 @@ static inline u32 r600_get_ih_wptr(struct radeon_device *rdev)
|
||||
|
||||
int r600_irq_process(struct radeon_device *rdev)
|
||||
{
|
||||
- u32 wptr = r600_get_ih_wptr(rdev);
|
||||
- u32 rptr = rdev->ih.rptr;
|
||||
+ u32 wptr;
|
||||
+ u32 rptr;
|
||||
u32 src_id, src_data;
|
||||
u32 ring_index;
|
||||
unsigned long flags;
|
||||
bool queue_hotplug = false;
|
||||
|
||||
- DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
|
||||
- if (!rdev->ih.enabled)
|
||||
+ if (!rdev->ih.enabled || rdev->shutdown)
|
||||
return IRQ_NONE;
|
||||
|
||||
+ wptr = r600_get_ih_wptr(rdev);
|
||||
+ rptr = rdev->ih.rptr;
|
||||
+ DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
|
||||
+
|
||||
spin_lock_irqsave(&rdev->ih.lock, flags);
|
||||
|
||||
if (rptr == wptr) {
|
||||
spin_unlock_irqrestore(&rdev->ih.lock, flags);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
- if (rdev->shutdown) {
|
||||
- spin_unlock_irqrestore(&rdev->ih.lock, flags);
|
||||
- return IRQ_NONE;
|
||||
- }
|
||||
|
||||
restart_ih:
|
||||
/* display interrupts */
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
|
||||
index 27df931..c46552d 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon.h
|
||||
+++ b/drivers/gpu/drm/radeon/radeon.h
|
||||
@@ -165,6 +165,7 @@ struct radeon_clock {
|
||||
uint32_t default_sclk;
|
||||
uint32_t default_dispclk;
|
||||
uint32_t dp_extclk;
|
||||
+ uint32_t max_pixel_clock;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -178,6 +179,7 @@ void radeon_pm_resume(struct radeon_device *rdev);
|
||||
void radeon_combios_get_power_modes(struct radeon_device *rdev);
|
||||
void radeon_atombios_get_power_modes(struct radeon_device *rdev);
|
||||
void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type);
|
||||
+int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage);
|
||||
void rs690_pm_info(struct radeon_device *rdev);
|
||||
extern int rv6xx_get_temp(struct radeon_device *rdev);
|
||||
extern int rv770_get_temp(struct radeon_device *rdev);
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
|
||||
index b9b3c2a..6f5bd29 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_asic.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
|
||||
@@ -938,6 +938,13 @@ static struct radeon_asic cayman_asic = {
|
||||
int radeon_asic_init(struct radeon_device *rdev)
|
||||
{
|
||||
radeon_register_accessor_init(rdev);
|
||||
+
|
||||
+ /* set the number of crtcs */
|
||||
+ if (rdev->flags & RADEON_SINGLE_CRTC)
|
||||
+ rdev->num_crtc = 1;
|
||||
+ else
|
||||
+ rdev->num_crtc = 2;
|
||||
+
|
||||
switch (rdev->family) {
|
||||
case CHIP_R100:
|
||||
case CHIP_RV100:
|
||||
@@ -1017,6 +1024,11 @@ int radeon_asic_init(struct radeon_device *rdev)
|
||||
case CHIP_JUNIPER:
|
||||
case CHIP_CYPRESS:
|
||||
case CHIP_HEMLOCK:
|
||||
+ /* set num crtcs */
|
||||
+ if (rdev->family == CHIP_CEDAR)
|
||||
+ rdev->num_crtc = 4;
|
||||
+ else
|
||||
+ rdev->num_crtc = 6;
|
||||
rdev->asic = &evergreen_asic;
|
||||
break;
|
||||
case CHIP_PALM:
|
||||
@@ -1025,10 +1037,17 @@ int radeon_asic_init(struct radeon_device *rdev)
|
||||
case CHIP_BARTS:
|
||||
case CHIP_TURKS:
|
||||
case CHIP_CAICOS:
|
||||
+ /* set num crtcs */
|
||||
+ if (rdev->family == CHIP_CAICOS)
|
||||
+ rdev->num_crtc = 4;
|
||||
+ else
|
||||
+ rdev->num_crtc = 6;
|
||||
rdev->asic = &btc_asic;
|
||||
break;
|
||||
case CHIP_CAYMAN:
|
||||
rdev->asic = &cayman_asic;
|
||||
+ /* set num crtcs */
|
||||
+ rdev->num_crtc = 6;
|
||||
break;
|
||||
default:
|
||||
/* FIXME: not supported yet */
|
||||
@@ -1040,18 +1059,6 @@ int radeon_asic_init(struct radeon_device *rdev)
|
||||
rdev->asic->set_memory_clock = NULL;
|
||||
}
|
||||
|
||||
- /* set the number of crtcs */
|
||||
- if (rdev->flags & RADEON_SINGLE_CRTC)
|
||||
- rdev->num_crtc = 1;
|
||||
- else {
|
||||
- if (ASIC_IS_DCE41(rdev))
|
||||
- rdev->num_crtc = 2;
|
||||
- else if (ASIC_IS_DCE4(rdev))
|
||||
- rdev->num_crtc = 6;
|
||||
- else
|
||||
- rdev->num_crtc = 2;
|
||||
- }
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
index f116516..ce861ff 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
@@ -1246,6 +1246,10 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
|
||||
}
|
||||
*dcpll = *p1pll;
|
||||
|
||||
+ rdev->clock.max_pixel_clock = le16_to_cpu(firmware_info->info.usMaxPixelClock);
|
||||
+ if (rdev->clock.max_pixel_clock == 0)
|
||||
+ rdev->clock.max_pixel_clock = 40000;
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2308,6 +2312,14 @@ static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev,
|
||||
le16_to_cpu(clock_info->r600.usVDDC);
|
||||
}
|
||||
|
||||
+ /* patch up vddc if necessary */
|
||||
+ if (rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage == 0xff01) {
|
||||
+ u16 vddc;
|
||||
+
|
||||
+ if (radeon_atom_get_max_vddc(rdev, &vddc) == 0)
|
||||
+ rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = vddc;
|
||||
+ }
|
||||
+
|
||||
if (rdev->flags & RADEON_IS_IGP) {
|
||||
/* skip invalid modes */
|
||||
if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0)
|
||||
@@ -2595,6 +2607,10 @@ void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 v
|
||||
if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev))
|
||||
return;
|
||||
|
||||
+ /* 0xff01 is a flag rather then an actual voltage */
|
||||
+ if (voltage_level == 0xff01)
|
||||
+ return;
|
||||
+
|
||||
switch (crev) {
|
||||
case 1:
|
||||
args.v1.ucVoltageType = voltage_type;
|
||||
@@ -2614,7 +2630,35 @@ void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 v
|
||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
}
|
||||
|
||||
+int radeon_atom_get_max_vddc(struct radeon_device *rdev,
|
||||
+ u16 *voltage)
|
||||
+{
|
||||
+ union set_voltage args;
|
||||
+ int index = GetIndexIntoMasterTable(COMMAND, SetVoltage);
|
||||
+ u8 frev, crev;
|
||||
+
|
||||
+ if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev))
|
||||
+ return -EINVAL;
|
||||
|
||||
+ switch (crev) {
|
||||
+ case 1:
|
||||
+ return -EINVAL;
|
||||
+ case 2:
|
||||
+ args.v2.ucVoltageType = SET_VOLTAGE_GET_MAX_VOLTAGE;
|
||||
+ args.v2.ucVoltageMode = 0;
|
||||
+ args.v2.usVoltageLevel = 0;
|
||||
+
|
||||
+ atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
+
|
||||
+ *voltage = le16_to_cpu(args.v2.usVoltageLevel);
|
||||
+ break;
|
||||
+ default:
|
||||
+ DRM_ERROR("Unknown table version %d, %d\n", frev, crev);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
|
||||
{
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_clocks.c b/drivers/gpu/drm/radeon/radeon_clocks.c
|
||||
index 5249af8..2d48e7a 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_clocks.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_clocks.c
|
||||
@@ -117,7 +117,7 @@ static bool __devinit radeon_read_clocks_OF(struct drm_device *dev)
|
||||
p1pll->reference_div = RREG32_PLL(RADEON_PPLL_REF_DIV) & 0x3ff;
|
||||
if (p1pll->reference_div < 2)
|
||||
p1pll->reference_div = 12;
|
||||
- p2pll->reference_div = p1pll->reference_div;
|
||||
+ p2pll->reference_div = p1pll->reference_div;
|
||||
|
||||
/* These aren't in the device-tree */
|
||||
if (rdev->family >= CHIP_R420) {
|
||||
@@ -139,6 +139,8 @@ static bool __devinit radeon_read_clocks_OF(struct drm_device *dev)
|
||||
p2pll->pll_out_min = 12500;
|
||||
p2pll->pll_out_max = 35000;
|
||||
}
|
||||
+ /* not sure what the max should be in all cases */
|
||||
+ rdev->clock.max_pixel_clock = 35000;
|
||||
|
||||
spll->reference_freq = mpll->reference_freq = p1pll->reference_freq;
|
||||
spll->reference_div = mpll->reference_div =
|
||||
@@ -151,7 +153,7 @@ static bool __devinit radeon_read_clocks_OF(struct drm_device *dev)
|
||||
else
|
||||
rdev->clock.default_sclk =
|
||||
radeon_legacy_get_engine_clock(rdev);
|
||||
-
|
||||
+
|
||||
val = of_get_property(dp, "ATY,MCLK", NULL);
|
||||
if (val && *val)
|
||||
rdev->clock.default_mclk = (*val) / 10;
|
||||
@@ -160,7 +162,7 @@ static bool __devinit radeon_read_clocks_OF(struct drm_device *dev)
|
||||
radeon_legacy_get_memory_clock(rdev);
|
||||
|
||||
DRM_INFO("Using device-tree clock info\n");
|
||||
-
|
||||
+
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
|
||||
index 089ab92..8a53691 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_combios.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
|
||||
@@ -833,6 +833,11 @@ bool radeon_combios_get_clock_info(struct drm_device *dev)
|
||||
rdev->clock.default_sclk = sclk;
|
||||
rdev->clock.default_mclk = mclk;
|
||||
|
||||
+ if (RBIOS32(pll_info + 0x16))
|
||||
+ rdev->clock.max_pixel_clock = RBIOS32(pll_info + 0x16);
|
||||
+ else
|
||||
+ rdev->clock.max_pixel_clock = 35000; /* might need something asic specific */
|
||||
+
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
index a186673..33cb72b 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
@@ -621,8 +621,14 @@ static int radeon_vga_get_modes(struct drm_connector *connector)
|
||||
static int radeon_vga_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
+ struct drm_device *dev = connector->dev;
|
||||
+ struct radeon_device *rdev = dev->dev_private;
|
||||
+
|
||||
/* XXX check mode bandwidth */
|
||||
- /* XXX verify against max DAC output frequency */
|
||||
+
|
||||
+ if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
|
||||
+ return MODE_CLOCK_HIGH;
|
||||
+
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
@@ -1010,6 +1016,11 @@ static int radeon_dvi_mode_valid(struct drm_connector *connector,
|
||||
} else
|
||||
return MODE_CLOCK_HIGH;
|
||||
}
|
||||
+
|
||||
+ /* check against the max pixel clock */
|
||||
+ if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
|
||||
+ return MODE_CLOCK_HIGH;
|
||||
+
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
|
||||
index 207d43f..8a64a3b 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_device.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_device.c
|
||||
@@ -213,6 +213,8 @@ int radeon_wb_init(struct radeon_device *rdev)
|
||||
return r;
|
||||
}
|
||||
|
||||
+ /* clear wb memory */
|
||||
+ memset((char *)rdev->wb.wb, 0, RADEON_GPU_PAGE_SIZE);
|
||||
/* disable event_write fences */
|
||||
rdev->wb.use_event = false;
|
||||
/* disabled via module param */
|
||||
@@ -752,6 +754,7 @@ int radeon_device_init(struct radeon_device *rdev,
|
||||
dma_bits = rdev->need_dma32 ? 32 : 40;
|
||||
r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits));
|
||||
if (r) {
|
||||
+ rdev->need_dma32 = true;
|
||||
printk(KERN_WARNING "radeon: No suitable DMA available.\n");
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
index b427488..e2a1c7d 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
@@ -994,9 +994,10 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
||||
break;
|
||||
}
|
||||
|
||||
- if (is_dp)
|
||||
+ if (is_dp) {
|
||||
args.v2.acConfig.fCoherentMode = 1;
|
||||
- else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
|
||||
+ args.v2.acConfig.fDPConnector = 1;
|
||||
+ } else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
|
||||
if (dig->coherent_mode)
|
||||
args.v2.acConfig.fCoherentMode = 1;
|
||||
if (radeon_encoder->pixel_clock > 165000)
|
||||
@@ -1294,7 +1295,11 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||
if (is_dig) {
|
||||
switch (mode) {
|
||||
case DRM_MODE_DPMS_ON:
|
||||
- atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
|
||||
+ /* some early dce3.2 boards have a bug in their transmitter control table */
|
||||
+ if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730))
|
||||
+ atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
|
||||
+ else
|
||||
+ atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
|
||||
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
|
||||
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
|
||||
index 2b0ee62..3285de1 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_fence.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
|
||||
@@ -40,6 +40,35 @@
|
||||
#include "radeon.h"
|
||||
#include "radeon_trace.h"
|
||||
|
||||
+static void radeon_fence_write(struct radeon_device *rdev, u32 seq)
|
||||
+{
|
||||
+ if (rdev->wb.enabled) {
|
||||
+ u32 scratch_index;
|
||||
+ if (rdev->wb.use_event)
|
||||
+ scratch_index = R600_WB_EVENT_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
+ else
|
||||
+ scratch_index = RADEON_WB_SCRATCH_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
+ rdev->wb.wb[scratch_index/4] = cpu_to_le32(seq);;
|
||||
+ } else
|
||||
+ WREG32(rdev->fence_drv.scratch_reg, seq);
|
||||
+}
|
||||
+
|
||||
+static u32 radeon_fence_read(struct radeon_device *rdev)
|
||||
+{
|
||||
+ u32 seq;
|
||||
+
|
||||
+ if (rdev->wb.enabled) {
|
||||
+ u32 scratch_index;
|
||||
+ if (rdev->wb.use_event)
|
||||
+ scratch_index = R600_WB_EVENT_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
+ else
|
||||
+ scratch_index = RADEON_WB_SCRATCH_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
+ seq = le32_to_cpu(rdev->wb.wb[scratch_index/4]);
|
||||
+ } else
|
||||
+ seq = RREG32(rdev->fence_drv.scratch_reg);
|
||||
+ return seq;
|
||||
+}
|
||||
+
|
||||
int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence)
|
||||
{
|
||||
unsigned long irq_flags;
|
||||
@@ -50,12 +79,12 @@ int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence)
|
||||
return 0;
|
||||
}
|
||||
fence->seq = atomic_add_return(1, &rdev->fence_drv.seq);
|
||||
- if (!rdev->cp.ready) {
|
||||
+ if (!rdev->cp.ready)
|
||||
/* FIXME: cp is not running assume everythings is done right
|
||||
* away
|
||||
*/
|
||||
- WREG32(rdev->fence_drv.scratch_reg, fence->seq);
|
||||
- } else
|
||||
+ radeon_fence_write(rdev, fence->seq);
|
||||
+ else
|
||||
radeon_fence_ring_emit(rdev, fence);
|
||||
|
||||
trace_radeon_fence_emit(rdev->ddev, fence->seq);
|
||||
@@ -74,15 +103,7 @@ static bool radeon_fence_poll_locked(struct radeon_device *rdev)
|
||||
bool wake = false;
|
||||
unsigned long cjiffies;
|
||||
|
||||
- if (rdev->wb.enabled) {
|
||||
- u32 scratch_index;
|
||||
- if (rdev->wb.use_event)
|
||||
- scratch_index = R600_WB_EVENT_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
- else
|
||||
- scratch_index = RADEON_WB_SCRATCH_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
|
||||
- seq = le32_to_cpu(rdev->wb.wb[scratch_index/4]);
|
||||
- } else
|
||||
- seq = RREG32(rdev->fence_drv.scratch_reg);
|
||||
+ seq = radeon_fence_read(rdev);
|
||||
if (seq != rdev->fence_drv.last_seq) {
|
||||
rdev->fence_drv.last_seq = seq;
|
||||
rdev->fence_drv.last_jiffies = jiffies;
|
||||
@@ -253,7 +274,7 @@ retry:
|
||||
r = radeon_gpu_reset(rdev);
|
||||
if (r)
|
||||
return r;
|
||||
- WREG32(rdev->fence_drv.scratch_reg, fence->seq);
|
||||
+ radeon_fence_write(rdev, fence->seq);
|
||||
rdev->gpu_lockup = false;
|
||||
}
|
||||
timeout = RADEON_FENCE_JIFFIES_TIMEOUT;
|
||||
@@ -353,7 +374,7 @@ int radeon_fence_driver_init(struct radeon_device *rdev)
|
||||
write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
|
||||
return r;
|
||||
}
|
||||
- WREG32(rdev->fence_drv.scratch_reg, 0);
|
||||
+ radeon_fence_write(rdev, 0);
|
||||
atomic_set(&rdev->fence_drv.seq, 0);
|
||||
INIT_LIST_HEAD(&rdev->fence_drv.created);
|
||||
INIT_LIST_HEAD(&rdev->fence_drv.emited);
|
||||
@@ -393,7 +414,7 @@ static int radeon_debugfs_fence_info(struct seq_file *m, void *data)
|
||||
struct radeon_fence *fence;
|
||||
|
||||
seq_printf(m, "Last signaled fence 0x%08X\n",
|
||||
- RREG32(rdev->fence_drv.scratch_reg));
|
||||
+ radeon_fence_read(rdev));
|
||||
if (!list_empty(&rdev->fence_drv.emited)) {
|
||||
fence = list_entry(rdev->fence_drv.emited.prev,
|
||||
struct radeon_fence, list);
|
||||
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
|
||||
index 114e5cc..cd9578b 100644
|
||||
--- a/drivers/gpu/drm/radeon/rv770.c
|
||||
+++ b/drivers/gpu/drm/radeon/rv770.c
|
||||
@@ -105,6 +105,9 @@ void rv770_pm_misc(struct radeon_device *rdev)
|
||||
struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
|
||||
|
||||
if ((voltage->type == VOLTAGE_SW) && voltage->voltage) {
|
||||
+ /* 0xff01 is a flag rather then an actual voltage */
|
||||
+ if (voltage->voltage == 0xff01)
|
||||
+ return;
|
||||
if (voltage->voltage != rdev->pm.current_vddc) {
|
||||
radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
|
||||
rdev->pm.current_vddc = voltage->voltage;
|
|
@ -1,40 +0,0 @@
|
|||
From e40ec45d67d32ce900dd6f2242675979593db18c Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Tue, 18 Jan 2011 11:04:03 +1000
|
||||
Subject: [PATCH] drm/ttm: call driver move_notify() when doing system->tt bo moves
|
||||
|
||||
Nouveau doesn't have enough information at ttm_backend_func.bind() time
|
||||
to implement things like tiled GART, or to keep a buffer at a constant
|
||||
address in the GPU virtual address space no matter where in physical
|
||||
memory it's placed.
|
||||
|
||||
To resolve this, nouveau will handle binding of all buffers to the GPU
|
||||
itself from the move_notify() hook. This commit ensures it's called
|
||||
for all buffer moves.
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/ttm/ttm_bo.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
|
||||
index af61fc2..0b6a55a 100644
|
||||
--- a/drivers/gpu/drm/ttm/ttm_bo.c
|
||||
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
|
||||
@@ -406,11 +406,12 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
|
||||
}
|
||||
|
||||
if (bo->mem.mem_type == TTM_PL_SYSTEM) {
|
||||
+ if (bdev->driver->move_notify)
|
||||
+ bdev->driver->move_notify(bo, mem);
|
||||
bo->mem = *mem;
|
||||
mem->mm_node = NULL;
|
||||
goto moved;
|
||||
}
|
||||
-
|
||||
}
|
||||
|
||||
if (bdev->driver->move_notify)
|
||||
--
|
||||
1.7.4.2
|
||||
|
|
@ -1,217 +0,0 @@
|
|||
Fix up efifb so it works properly on the 11" Macbook Air. Upstream in .38?
|
||||
|
||||
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
|
||||
index 70477c2..476ffb1 100644
|
||||
--- a/drivers/video/efifb.c
|
||||
+++ b/drivers/video/efifb.c
|
||||
@@ -53,6 +53,7 @@ enum {
|
||||
M_MB_7_1, /* MacBook, 7th rev. */
|
||||
M_MB_SR, /* MacBook, 2nd gen, (Santa Rosa) */
|
||||
M_MBA, /* MacBook Air */
|
||||
+ M_MBA_3, /* Macbook Air, 3rd rev */
|
||||
M_MBP, /* MacBook Pro */
|
||||
M_MBP_2, /* MacBook Pro 2nd gen */
|
||||
M_MBP_2_2, /* MacBook Pro 2,2nd gen */
|
||||
@@ -67,40 +68,49 @@ enum {
|
||||
M_UNKNOWN /* placeholder */
|
||||
};
|
||||
|
||||
+#define OVERRIDE_NONE 0x0
|
||||
+#define OVERRIDE_BASE 0x1
|
||||
+#define OVERRIDE_STRIDE 0x2
|
||||
+#define OVERRIDE_HEIGHT 0x4
|
||||
+#define OVERRIDE_WIDTH 0x8
|
||||
+
|
||||
static struct efifb_dmi_info {
|
||||
char *optname;
|
||||
unsigned long base;
|
||||
int stride;
|
||||
int width;
|
||||
int height;
|
||||
+ int flags;
|
||||
} dmi_list[] __initdata = {
|
||||
- [M_I17] = { "i17", 0x80010000, 1472 * 4, 1440, 900 },
|
||||
- [M_I20] = { "i20", 0x80010000, 1728 * 4, 1680, 1050 }, /* guess */
|
||||
- [M_I20_SR] = { "imac7", 0x40010000, 1728 * 4, 1680, 1050 },
|
||||
- [M_I24] = { "i24", 0x80010000, 2048 * 4, 1920, 1200 }, /* guess */
|
||||
- [M_I24_8_1] = { "imac8", 0xc0060000, 2048 * 4, 1920, 1200 },
|
||||
- [M_I24_10_1] = { "imac10", 0xc0010000, 2048 * 4, 1920, 1080 },
|
||||
- [M_I27_11_1] = { "imac11", 0xc0010000, 2560 * 4, 2560, 1440 },
|
||||
- [M_MINI]= { "mini", 0x80000000, 2048 * 4, 1024, 768 },
|
||||
- [M_MINI_3_1] = { "mini31", 0x40010000, 1024 * 4, 1024, 768 },
|
||||
- [M_MINI_4_1] = { "mini41", 0xc0010000, 2048 * 4, 1920, 1200 },
|
||||
- [M_MB] = { "macbook", 0x80000000, 2048 * 4, 1280, 800 },
|
||||
- [M_MB_5_1] = { "macbook51", 0x80010000, 2048 * 4, 1280, 800 },
|
||||
- [M_MB_6_1] = { "macbook61", 0x80010000, 2048 * 4, 1280, 800 },
|
||||
- [M_MB_7_1] = { "macbook71", 0x80010000, 2048 * 4, 1280, 800 },
|
||||
- [M_MBA] = { "mba", 0x80000000, 2048 * 4, 1280, 800 },
|
||||
- [M_MBP] = { "mbp", 0x80010000, 1472 * 4, 1440, 900 },
|
||||
- [M_MBP_2] = { "mbp2", 0, 0, 0, 0 }, /* placeholder */
|
||||
- [M_MBP_2_2] = { "mbp22", 0x80010000, 1472 * 4, 1440, 900 },
|
||||
- [M_MBP_SR] = { "mbp3", 0x80030000, 2048 * 4, 1440, 900 },
|
||||
- [M_MBP_4] = { "mbp4", 0xc0060000, 2048 * 4, 1920, 1200 },
|
||||
- [M_MBP_5_1] = { "mbp51", 0xc0010000, 2048 * 4, 1440, 900 },
|
||||
- [M_MBP_5_2] = { "mbp52", 0xc0010000, 2048 * 4, 1920, 1200 },
|
||||
- [M_MBP_5_3] = { "mbp53", 0xd0010000, 2048 * 4, 1440, 900 },
|
||||
- [M_MBP_6_1] = { "mbp61", 0x90030000, 2048 * 4, 1920, 1200 },
|
||||
- [M_MBP_6_2] = { "mbp62", 0x90030000, 2048 * 4, 1680, 1050 },
|
||||
- [M_MBP_7_1] = { "mbp71", 0xc0010000, 2048 * 4, 1280, 800 },
|
||||
- [M_UNKNOWN] = { NULL, 0, 0, 0, 0 }
|
||||
+ [M_I17] = { "i17", 0x80010000, 1472 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_I20] = { "i20", 0x80010000, 1728 * 4, 1680, 1050, OVERRIDE_NONE }, /* guess */
|
||||
+ [M_I20_SR] = { "imac7", 0x40010000, 1728 * 4, 1680, 1050, OVERRIDE_NONE },
|
||||
+ [M_I24] = { "i24", 0x80010000, 2048 * 4, 1920, 1200, OVERRIDE_NONE }, /* guess */
|
||||
+ [M_I24_8_1] = { "imac8", 0xc0060000, 2048 * 4, 1920, 1200, OVERRIDE_NONE },
|
||||
+ [M_I24_10_1] = { "imac10", 0xc0010000, 2048 * 4, 1920, 1080, OVERRIDE_NONE },
|
||||
+ [M_I27_11_1] = { "imac11", 0xc0010000, 2560 * 4, 2560, 1440, OVERRIDE_NONE },
|
||||
+ [M_MINI]= { "mini", 0x80000000, 2048 * 4, 1024, 768, OVERRIDE_NONE },
|
||||
+ [M_MINI_3_1] = { "mini31", 0x40010000, 1024 * 4, 1024, 768, OVERRIDE_NONE },
|
||||
+ [M_MINI_4_1] = { "mini41", 0xc0010000, 2048 * 4, 1920, 1200, OVERRIDE_NONE },
|
||||
+ [M_MB] = { "macbook", 0x80000000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ [M_MB_5_1] = { "macbook51", 0x80010000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ [M_MB_6_1] = { "macbook61", 0x80010000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ [M_MB_7_1] = { "macbook71", 0x80010000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ [M_MBA] = { "mba", 0x80000000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ /* 11" Macbook Air 3,1 passes the wrong stride */
|
||||
+ [M_MBA_3] = { "mba3", 0, 2048 * 4, 0, 0, OVERRIDE_STRIDE },
|
||||
+ [M_MBP] = { "mbp", 0x80010000, 1472 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_MBP_2] = { "mbp2", 0, 0, 0, 0, OVERRIDE_NONE }, /* placeholder */
|
||||
+ [M_MBP_2_2] = { "mbp22", 0x80010000, 1472 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_MBP_SR] = { "mbp3", 0x80030000, 2048 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_MBP_4] = { "mbp4", 0xc0060000, 2048 * 4, 1920, 1200, OVERRIDE_NONE },
|
||||
+ [M_MBP_5_1] = { "mbp51", 0xc0010000, 2048 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_MBP_5_2] = { "mbp52", 0xc0010000, 2048 * 4, 1920, 1200, OVERRIDE_NONE },
|
||||
+ [M_MBP_5_3] = { "mbp53", 0xd0010000, 2048 * 4, 1440, 900, OVERRIDE_NONE },
|
||||
+ [M_MBP_6_1] = { "mbp61", 0x90030000, 2048 * 4, 1920, 1200, OVERRIDE_NONE },
|
||||
+ [M_MBP_6_2] = { "mbp62", 0x90030000, 2048 * 4, 1680, 1050, OVERRIDE_NONE },
|
||||
+ [M_MBP_7_1] = { "mbp71", 0xc0010000, 2048 * 4, 1280, 800, OVERRIDE_NONE },
|
||||
+ [M_UNKNOWN] = { NULL, 0, 0, 0, 0, OVERRIDE_NONE }
|
||||
};
|
||||
|
||||
static int set_system(const struct dmi_system_id *id);
|
||||
@@ -138,6 +148,7 @@ static const struct dmi_system_id dmi_system_table[] __initconst = {
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Inc.", "MacBook6,1", M_MB_6_1),
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Inc.", "MacBook7,1", M_MB_7_1),
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Inc.", "MacBookAir1,1", M_MBA),
|
||||
+ EFIFB_DMI_SYSTEM_ID("Apple Inc.", "MacBookAir3,1", M_MBA_3),
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Computer, Inc.", "MacBookPro1,1", M_MBP),
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Computer, Inc.", "MacBookPro2,1", M_MBP_2),
|
||||
EFIFB_DMI_SYSTEM_ID("Apple Computer, Inc.", "MacBookPro2,2", M_MBP_2_2),
|
||||
@@ -154,16 +165,22 @@ static const struct dmi_system_id dmi_system_table[] __initconst = {
|
||||
{},
|
||||
};
|
||||
|
||||
+#define choose_value(dmivalue, fwvalue, field, flags) ({ \
|
||||
+ typeof(fwvalue) _ret_ = fwvalue; \
|
||||
+ if ((flags) & (field)) \
|
||||
+ _ret_ = dmivalue; \
|
||||
+ else if ((fwvalue) == 0) \
|
||||
+ _ret_ = dmivalue; \
|
||||
+ _ret_; \
|
||||
+ })
|
||||
+
|
||||
static int set_system(const struct dmi_system_id *id)
|
||||
{
|
||||
struct efifb_dmi_info *info = id->driver_data;
|
||||
- if (info->base == 0)
|
||||
- return 0;
|
||||
|
||||
- printk(KERN_INFO "efifb: dmi detected %s - framebuffer at %p "
|
||||
- "(%dx%d, stride %d)\n", id->ident,
|
||||
- (void *)info->base, info->width, info->height,
|
||||
- info->stride);
|
||||
+ if (info->base == 0 && info->height == 0 && info->width == 0
|
||||
+ && info->stride == 0)
|
||||
+ return 0;
|
||||
|
||||
/* Trust the bootloader over the DMI tables */
|
||||
if (screen_info.lfb_base == 0) {
|
||||
@@ -171,40 +188,47 @@ static int set_system(const struct dmi_system_id *id)
|
||||
struct pci_dev *dev = NULL;
|
||||
int found_bar = 0;
|
||||
#endif
|
||||
- screen_info.lfb_base = info->base;
|
||||
+ if (info->base) {
|
||||
+ screen_info.lfb_base = choose_value(info->base,
|
||||
+ screen_info.lfb_base, OVERRIDE_BASE,
|
||||
+ info->flags);
|
||||
|
||||
#if defined(CONFIG_PCI)
|
||||
- /* make sure that the address in the table is actually on a
|
||||
- * VGA device's PCI BAR */
|
||||
-
|
||||
- for_each_pci_dev(dev) {
|
||||
- int i;
|
||||
- if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
|
||||
- continue;
|
||||
- for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
|
||||
- resource_size_t start, end;
|
||||
-
|
||||
- start = pci_resource_start(dev, i);
|
||||
- if (start == 0)
|
||||
- break;
|
||||
- end = pci_resource_end(dev, i);
|
||||
- if (screen_info.lfb_base >= start &&
|
||||
- screen_info.lfb_base < end) {
|
||||
- found_bar = 1;
|
||||
+ /* make sure that the address in the table is actually
|
||||
+ * on a VGA device's PCI BAR */
|
||||
+
|
||||
+ for_each_pci_dev(dev) {
|
||||
+ int i;
|
||||
+ if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
|
||||
+ continue;
|
||||
+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
|
||||
+ resource_size_t start, end;
|
||||
+
|
||||
+ start = pci_resource_start(dev, i);
|
||||
+ if (start == 0)
|
||||
+ break;
|
||||
+ end = pci_resource_end(dev, i);
|
||||
+ if (screen_info.lfb_base >= start &&
|
||||
+ screen_info.lfb_base < end) {
|
||||
+ found_bar = 1;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
- }
|
||||
- if (!found_bar)
|
||||
- screen_info.lfb_base = 0;
|
||||
+ if (!found_bar)
|
||||
+ screen_info.lfb_base = 0;
|
||||
#endif
|
||||
+ }
|
||||
}
|
||||
if (screen_info.lfb_base) {
|
||||
- if (screen_info.lfb_linelength == 0)
|
||||
- screen_info.lfb_linelength = info->stride;
|
||||
- if (screen_info.lfb_width == 0)
|
||||
- screen_info.lfb_width = info->width;
|
||||
- if (screen_info.lfb_height == 0)
|
||||
- screen_info.lfb_height = info->height;
|
||||
+ screen_info.lfb_linelength = choose_value(info->stride,
|
||||
+ screen_info.lfb_linelength, OVERRIDE_STRIDE,
|
||||
+ info->flags);
|
||||
+ screen_info.lfb_width = choose_value(info->width,
|
||||
+ screen_info.lfb_width, OVERRIDE_WIDTH,
|
||||
+ info->flags);
|
||||
+ screen_info.lfb_height = choose_value(info->height,
|
||||
+ screen_info.lfb_height, OVERRIDE_HEIGHT,
|
||||
+ info->flags);
|
||||
if (screen_info.orig_video_isVGA == 0)
|
||||
screen_info.orig_video_isVGA = VIDEO_TYPE_EFI;
|
||||
} else {
|
||||
@@ -214,6 +238,13 @@ static int set_system(const struct dmi_system_id *id)
|
||||
screen_info.orig_video_isVGA = 0;
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+ printk(KERN_INFO "efifb: dmi detected %s - framebuffer at %p "
|
||||
+ "(%dx%d, stride %d)\n", id->ident,
|
||||
+ (void *)screen_info.lfb_base, screen_info.lfb_width,
|
||||
+ screen_info.lfb_height, screen_info.lfb_linelength);
|
||||
+
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
commit bfe159a51203c15d23cb3158fffdc25ec4b4dda1
|
||||
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
|
||||
Date: Thu Jul 7 15:45:40 2011 -0500
|
||||
|
||||
[SCSI] fix crash in scsi_dispatch_cmd()
|
||||
|
||||
USB surprise removal of sr is triggering an oops in
|
||||
scsi_dispatch_command(). What seems to be happening is that USB is
|
||||
hanging on to a queue reference until the last close of the upper
|
||||
device, so the crash is caused by surprise remove of a mounted CD
|
||||
followed by attempted unmount.
|
||||
|
||||
The problem is that USB doesn't issue its final commands as part of
|
||||
the SCSI teardown path, but on last close when the block queue is long
|
||||
gone. The long term fix is probably to make sr do the teardown in the
|
||||
same way as sd (so remove all the lower bits on ejection, but keep the
|
||||
upper disk alive until last close of user space). However, the
|
||||
current oops can be simply fixed by not allowing any commands to be
|
||||
sent to a dead queue.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
|
||||
|
||||
diff --git a/block/blk-core.c b/block/blk-core.c
|
||||
index d2f8f40..1d49e1c 100644
|
||||
--- a/block/blk-core.c
|
||||
+++ b/block/blk-core.c
|
||||
@@ -839,6 +839,9 @@ struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask)
|
||||
{
|
||||
struct request *rq;
|
||||
|
||||
+ if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
|
||||
+ return NULL;
|
||||
+
|
||||
BUG_ON(rw != READ && rw != WRITE);
|
||||
|
||||
spin_lock_irq(q->queue_lock);
|
||||
diff --git a/block/blk-exec.c b/block/blk-exec.c
|
||||
index 8a0e7ec..a1ebceb 100644
|
||||
--- a/block/blk-exec.c
|
||||
+++ b/block/blk-exec.c
|
||||
@@ -50,6 +50,13 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,
|
||||
{
|
||||
int where = at_head ? ELEVATOR_INSERT_FRONT : ELEVATOR_INSERT_BACK;
|
||||
|
||||
+ if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags))) {
|
||||
+ rq->errors = -ENXIO;
|
||||
+ if (rq->end_io)
|
||||
+ rq->end_io(rq, rq->errors);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
rq->rq_disk = bd_disk;
|
||||
rq->end_io = done;
|
||||
WARN_ON(irqs_disabled());
|
||||
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
|
||||
index ec1803a..28d9c9d 100644
|
||||
--- a/drivers/scsi/scsi_lib.c
|
||||
+++ b/drivers/scsi/scsi_lib.c
|
||||
@@ -213,6 +213,8 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int ret = DRIVER_ERROR << 24;
|
||||
|
||||
req = blk_get_request(sdev->request_queue, write, __GFP_WAIT);
|
||||
+ if (!req)
|
||||
+ return ret;
|
||||
|
||||
if (bufflen && blk_rq_map_kern(sdev->request_queue, req,
|
||||
buffer, bufflen, __GFP_WAIT))
|
|
@ -1,78 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@enac.fr>
|
||||
Date: Thu, 19 May 2011 09:37:29 +0000 (+0200)
|
||||
Subject: HID: hid-multitouch: add support for Elo TouchSystems 2515 IntelliTouch Plus
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjikos%2Fhid.git;a=commitdiff_plain;h=c04abeeff9d76a703cac1e6d312853b0fc8136f5
|
||||
|
||||
HID: hid-multitouch: add support for Elo TouchSystems 2515 IntelliTouch Plus
|
||||
|
||||
This patch adds support for Elo TouchSystems 2515 IntelliTouch Plus
|
||||
that can be found in Lenovo A700 all-in-one.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
|
||||
Tested-by: Bastien Nocera <hadess@hadess.net>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
|
||||
--- a/drivers/hid/Kconfig
|
||||
+++ b/drivers/hid/Kconfig
|
||||
@@ -309,6 +309,7 @@ config HID_MULTITOUCH
|
||||
|
||||
Say Y here if you have one of the following devices:
|
||||
- Cypress TrueTouch panels
|
||||
+ - Elo TouchSystems IntelliTouch Plus panels
|
||||
- Hanvon dual touch panels
|
||||
- Pixcir dual touch panels
|
||||
- 'Sensing Win7-TwoFinger' panel by GeneralTouch
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -1335,6 +1335,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2515) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -219,6 +219,7 @@
|
||||
#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34
|
||||
|
||||
#define USB_VENDOR_ID_ELO 0x04E7
|
||||
+#define USB_DEVICE_ID_ELO_TS2515 0x0022
|
||||
#define USB_DEVICE_ID_ELO_TS2700 0x0020
|
||||
|
||||
#define USB_VENDOR_ID_EMS 0x2006
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -69,6 +69,7 @@ struct mt_class {
|
||||
#define MT_CLS_DUAL1 2
|
||||
#define MT_CLS_DUAL2 3
|
||||
#define MT_CLS_CYPRESS 4
|
||||
+#define MT_CLS_DUAL_NSMU_CONTACTID 5
|
||||
|
||||
/*
|
||||
* these device-dependent functions determine what slot corresponds
|
||||
@@ -119,6 +120,11 @@ struct mt_class mt_classes[] = {
|
||||
MT_QUIRK_CYPRESS,
|
||||
.maxcontacts = 10 },
|
||||
|
||||
+ { .name = MT_CLS_DUAL_NSMU_CONTACTID,
|
||||
+ .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
|
||||
+ MT_QUIRK_SLOT_IS_CONTACTID,
|
||||
+ .maxcontacts = 2 },
|
||||
+
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -465,6 +471,11 @@ static const struct hid_device_id mt_devices[] = {
|
||||
HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
|
||||
USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
|
||||
|
||||
+ /* Elo TouchSystems IntelliTouch Plus panel */
|
||||
+ { .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
|
||||
+ HID_USB_DEVICE(USB_VENDOR_ID_ELO,
|
||||
+ USB_DEVICE_ID_ELO_TS2515) },
|
||||
+
|
||||
/* GeneralTouch panel */
|
||||
{ .driver_data = MT_CLS_DUAL2,
|
||||
HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
|
|
@ -1,46 +0,0 @@
|
|||
commit f41a52d3010579949a3b9fd76783120d9643b60b
|
||||
Author: Rafi Rubin <rafi@seas.upenn.edu>
|
||||
Date: Tue Mar 8 00:24:29 2011 -0500
|
||||
|
||||
HID: ntrig don't dereference unclaimed hidinput
|
||||
|
||||
Check before dereferencing field->hidinput to fix a reported invalid
|
||||
deference bug.
|
||||
|
||||
Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
|
||||
diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c
|
||||
index beb4034..a93e58c 100644
|
||||
--- a/drivers/hid/hid-ntrig.c
|
||||
+++ b/drivers/hid/hid-ntrig.c
|
||||
@@ -539,8 +539,19 @@ static int ntrig_input_mapped(struct hid_device *hdev, struct hid_input *hi,
|
||||
static int ntrig_event (struct hid_device *hid, struct hid_field *field,
|
||||
struct hid_usage *usage, __s32 value)
|
||||
{
|
||||
- struct input_dev *input = field->hidinput->input;
|
||||
struct ntrig_data *nd = hid_get_drvdata(hid);
|
||||
+ struct input_dev *input;
|
||||
+
|
||||
+ /* Skip processing if not a claimed input */
|
||||
+ if (!(hid->claimed & HID_CLAIMED_INPUT))
|
||||
+ goto not_claimed_input;
|
||||
+
|
||||
+ /* This function is being called before the structures are fully
|
||||
+ * initialized */
|
||||
+ if(!(field->hidinput && field->hidinput->input))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ input = field->hidinput->input;
|
||||
|
||||
/* No special handling needed for the pen */
|
||||
if (field->application == HID_DG_PEN)
|
||||
@@ -810,6 +821,8 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field,
|
||||
}
|
||||
}
|
||||
|
||||
+not_claimed_input:
|
||||
+
|
||||
/* we have handled the hidinput part, now remains hiddev */
|
||||
if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_hid_event)
|
||||
hid->hiddev_hid_event(hid, field, usage, value);
|
|
@ -1,145 +0,0 @@
|
|||
From 785465d9cffd65b5a69dd2f465d2f7c917713220 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Mon, 18 Oct 2010 13:30:39 -0400
|
||||
Subject: [PATCH] ima: provide a toggle to disable it entirely
|
||||
|
||||
Signed-off-by: Kyle McMartin <kyle@redhat.com>
|
||||
---
|
||||
security/integrity/ima/ima.h | 1 +
|
||||
security/integrity/ima/ima_iint.c | 9 +++++++++
|
||||
security/integrity/ima/ima_main.c | 24 +++++++++++++++++++++---
|
||||
3 files changed, 31 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
|
||||
index 3fbcd1d..65c3977 100644
|
||||
--- a/security/integrity/ima/ima.h
|
||||
+++ b/security/integrity/ima/ima.h
|
||||
@@ -37,6 +37,7 @@ enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8 };
|
||||
/* set during initialization */
|
||||
extern int iint_initialized;
|
||||
extern int ima_initialized;
|
||||
+extern int ima_enabled;
|
||||
extern int ima_used_chip;
|
||||
extern char *ima_hash;
|
||||
|
||||
diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c
|
||||
index afba4ae..3d191ef 100644
|
||||
--- a/security/integrity/ima/ima_iint.c
|
||||
+++ b/security/integrity/ima/ima_iint.c
|
||||
@@ -54,6 +54,9 @@ int ima_inode_alloc(struct inode *inode)
|
||||
struct ima_iint_cache *iint = NULL;
|
||||
int rc = 0;
|
||||
|
||||
+ if (!ima_enabled)
|
||||
+ return 0;
|
||||
+
|
||||
iint = kmem_cache_alloc(iint_cache, GFP_NOFS);
|
||||
if (!iint)
|
||||
return -ENOMEM;
|
||||
@@ -116,6 +119,9 @@ void ima_inode_free(struct inode *inode)
|
||||
{
|
||||
struct ima_iint_cache *iint;
|
||||
|
||||
+ if (!ima_enabled)
|
||||
+ return;
|
||||
+
|
||||
spin_lock(&ima_iint_lock);
|
||||
iint = radix_tree_delete(&ima_iint_store, (unsigned long)inode);
|
||||
spin_unlock(&ima_iint_lock);
|
||||
@@ -139,6 +145,9 @@ static void init_once(void *foo)
|
||||
|
||||
static int __init ima_iintcache_init(void)
|
||||
{
|
||||
+ if (!ima_enabled)
|
||||
+ return 0;
|
||||
+
|
||||
iint_cache =
|
||||
kmem_cache_create("iint_cache", sizeof(struct ima_iint_cache), 0,
|
||||
SLAB_PANIC, init_once);
|
||||
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
|
||||
index e662b89..6e91905 100644
|
||||
--- a/security/integrity/ima/ima_main.c
|
||||
+++ b/security/integrity/ima/ima_main.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "ima.h"
|
||||
|
||||
int ima_initialized;
|
||||
+int ima_enabled;
|
||||
|
||||
char *ima_hash = "sha1";
|
||||
static int __init hash_setup(char *str)
|
||||
@@ -36,6 +37,14 @@ static int __init hash_setup(char *str)
|
||||
}
|
||||
__setup("ima_hash=", hash_setup);
|
||||
|
||||
+static int __init ima_enable(char *str)
|
||||
+{
|
||||
+ if (strncmp(str, "on", 2) == 0)
|
||||
+ ima_enabled = 1;
|
||||
+ return 1;
|
||||
+}
|
||||
+__setup("ima=", ima_enable);
|
||||
+
|
||||
struct ima_imbalance {
|
||||
struct hlist_node node;
|
||||
unsigned long fsmagic;
|
||||
@@ -148,7 +157,7 @@ void ima_counts_get(struct file *file)
|
||||
struct ima_iint_cache *iint;
|
||||
int rc;
|
||||
|
||||
- if (!iint_initialized || !S_ISREG(inode->i_mode))
|
||||
+ if (!ima_enabled || !iint_initialized || !S_ISREG(inode->i_mode))
|
||||
return;
|
||||
iint = ima_iint_find_get(inode);
|
||||
if (!iint)
|
||||
@@ -215,7 +224,7 @@ void ima_file_free(struct file *file)
|
||||
struct inode *inode = file->f_dentry->d_inode;
|
||||
struct ima_iint_cache *iint;
|
||||
|
||||
- if (!iint_initialized || !S_ISREG(inode->i_mode))
|
||||
+ if (!ima_enabled || !iint_initialized || !S_ISREG(inode->i_mode))
|
||||
return;
|
||||
iint = ima_iint_find_get(inode);
|
||||
if (!iint)
|
||||
@@ -269,7 +278,7 @@ int ima_file_mmap(struct file *file, unsigned long prot)
|
||||
{
|
||||
int rc;
|
||||
|
||||
- if (!file)
|
||||
+ if (!ima_enabled || !file)
|
||||
return 0;
|
||||
if (prot & PROT_EXEC)
|
||||
rc = process_measurement(file, file->f_dentry->d_name.name,
|
||||
@@ -294,6 +303,9 @@ int ima_bprm_check(struct linux_binprm *bprm)
|
||||
{
|
||||
int rc;
|
||||
|
||||
+ if (!ima_enabled)
|
||||
+ return 0;
|
||||
+
|
||||
rc = process_measurement(bprm->file, bprm->filename,
|
||||
MAY_EXEC, BPRM_CHECK);
|
||||
return 0;
|
||||
@@ -313,6 +325,9 @@ int ima_file_check(struct file *file, int mask)
|
||||
{
|
||||
int rc;
|
||||
|
||||
+ if (!ima_enabled)
|
||||
+ return 0;
|
||||
+
|
||||
rc = process_measurement(file, file->f_dentry->d_name.name,
|
||||
mask & (MAY_READ | MAY_WRITE | MAY_EXEC),
|
||||
FILE_CHECK);
|
||||
@@ -324,6 +339,9 @@ static int __init init_ima(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
+ if (!ima_enabled)
|
||||
+ return 0;
|
||||
+
|
||||
error = ima_init();
|
||||
ima_initialized = 1;
|
||||
return error;
|
||||
--
|
||||
1.7.3.1
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
From: Manoj Iyer <manoj.iyer@canonical.com>
|
||||
Date: Fri, 1 Apr 2011 05:39:43 +0000 (-0700)
|
||||
Subject: Input: wacom - add support for Lenovo tablet ID (0xE6)
|
||||
X-Git-Tag: v2.6.39-rc2~4^2~1
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=26fcd2a7618db6c16be6aa3e56c0f3c25381e5a3
|
||||
|
||||
Input: wacom - add support for Lenovo tablet ID (0xE6)
|
||||
[ 2.6.38 backport ]
|
||||
|
||||
Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
|
||||
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||
---
|
||||
RHBZ 708307
|
||||
|
||||
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||
index c87d94f..08ba5ad 100644
|
||||
--- a/drivers/input/tablet/wacom_wac.c
|
||||
+++ b/drivers/input/tablet/wacom_wac.c
|
||||
@@ -1439,6 +1439,8 @@ static const struct wacom_features wacom_features_0xE2 =
|
||||
{ "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG };
|
||||
static const struct wacom_features wacom_features_0xE3 =
|
||||
{ "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG };
|
||||
+static const struct wacom_features wacom_features_0xE6 =
|
||||
+ { "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255, 0, TABLETPC2FG };
|
||||
static const struct wacom_features wacom_features_0x47 =
|
||||
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
|
||||
static struct wacom_features wacom_features_0xD0 =
|
||||
@@ -1561,6 +1564,7 @@ const struct usb_device_id wacom_ids[] = {
|
||||
{ USB_DEVICE_WACOM(0x9F) },
|
||||
{ USB_DEVICE_WACOM(0xE2) },
|
||||
{ USB_DEVICE_WACOM(0xE3) },
|
||||
+ { USB_DEVICE_WACOM(0xE6) },
|
||||
{ USB_DEVICE_WACOM(0x47) },
|
||||
{ USB_DEVICE_LENOVO(0x6004) },
|
||||
{ }
|
|
@ -1,37 +0,0 @@
|
|||
From 8519dc4401ddf8a5399f979870bbeeadbc111186 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Habeck <habeck@sgi.com>
|
||||
Date: Sat, 28 May 2011 13:15:07 -0500
|
||||
Subject: intel-iommu: Add domain check in domain_remove_one_dev_info
|
||||
|
||||
From: Mike Habeck <habeck@sgi.com>
|
||||
|
||||
commit 8519dc4401ddf8a5399f979870bbeeadbc111186 upstream.
|
||||
|
||||
The comment in domain_remove_one_dev_info() states "No need to compare
|
||||
PCI domain; it has to be the same". But for the si_domain that isn't
|
||||
going to be true, as it consists of all the PCI devices that are
|
||||
identity mapped thus multiple PCI domains can be in si_domain. The
|
||||
code needs to validate the PCI domain too.
|
||||
|
||||
Signed-off-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: Mike Travis <travis@sgi.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -3398,8 +3398,8 @@ static void domain_remove_one_dev_info(s
|
||||
spin_lock_irqsave(&device_domain_lock, flags);
|
||||
list_for_each_safe(entry, tmp, &domain->devices) {
|
||||
info = list_entry(entry, struct device_domain_info, link);
|
||||
- /* No need to compare PCI domain; it has to be the same */
|
||||
- if (info->bus == pdev->bus->number &&
|
||||
+ if (info->segment == pci_domain_nr(pdev->bus) &&
|
||||
+ info->bus == pdev->bus->number &&
|
||||
info->devfn == pdev->devfn) {
|
||||
list_del(&info->link);
|
||||
list_del(&info->global);
|
|
@ -1,53 +0,0 @@
|
|||
From 8fcc5372fbac085199d84a880503ed67aba3fe49 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wright <chrisw@sous-sol.org>
|
||||
Date: Sat, 28 May 2011 13:15:02 -0500
|
||||
Subject: intel-iommu: Check for identity mapping candidate using
|
||||
system dma mask
|
||||
|
||||
From: Chris Wright <chrisw@sous-sol.org>
|
||||
|
||||
commit 8fcc5372fbac085199d84a880503ed67aba3fe49 upstream.
|
||||
|
||||
The identity mapping code appears to make the assumption that if the
|
||||
devices dma_mask is greater than 32bits the device can use identity
|
||||
mapping. But that is not true: take the case where we have a 40bit
|
||||
device in a 44bit architecture. The device can potentially receive a
|
||||
physical address that it will truncate and cause incorrect addresses
|
||||
to be used.
|
||||
|
||||
Instead check to see if the device's dma_mask is large enough
|
||||
to address the system's dma_mask.
|
||||
|
||||
Signed-off-by: Mike Travis <travis@sgi.com>
|
||||
Reviewed-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 15 +++++++++++++--
|
||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -2190,8 +2190,19 @@ static int iommu_should_identity_map(str
|
||||
* Assume that they will -- if they turn out not to be, then we can
|
||||
* take them out of the 1:1 domain later.
|
||||
*/
|
||||
- if (!startup)
|
||||
- return pdev->dma_mask > DMA_BIT_MASK(32);
|
||||
+ if (!startup) {
|
||||
+ /*
|
||||
+ * If the device's dma_mask is less than the system's memory
|
||||
+ * size then this is not a candidate for identity mapping.
|
||||
+ */
|
||||
+ u64 dma_mask = pdev->dma_mask;
|
||||
+
|
||||
+ if (pdev->dev.coherent_dma_mask &&
|
||||
+ pdev->dev.coherent_dma_mask < dma_mask)
|
||||
+ dma_mask = pdev->dev.coherent_dma_mask;
|
||||
+
|
||||
+ return dma_mask >= dma_get_required_mask(&pdev->dev);
|
||||
+ }
|
||||
|
||||
return 1;
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
From 1c9fc3d11b84fbd0c4f4aa7855702c2a1f098ebb Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wright <chrisw@sous-sol.org>
|
||||
Date: Sat, 28 May 2011 13:15:04 -0500
|
||||
Subject: intel-iommu: Dont cache iova above 32bit
|
||||
|
||||
From: Chris Wright <chrisw@sous-sol.org>
|
||||
|
||||
commit 1c9fc3d11b84fbd0c4f4aa7855702c2a1f098ebb upstream.
|
||||
|
||||
Mike Travis and Mike Habeck reported an issue where iova allocation
|
||||
would return a range that was larger than a device's dma mask.
|
||||
|
||||
https://lkml.org/lkml/2011/3/29/423
|
||||
|
||||
The dmar initialization code will reserve all PCI MMIO regions and copy
|
||||
those reservations into a domain specific iova tree. It is possible for
|
||||
one of those regions to be above the dma mask of a device. It is typical
|
||||
to allocate iovas with a 32bit mask (despite device's dma mask possibly
|
||||
being larger) and cache the result until it exhausts the lower 32bit
|
||||
address space. Freeing the iova range that is >= the last iova in the
|
||||
lower 32bit range when there is still an iova above the 32bit range will
|
||||
corrupt the cached iova by pointing it to a region that is above 32bit.
|
||||
If that region is also larger than the device's dma mask, a subsequent
|
||||
allocation will return an unusable iova and cause dma failure.
|
||||
|
||||
Simply don't cache an iova that is above the 32bit caching boundary.
|
||||
|
||||
Reported-by: Mike Travis <travis@sgi.com>
|
||||
Reported-by: Mike Habeck <habeck@sgi.com>
|
||||
Acked-by: Mike Travis <travis@sgi.com>
|
||||
Tested-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/iova.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/pci/iova.c
|
||||
+++ b/drivers/pci/iova.c
|
||||
@@ -63,8 +63,16 @@ __cached_rbnode_delete_update(struct iov
|
||||
curr = iovad->cached32_node;
|
||||
cached_iova = container_of(curr, struct iova, node);
|
||||
|
||||
- if (free->pfn_lo >= cached_iova->pfn_lo)
|
||||
- iovad->cached32_node = rb_next(&free->node);
|
||||
+ if (free->pfn_lo >= cached_iova->pfn_lo) {
|
||||
+ struct rb_node *node = rb_next(&free->node);
|
||||
+ struct iova *iova = container_of(node, struct iova, node);
|
||||
+
|
||||
+ /* only cache if it's below 32bit pfn */
|
||||
+ if (node && iova->pfn_lo < iovad->dma_32bit_pfn)
|
||||
+ iovad->cached32_node = node;
|
||||
+ else
|
||||
+ iovad->cached32_node = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Computes the padding size required, to make the
|
|
@ -1,36 +0,0 @@
|
|||
From 7b668357810ecb5fdda4418689d50f5d95aea6a8 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
Date: Tue, 24 May 2011 12:02:41 +0100
|
||||
Subject: intel-iommu: Flush unmaps at domain_exit
|
||||
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
|
||||
commit 7b668357810ecb5fdda4418689d50f5d95aea6a8 upstream.
|
||||
|
||||
We typically batch unmaps to be lazily flushed out at
|
||||
regular intervals. When we destroy a domain, we need
|
||||
to force a flush of these lazy unmaps to be sure none
|
||||
reference the domain we're about to free.
|
||||
|
||||
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=35062
|
||||
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -1416,6 +1416,10 @@ static void domain_exit(struct dmar_doma
|
||||
if (!domain)
|
||||
return;
|
||||
|
||||
+ /* Flush any lazy unmaps that may reference this domain */
|
||||
+ if (!intel_iommu_strict)
|
||||
+ flush_unmaps_timeout(0);
|
||||
+
|
||||
domain_remove_dev_info(domain);
|
||||
/* destroy iovas */
|
||||
put_iova_domain(&domain->iovad);
|
|
@ -1,48 +0,0 @@
|
|||
From 9b4554b21ed07e8556405510638171f0c787742a Mon Sep 17 00:00:00 2001
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
Date: Tue, 24 May 2011 12:19:04 -0400
|
||||
Subject: intel-iommu: Only unlink device domains from iommu
|
||||
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
|
||||
commit 9b4554b21ed07e8556405510638171f0c787742a upstream.
|
||||
|
||||
Commit a97590e5 added unlinking domains from iommus to reciprocate the
|
||||
iommu from domains unlinking that was already done. We actually want
|
||||
to only do this for device domains and never for the static
|
||||
identity map domain or VM domains. The SI domain is special and
|
||||
never freed, while VM domain->id lives in their own special address
|
||||
space, separate from iommu->domain_ids.
|
||||
|
||||
In the current code, a VM can get domain->id zero, then mark that
|
||||
domain unused when unbound from pci-stub. This leads to DMAR
|
||||
write faults when the device is re-bound to the host driver.
|
||||
|
||||
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -3422,10 +3422,13 @@ static void domain_remove_one_dev_info(s
|
||||
domain_update_iommu_cap(domain);
|
||||
spin_unlock_irqrestore(&domain->iommu_lock, tmp_flags);
|
||||
|
||||
- spin_lock_irqsave(&iommu->lock, tmp_flags);
|
||||
- clear_bit(domain->id, iommu->domain_ids);
|
||||
- iommu->domains[domain->id] = NULL;
|
||||
- spin_unlock_irqrestore(&iommu->lock, tmp_flags);
|
||||
+ if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
|
||||
+ !(domain->flags & DOMAIN_FLAG_STATIC_IDENTITY)) {
|
||||
+ spin_lock_irqsave(&iommu->lock, tmp_flags);
|
||||
+ clear_bit(domain->id, iommu->domain_ids);
|
||||
+ iommu->domains[domain->id] = NULL;
|
||||
+ spin_unlock_irqrestore(&iommu->lock, tmp_flags);
|
||||
+ }
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&device_domain_lock, flags);
|
|
@ -1,44 +0,0 @@
|
|||
From 825507d6d059f1cbe2503e0e5a3926225b983aec Mon Sep 17 00:00:00 2001
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
Date: Sat, 28 May 2011 13:15:06 -0500
|
||||
Subject: intel-iommu: Remove Host Bridge devices from identity
|
||||
mapping
|
||||
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
|
||||
commit 825507d6d059f1cbe2503e0e5a3926225b983aec upstream.
|
||||
|
||||
When using the 1:1 (identity) PCI DMA remapping, PCI Host Bridge devices
|
||||
that do not use the IOMMU causes a kernel panic. Fix that by not
|
||||
inserting those devices into the si_domain.
|
||||
|
||||
Signed-off-by: Mike Travis <travis@sgi.com>
|
||||
Reviewed-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -46,6 +46,8 @@
|
||||
#define ROOT_SIZE VTD_PAGE_SIZE
|
||||
#define CONTEXT_SIZE VTD_PAGE_SIZE
|
||||
|
||||
+#define IS_BRIDGE_HOST_DEVICE(pdev) \
|
||||
+ ((pdev->class >> 8) == PCI_CLASS_BRIDGE_HOST)
|
||||
#define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
|
||||
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
|
||||
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
|
||||
@@ -2217,6 +2219,9 @@ static int __init iommu_prepare_static_i
|
||||
return -EFAULT;
|
||||
|
||||
for_each_pci_dev(pdev) {
|
||||
+ /* Skip Host/PCI Bridge devices */
|
||||
+ if (IS_BRIDGE_HOST_DEVICE(pdev))
|
||||
+ continue;
|
||||
if (iommu_should_identity_map(pdev, 1)) {
|
||||
printk(KERN_INFO "IOMMU: %s identity mapping for device %s\n",
|
||||
hw ? "hardware" : "software", pci_name(pdev));
|
|
@ -1,43 +0,0 @@
|
|||
From cb452a4040bb051d92e85d6e7eb60c11734c1781 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
Date: Sat, 28 May 2011 13:15:03 -0500
|
||||
Subject: intel-iommu: Speed up processing of the identity_mapping
|
||||
function
|
||||
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
|
||||
commit cb452a4040bb051d92e85d6e7eb60c11734c1781 upstream.
|
||||
|
||||
When there are a large count of PCI devices, and the pass through
|
||||
option for iommu is set, much time is spent in the identity_mapping
|
||||
function hunting though the iommu domains to check if a specific
|
||||
device is "identity mapped".
|
||||
|
||||
Speed up the function by checking the cached info to see if
|
||||
it's mapped to the static identity domain.
|
||||
|
||||
Signed-off-by: Mike Travis <travis@sgi.com>
|
||||
Reviewed-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -2109,10 +2109,10 @@ static int identity_mapping(struct pci_d
|
||||
if (likely(!iommu_identity_mapping))
|
||||
return 0;
|
||||
|
||||
+ info = pdev->dev.archdata.iommu;
|
||||
+ if (info && info != DUMMY_DEVICE_DOMAIN_INFO)
|
||||
+ return (info->domain == si_domain);
|
||||
|
||||
- list_for_each_entry(info, &si_domain->devices, link)
|
||||
- if (info->dev == pdev)
|
||||
- return 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
From c681d0ba1252954208220ad32248a3e8e2fc98e4 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
Date: Sat, 28 May 2011 13:15:05 -0500
|
||||
Subject: intel-iommu: Use coherent DMA mask when requested
|
||||
|
||||
From: Mike Travis <travis@sgi.com>
|
||||
|
||||
commit c681d0ba1252954208220ad32248a3e8e2fc98e4 upstream.
|
||||
|
||||
The __intel_map_single function is not honoring the passed in DMA mask.
|
||||
This results in not using the coherent DMA mask when called from
|
||||
intel_alloc_coherent().
|
||||
|
||||
Signed-off-by: Mike Travis <travis@sgi.com>
|
||||
Acked-by: Chris Wright <chrisw@sous-sol.org>
|
||||
Reviewed-by: Mike Habeck <habeck@sgi.com>
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/pci/intel-iommu.c
|
||||
+++ b/drivers/pci/intel-iommu.c
|
||||
@@ -2606,8 +2606,7 @@ static dma_addr_t __intel_map_single(str
|
||||
iommu = domain_get_iommu(domain);
|
||||
size = aligned_nrpages(paddr, size);
|
||||
|
||||
- iova = intel_alloc_iova(hwdev, domain, dma_to_mm_pfn(size),
|
||||
- pdev->dma_mask);
|
||||
+ iova = intel_alloc_iova(hwdev, domain, dma_to_mm_pfn(size), dma_mask);
|
||||
if (!iova)
|
||||
goto error;
|
||||
|
|
@ -1,103 +0,0 @@
|
|||
From sgruszka@redhat.com Mon Jun 20 10:09:55 2011
|
||||
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
To: kernel@lists.fedoraproject.org
|
||||
Subject: [PATCH 2.6.38] iwlagn: use cts-to-self protection on 5000 adapters series
|
||||
Date: Mon, 20 Jun 2011 16:11:22 +0200
|
||||
Message-Id: <1308579082-19006-2-git-send-email-sgruszka@redhat.com>
|
||||
|
||||
This patch fixes 802.11n stability and performance regression we have
|
||||
since 2.6.35. It boost performance on my 5GHz N-only network from about
|
||||
5MB/s to 8MB/s. Similar percentage boost can be observed on 2.4 GHz.
|
||||
|
||||
These are test results of 5x downloading of approximately 700MB iso
|
||||
image:
|
||||
|
||||
vanilla: 5.27 5.22 4.94 4.47 5.31 ; avr 5.0420 std 0.35110
|
||||
patched: 8.07 7.95 8.06 7.99 7.96 ; avr 8.0060 std 0.055946
|
||||
|
||||
This was achieved with NetworkManager configured to do not perform
|
||||
periodical scans, by configuring constant BSSID. With periodical scans,
|
||||
after some time, performance downgrade to unpatched driver level, like
|
||||
in example below:
|
||||
|
||||
patched: 7.40 7.61 4.28 4.37 4.80 avr 5.6920 std 1.6683
|
||||
|
||||
However patch still make better here, since similar test on unpatched
|
||||
driver make link disconnects with below messages after some time:
|
||||
|
||||
wlan1: authenticate with 00:23:69:35:d1:3f (try 1)
|
||||
wlan1: authenticate with 00:23:69:35:d1:3f (try 2)
|
||||
wlan1: authenticate with 00:23:69:35:d1:3f (try 3)
|
||||
wlan1: authentication with 00:23:69:35:d1:3f timed out
|
||||
|
||||
On 2.6.35 kernel patch helps against connection hangs with messages:
|
||||
|
||||
iwlagn 0000:20:00.0: queue 10 stuck 3 time. Fw reload.
|
||||
iwlagn 0000:20:00.0: On demand firmware reload
|
||||
iwlagn 0000:20:00.0: Stopping AGG while state not ON or starting
|
||||
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-5000.c | 1 -
|
||||
drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c | 12 ++----------
|
||||
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 8 ++++++++
|
||||
3 files changed, 10 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
|
||||
index 537fb8c..909cc30 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
|
||||
@@ -517,7 +517,6 @@ static struct iwl_base_params iwl5000_base_params = {
|
||||
};
|
||||
static struct iwl_ht_params iwl5000_ht_params = {
|
||||
.ht_greenfield_support = true,
|
||||
- .use_rts_for_aggregation = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
#define IWL_DEVICE_5000 \
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
|
||||
index 366340f..89762a7 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
|
||||
@@ -217,17 +217,9 @@ static void iwlagn_tx_cmd_protection(struct iwl_priv *priv,
|
||||
__le16 fc, __le32 *tx_flags)
|
||||
{
|
||||
if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS ||
|
||||
- info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
|
||||
+ info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT ||
|
||||
+ info->flags & IEEE80211_TX_CTL_AMPDU)
|
||||
*tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (priv->cfg->ht_params &&
|
||||
- priv->cfg->ht_params->use_rts_for_aggregation &&
|
||||
- info->flags & IEEE80211_TX_CTL_AMPDU) {
|
||||
- *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
|
||||
- return;
|
||||
- }
|
||||
}
|
||||
|
||||
/* Calc max signal level (dBm) among 3 possible receivers */
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
index ee802fe..b19fb85 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
@@ -145,6 +145,14 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
|
||||
/* always get timestamp with Rx frame */
|
||||
ctx->staging.flags |= RXON_FLG_TSF2HOST_MSK;
|
||||
|
||||
+ /*
|
||||
+ * force CTS-to-self frames protection if RTS-CTS is not preferred
|
||||
+ * one aggregation protection method
|
||||
+ */
|
||||
+ if (!(priv->cfg->ht_params &&
|
||||
+ priv->cfg->ht_params->use_rts_for_aggregation))
|
||||
+ ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
|
||||
+
|
||||
if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
|
||||
!(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
|
||||
ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
|
||||
--
|
||||
1.7.1
|
||||
|
1049
kernel.spec
1049
kernel.spec
File diff suppressed because it is too large
Load Diff
|
@ -1,82 +0,0 @@
|
|||
From: Hugh Dickins <hughd@google.com>
|
||||
Date: Wed, 15 Jun 2011 22:08:58 +0000 (-0700)
|
||||
Subject: ksm: fix NULL pointer dereference in scan_get_next_rmap_item()
|
||||
X-Git-Tag: v3.0-rc4~44
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=2b472611a32a72f4a118c069c2d62a1a3f087afd
|
||||
|
||||
ksm: fix NULL pointer dereference in scan_get_next_rmap_item()
|
||||
|
||||
Andrea Righi reported a case where an exiting task can race against
|
||||
ksmd::scan_get_next_rmap_item (http://lkml.org/lkml/2011/6/1/742) easily
|
||||
triggering a NULL pointer dereference in ksmd.
|
||||
|
||||
ksm_scan.mm_slot == &ksm_mm_head with only one registered mm
|
||||
|
||||
CPU 1 (__ksm_exit) CPU 2 (scan_get_next_rmap_item)
|
||||
list_empty() is false
|
||||
lock slot == &ksm_mm_head
|
||||
list_del(slot->mm_list)
|
||||
(list now empty)
|
||||
unlock
|
||||
lock
|
||||
slot = list_entry(slot->mm_list.next)
|
||||
(list is empty, so slot is still ksm_mm_head)
|
||||
unlock
|
||||
slot->mm == NULL ... Oops
|
||||
|
||||
Close this race by revalidating that the new slot is not simply the list
|
||||
head again.
|
||||
|
||||
Andrea's test case:
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#define BUFSIZE getpagesize()
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
if (posix_memalign(&ptr, getpagesize(), BUFSIZE) < 0) {
|
||||
perror("posix_memalign");
|
||||
exit(1);
|
||||
}
|
||||
if (madvise(ptr, BUFSIZE, MADV_MERGEABLE) < 0) {
|
||||
perror("madvise");
|
||||
exit(1);
|
||||
}
|
||||
*(char *)NULL = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reported-by: Andrea Righi <andrea@betterlinux.com>
|
||||
Tested-by: Andrea Righi <andrea@betterlinux.com>
|
||||
Cc: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Signed-off-by: Hugh Dickins <hughd@google.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
Cc: <stable@kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
|
||||
diff --git a/mm/ksm.c b/mm/ksm.c
|
||||
index d708b3e..9a68b0c 100644
|
||||
--- a/mm/ksm.c
|
||||
+++ b/mm/ksm.c
|
||||
@@ -1302,6 +1302,12 @@ static struct rmap_item *scan_get_next_rmap_item(struct page **page)
|
||||
slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list);
|
||||
ksm_scan.mm_slot = slot;
|
||||
spin_unlock(&ksm_mmlist_lock);
|
||||
+ /*
|
||||
+ * Although we tested list_empty() above, a racing __ksm_exit
|
||||
+ * of the last mm on the list may have removed it since then.
|
||||
+ */
|
||||
+ if (slot == &ksm_mm_head)
|
||||
+ return NULL;
|
||||
next_mm:
|
||||
ksm_scan.address = 0;
|
||||
ksm_scan.rmap_list = &slot->rmap_list;
|
|
@ -1,72 +0,0 @@
|
|||
From: Nishanth Aravamudan <nacc@us.ibm.com>
|
||||
Date: Thu, 16 Jun 2011 15:28:36 +0000 (-0700)
|
||||
Subject: libata/sas: only set FROZEN flag if new EH is supported
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=3f1e046ad3370d22d39529103667354eb50abc08
|
||||
|
||||
libata/sas: only set FROZEN flag if new EH is supported
|
||||
|
||||
On 16.06.2011 [08:28:39 -0500], Brian King wrote:
|
||||
> On 06/16/2011 02:51 AM, Tejun Heo wrote:
|
||||
> > On Wed, Jun 15, 2011 at 04:34:17PM -0700, Nishanth Aravamudan wrote:
|
||||
> >>> That looks like the right thing to do. For ipr's usage of
|
||||
> >>> libata, we don't have the concept of a port frozen state, so this flag
|
||||
> >>> should really never get set. The alternate way to fix this would be to
|
||||
> >>> only set ATA_PFLAG_FROZEN in ata_port_alloc if ap->ops->error_handler
|
||||
> >>> is not NULL.
|
||||
> >>
|
||||
> >> It seemed like ipr is as you say, but I wasn't sure if it was
|
||||
> >> appropriate to make the change above in the common libata-scis code or
|
||||
> >> not. I don't want to break some other device on accident.
|
||||
> >>
|
||||
> >> Also, I tried your suggestion, but I don't think that can happen in
|
||||
> >> ata_port_alloc? ata_port_alloc is allocated ap itself, and it seems like
|
||||
> >> ap->ops typically gets set only after ata_port_alloc returns?
|
||||
> >
|
||||
> > Maybe we can test error_handler in ata_sas_port_start()?
|
||||
>
|
||||
> Good point. Since libsas is converted to the new eh now, we would need to have
|
||||
> this test.
|
||||
|
||||
Commit 7b3a24c57d2eeda8dba9c205342b12689c4679f9 ("ahci: don't enable
|
||||
port irq before handler is registered") caused a regression for CD-ROMs
|
||||
attached to the IPR SATA bus on Power machines:
|
||||
|
||||
ata_port_alloc: ENTER
|
||||
ata_port_probe: ata1: bus probe begin
|
||||
ata1.00: ata_dev_read_id: ENTER
|
||||
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x40)
|
||||
ata1.00: ata_dev_read_id: ENTER
|
||||
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x40)
|
||||
ata1.00: limiting speed to UDMA7:PIO5
|
||||
ata1.00: ata_dev_read_id: ENTER
|
||||
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x40)
|
||||
ata1.00: disabled
|
||||
ata_port_probe: ata1: bus probe end
|
||||
scsi_alloc_sdev: Allocation failure during SCSI scanning, some SCSI devices might not be configured
|
||||
|
||||
The FROZEN flag added in that commit is only cleared by the new EH code,
|
||||
which is not used by ipr. Clear this flag in the SAS code if we don't
|
||||
support new EH.
|
||||
|
||||
Reported-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
|
||||
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
|
||||
index d51f979..927f968 100644
|
||||
--- a/drivers/ata/libata-scsi.c
|
||||
+++ b/drivers/ata/libata-scsi.c
|
||||
@@ -3797,6 +3797,12 @@ EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
|
||||
*/
|
||||
int ata_sas_port_start(struct ata_port *ap)
|
||||
{
|
||||
+ /*
|
||||
+ * the port is marked as frozen at allocation time, but if we don't
|
||||
+ * have new eh, we won't thaw it
|
||||
+ */
|
||||
+ if (!ap->ops->error_handler)
|
||||
+ ap->pflags &= ~ATA_PFLAG_FROZEN;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ata_sas_port_start);
|
|
@ -1,3 +1,13 @@
|
|||
Before:
|
||||
Heap randomisation test (PIE) : 16 bits (guessed)
|
||||
Main executable randomisation (PIE) : 8 bits (guessed)
|
||||
|
||||
after:
|
||||
Heap randomisation test (PIE) : 19 bits (guessed)
|
||||
Main executable randomisation (PIE) : 12 bits (guessed)
|
||||
|
||||
|
||||
|
||||
--- b/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -397,6 +397,10 @@
|
||||
|
|
|
@ -1,16 +1,3 @@
|
|||
--- linux-2.6.34.noarch/drivers/acpi/acpica/dsopcode.c~ 2010-07-01 14:40:44.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/acpi/acpica/dsopcode.c 2010-07-01 14:48:56.000000000 -0400
|
||||
@@ -1276,6 +1276,10 @@ acpi_ds_exec_end_control_op(struct acpi_
|
||||
* loop does not implement a timeout.
|
||||
*/
|
||||
control_state->control.loop_count++;
|
||||
+ if ((control_state->control.loop_count > 1) && (control_state->control.loop_count % 0xffff == 0))
|
||||
+ printk("ACPI: While loop taking a really long time. loop_count=0x%x\n",
|
||||
+ control_state->control.loop_count);
|
||||
+
|
||||
if (control_state->control.loop_count >
|
||||
ACPI_MAX_LOOP_ITERATIONS) {
|
||||
status = AE_AML_INFINITE_LOOP;
|
||||
--- linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h 2010-07-01 14:49:17.000000000 -0400
|
||||
@@ -117,7 +117,7 @@
|
||||
|
@ -22,3 +9,17 @@
|
|||
|
||||
/* Maximum sleep allowed via Sleep() operator */
|
||||
|
||||
--- a/drivers/acpi/acpica/dscontrol.c
|
||||
+++ b/drivers/acpi/acpica/dscontrol.c
|
||||
@@ -212,6 +212,11 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
|
||||
* loop does not implement a timeout.
|
||||
*/
|
||||
control_state->control.loop_count++;
|
||||
+ if ((control_state->control.loop_count > 1) &&
|
||||
+ (control_state->control.loop_count % 0xffff == 0))
|
||||
+ printk("ACPI: While loop taking a really long time. loop_count=0x%x\n",
|
||||
+ control_state->control.loop_count);
|
||||
+
|
||||
if (control_state->control.loop_count >
|
||||
ACPI_MAX_LOOP_ITERATIONS) {
|
||||
status = AE_AML_INFINITE_LOOP;
|
||||
|
|
|
@ -220,20 +220,6 @@ index 5eb1ba7..3e525d2 100644
|
|||
/*
|
||||
* Fix up the linear direct mapping of the kernel to avoid cache attribute
|
||||
* conflicts.
|
||||
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
|
||||
index 3141dd3..153658c 100644
|
||||
--- a/drivers/char/Kconfig
|
||||
+++ b/drivers/char/Kconfig
|
||||
@@ -471,6 +471,8 @@ config LEGACY_PTYS
|
||||
security. This option enables these legacy devices; on most
|
||||
systems, it is safe to say N.
|
||||
|
||||
+config CRASH
|
||||
+ tristate "Crash Utility memory driver"
|
||||
|
||||
config LEGACY_PTY_COUNT
|
||||
int "Maximum number of legacy PTY in use"
|
||||
|
||||
diff --git a/drivers/char/crash.c b/drivers/char/crash.c
|
||||
new file mode 100644
|
||||
index 0000000..e5437de
|
||||
|
@ -379,3 +365,18 @@ index ba53ec9..6588b33 100644
|
|||
js-rtc-y = rtc.o
|
||||
+
|
||||
+obj-$(CONFIG_CRASH) += crash.o
|
||||
|
||||
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
|
||||
index 04f8b2d..e8fb997 100644
|
||||
--- a/drivers/char/Kconfig
|
||||
+++ b/drivers/char/Kconfig
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
menu "Character devices"
|
||||
|
||||
+config CRASH
|
||||
+ tristate "Crash Utility memory driver"
|
||||
+
|
||||
source "drivers/tty/Kconfig"
|
||||
|
||||
config DEVKMEM
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
From 76ec0e2e6d6edf81abc0331d5e7873ef7b2f6019 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Wed, 8 Jul 2009 13:06:01 -0400
|
||||
Subject: [PATCH 6/6] fedora: linux-2.6-debug-always-inline-kzalloc.patch
|
||||
|
||||
---
|
||||
include/linux/slab.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/include/linux/slab.h b/include/linux/slab.h
|
||||
index 2da8372..d4ef74f 100644
|
||||
--- a/include/linux/slab.h
|
||||
+++ b/include/linux/slab.h
|
||||
@@ -310,7 +310,7 @@ static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
|
||||
* @size: how many bytes of memory are required.
|
||||
* @flags: the type of memory to allocate (see kmalloc).
|
||||
*/
|
||||
-static inline void *kzalloc(size_t size, gfp_t flags)
|
||||
+static __always_inline void *kzalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
return kmalloc(size, flags | __GFP_ZERO);
|
||||
}
|
||||
--
|
||||
1.6.2.5
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
diff --git a/init/main.c b/init/main.c
|
||||
index 7449819..98cfaae 100644
|
||||
--- a/init/main.c
|
||||
+++ b/init/main.c
|
||||
@@ -369,6 +369,11 @@ static void __init setup_nr_cpu_ids(void)
|
||||
nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1;
|
||||
}
|
||||
|
||||
+#include <../fs/ext4/ext4.h>
|
||||
+#include <linux/ext3_fs_i.h>
|
||||
+#include <linux/skbuff.h>
|
||||
+#include <linux/sched.h>
|
||||
+
|
||||
/* Called by boot processor to activate the rest. */
|
||||
static void __init smp_init(void)
|
||||
{
|
||||
@@ -391,6 +395,16 @@ static void __init smp_init(void)
|
||||
/* Any cleanup work */
|
||||
printk(KERN_INFO "Brought up %ld CPUs\n", (long)num_online_cpus());
|
||||
smp_cpus_done(setup_max_cpus);
|
||||
+
|
||||
+ printk(KERN_DEBUG "sizeof(vma)=%u bytes\n", (unsigned int) sizeof(struct vm_area_struct));
|
||||
+ printk(KERN_DEBUG "sizeof(page)=%u bytes\n", (unsigned int) sizeof(struct page));
|
||||
+ printk(KERN_DEBUG "sizeof(inode)=%u bytes\n", (unsigned int) sizeof(struct inode));
|
||||
+ printk(KERN_DEBUG "sizeof(dentry)=%u bytes\n", (unsigned int) sizeof(struct dentry));
|
||||
+ printk(KERN_DEBUG "sizeof(ext3inode)=%u bytes\n", (unsigned int) sizeof(struct ext3_inode_info));
|
||||
+ printk(KERN_DEBUG "sizeof(ext4inode)=%u bytes\n", (unsigned int) sizeof(struct ext4_inode_info));
|
||||
+ printk(KERN_DEBUG "sizeof(buffer_head)=%u bytes\n", (unsigned int) sizeof(struct buffer_head));
|
||||
+ printk(KERN_DEBUG "sizeof(skbuff)=%u bytes\n", (unsigned int) sizeof(struct sk_buff));
|
||||
+ printk(KERN_DEBUG "sizeof(task_struct)=%u bytes\n", (unsigned int) sizeof(struct task_struct));
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,110 +0,0 @@
|
|||
From 14bdd0d36f5284108468bb73afd50726b07c7a84 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Mon, 29 Mar 2010 23:43:49 -0400
|
||||
Subject: linux-2.6-defaults-pci_no_msi
|
||||
|
||||
---
|
||||
Documentation/kernel-parameters.txt | 3 +++
|
||||
drivers/pci/Kconfig | 12 ++++++++++++
|
||||
drivers/pci/msi.c | 9 +++++++++
|
||||
drivers/pci/pci.c | 2 ++
|
||||
drivers/pci/pci.h | 2 ++
|
||||
5 files changed, 28 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
|
||||
index e4cbca5..8154a0f 100644
|
||||
--- a/Documentation/kernel-parameters.txt
|
||||
+++ b/Documentation/kernel-parameters.txt
|
||||
@@ -1911,6 +1911,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
check_enable_amd_mmconf [X86] check for and enable
|
||||
properly configured MMIO access to PCI
|
||||
config space on AMD family 10h CPU
|
||||
+ msi [MSI] If the PCI_MSI kernel config parameter is
|
||||
+ enabled, this kernel boot option can be used to
|
||||
+ enable the use of MSI interrupts system-wide.
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
disable the use of MSI interrupts system-wide.
|
||||
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
|
||||
index 7858a11..b12fcad 100644
|
||||
--- a/drivers/pci/Kconfig
|
||||
+++ b/drivers/pci/Kconfig
|
||||
@@ -21,6 +21,18 @@ config PCI_MSI
|
||||
|
||||
If you don't know what to do here, say Y.
|
||||
|
||||
+config PCI_MSI_DEFAULT_ON
|
||||
+ def_bool y
|
||||
+ prompt "Use Message Signaled Interrupts by default"
|
||||
+ depends on PCI_MSI
|
||||
+ help
|
||||
+ Selecting this option will enable use of PCI MSI where applicable
|
||||
+ by default. Support for MSI can be disabled through the use of the
|
||||
+ pci=nomsi boot flag. Conversely, if this option is not selected,
|
||||
+ support for PCI MSI can be enabled by passing the pci=msi flag.
|
||||
+
|
||||
+ If you don't know what to do here, say N.
|
||||
+
|
||||
config PCI_DEBUG
|
||||
bool "PCI Debugging"
|
||||
depends on PCI && DEBUG_KERNEL
|
||||
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
|
||||
index f9cf317..6b0539a 100644
|
||||
--- a/drivers/pci/msi.c
|
||||
+++ b/drivers/pci/msi.c
|
||||
@@ -22,7 +22,11 @@
|
||||
#include "pci.h"
|
||||
#include "msi.h"
|
||||
|
||||
+#ifdef CONFIG_PCI_MSI_DEFAULT_ON
|
||||
static int pci_msi_enable = 1;
|
||||
+#else
|
||||
+static int pci_msi_enable = 0;
|
||||
+#endif /*CONFIG_PCI_MSI_DEFAULT_ON*/
|
||||
|
||||
/* Arch hooks */
|
||||
|
||||
@@ -836,6 +840,11 @@ int pci_msi_enabled(void)
|
||||
}
|
||||
EXPORT_SYMBOL(pci_msi_enabled);
|
||||
|
||||
+void pci_yes_msi(void)
|
||||
+{
|
||||
+ pci_msi_enable = 1;
|
||||
+}
|
||||
+
|
||||
void pci_msi_init_pci_dev(struct pci_dev *dev)
|
||||
{
|
||||
INIT_LIST_HEAD(&dev->msi_list);
|
||||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
|
||||
index 1531f3a..3cb332b 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -2983,6 +2983,8 @@ static int __init pci_setup(char *str)
|
||||
if (*str && (str = pcibios_setup(str)) && *str) {
|
||||
if (!strcmp(str, "nomsi")) {
|
||||
pci_no_msi();
|
||||
+ } else if (!strcmp(str, "msi")) {
|
||||
+ pci_yes_msi();
|
||||
} else if (!strcmp(str, "noaer")) {
|
||||
pci_no_aer();
|
||||
} else if (!strcmp(str, "nodomains")) {
|
||||
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
|
||||
index 4eb10f4..caa051e 100644
|
||||
--- a/drivers/pci/pci.h
|
||||
+++ b/drivers/pci/pci.h
|
||||
@@ -122,9 +122,11 @@ extern unsigned int pci_pm_d3_delay;
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
void pci_no_msi(void);
|
||||
+void pci_yes_msi(void);
|
||||
extern void pci_msi_init_pci_dev(struct pci_dev *dev);
|
||||
#else
|
||||
static inline void pci_no_msi(void) { }
|
||||
+static inline void pci_yes_msi(void) { }
|
||||
static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
|
||||
#endif
|
||||
|
||||
--
|
||||
1.7.0.1
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index cea0cd9..c326065 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -2142,3 +2142,8 @@ source "crypto/Kconfig"
|
||||
source "arch/x86/kvm/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
+
|
||||
+config PCI_DEFAULT_USE_CRS
|
||||
+ def_bool y
|
||||
+ prompt "Use PCI Host Bridge Windows from ACPI by default?"
|
||||
+ depends on ACPI
|
||||
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
|
||||
index 15466c0..3099406 100644
|
||||
--- a/arch/x86/pci/acpi.c
|
||||
+++ b/arch/x86/pci/acpi.c
|
||||
@@ -16,7 +16,11 @@ struct pci_root_info {
|
||||
int busnum;
|
||||
};
|
||||
|
||||
+#ifdef CONFIG_PCI_DEFAULT_USE_CRS
|
||||
static bool pci_use_crs = true;
|
||||
+#else
|
||||
+static bool pci_use_crs = false;
|
||||
+#endif
|
||||
|
||||
static int __init set_use_crs(const struct dmi_system_id *id)
|
||||
{
|
|
@ -1,4 +0,0 @@
|
|||
#
|
||||
# Patches under review and/or pending inclusion in the linux1394-git
|
||||
# tree (and/or in by the time your read this), which we want...
|
||||
#
|
File diff suppressed because it is too large
Load Diff
|
@ -1,15 +0,0 @@
|
|||
fixes:
|
||||
implicit declaration of function kzalloc
|
||||
|
||||
--- linux-2.6.34.noarch/drivers/usb/serial/qcserial.c~ 2010-06-08 15:19:41.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/usb/serial/qcserial.c 2010-06-08 15:19:47.000000000 -0400
|
||||
@@ -11,6 +11,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#include <linux/slab.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/tty_flip.h>
|
||||
#include <linux/usb.h>
|
||||
|
||||
|
|
@ -3,21 +3,21 @@
|
|||
@@ -5,6 +5,7 @@
|
||||
#include <asm/ldt.h>
|
||||
#include <asm/mmu.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
+#include <linux/mm_types.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
static inline void fill_ldt(struct desc_struct *desc,
|
||||
const struct user_desc *info)
|
||||
@@ -93,6 +94,9 @@ static inline int desc_empty(const void *ptr)
|
||||
static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info)
|
||||
@@ -97,6 +98,9 @@ static inline int desc_empty(const void *ptr)
|
||||
|
||||
#define load_TLS(t, cpu) native_load_tls(t, cpu)
|
||||
#define set_ldt native_set_ldt
|
||||
#define load_TLS(t, cpu) native_load_tls(t, cpu)
|
||||
#define set_ldt native_set_ldt
|
||||
+#ifdef CONFIG_X86_32
|
||||
+#define load_user_cs_desc native_load_user_cs_desc
|
||||
+#define load_user_cs_desc native_load_user_cs_desc
|
||||
+#endif /*CONFIG_X86_32*/
|
||||
|
||||
#define write_ldt_entry(dt, entry, desc) \
|
||||
native_write_ldt_entry(dt, entry, desc)
|
||||
#define write_ldt_entry(dt, entry, desc) native_write_ldt_entry(dt, entry, desc)
|
||||
#define write_gdt_entry(dt, entry, desc, type) native_write_gdt_entry(dt, entry, desc, type)
|
||||
@@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
|
||||
_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
|
||||
}
|
||||
|
@ -46,7 +46,7 @@
|
|||
#endif /* _ASM_X86_DESC_H */
|
||||
--- a/arch/x86/include/asm/mmu.h
|
||||
+++ b/arch/x86/include/asm/mmu.h
|
||||
@@ -7,12 +7,19 @@
|
||||
@@ -7,6 +7,9 @@
|
||||
/*
|
||||
* The x86 doesn't have a mmu context, but
|
||||
* we put the segment information here.
|
||||
|
@ -56,9 +56,11 @@
|
|||
*/
|
||||
typedef struct {
|
||||
void *ldt;
|
||||
int size;
|
||||
@@ -19,6 +22,11 @@ typedef struct {
|
||||
|
||||
struct mutex lock;
|
||||
void *vdso;
|
||||
+
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ struct desc_struct user_cs;
|
||||
+ unsigned long exec_limit;
|
||||
|
@ -141,8 +143,8 @@
|
|||
set_user_gs(regs, 0);
|
||||
+
|
||||
regs->fs = 0;
|
||||
set_fs(USER_DS);
|
||||
regs->ds = __USER_DS;
|
||||
regs->es = __USER_DS;
|
||||
@@ -252,6 +255,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
regs->cs = __USER_CS;
|
||||
regs->ip = new_ip;
|
||||
|
@ -472,8 +474,8 @@
|
|||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -101,6 +101,9 @@ struct bio_list;
|
||||
struct fs_struct;
|
||||
struct perf_event_context;
|
||||
struct blk_plug;
|
||||
|
||||
+extern int disable_nx;
|
||||
+extern int print_fatal_signals;
|
||||
|
@ -502,16 +504,15 @@
|
|||
static void unmap_region(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
||||
unsigned long start, unsigned long end);
|
||||
@@ -388,6 +401,9 @@
|
||||
@@ -432,6 +432,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
struct vm_area_struct *prev, struct rb_node **rb_link,
|
||||
struct rb_node *rb_parent)
|
||||
{
|
||||
struct vm_area_struct *next;
|
||||
|
||||
+ if (vma->vm_flags & VM_EXEC)
|
||||
+ arch_add_exec_range(mm, vma->vm_end);
|
||||
+
|
||||
vma->vm_prev = prev;
|
||||
if (prev) {
|
||||
next = prev->vm_next;
|
||||
__vma_link_list(mm, vma, prev, rb_parent);
|
||||
__vma_link_rb(mm, vma, rb_link, rb_parent);
|
||||
}
|
||||
@@ -489,6 +504,8 @@
|
||||
rb_erase(&vma->vm_rb, &mm->mm_rb);
|
||||
if (mm->mmap_cache == vma)
|
||||
|
@ -549,8 +550,8 @@
|
|||
/* Success. */
|
||||
@@ -2254,6 +2367,7 @@
|
||||
|
||||
free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||
tlb_finish_mmu(tlb, 0, end);
|
||||
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||
tlb_finish_mmu(&tlb, 0, end);
|
||||
+ arch_flush_exec_range(mm);
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
commit 13f172ff26563995049abe73f6eeba828de3c09d
|
||||
Author: Neil Horman <nhorman@tuxdriver.com>
|
||||
Date: Fri Apr 22 08:10:59 2011 +0000
|
||||
|
||||
netconsole: fix deadlock when removing net driver that netconsole is using (v2)
|
||||
|
||||
A deadlock was reported to me recently that occured when netconsole was being
|
||||
used in a virtual guest. If the virtio_net driver was removed while netconsole
|
||||
was setup to use an interface that was driven by that driver, the guest
|
||||
deadlocked. No backtrace was provided because netconsole was the only console
|
||||
configured, but it became clear pretty quickly what the problem was. In
|
||||
netconsole_netdev_event, if we get an unregister event, we call
|
||||
__netpoll_cleanup with the target_list_lock held and irqs disabled.
|
||||
__netpoll_cleanup can, if pending netpoll packets are waiting call
|
||||
cancel_delayed_work_sync, which is a sleeping path. the might_sleep call in
|
||||
that path gets triggered, causing a console warning to be issued. The
|
||||
netconsole write handler of course tries to take the target_list_lock again,
|
||||
which we already hold, causing deadlock.
|
||||
|
||||
The fix is pretty striaghtforward. Simply drop the target_list_lock and
|
||||
re-enable irqs prior to calling __netpoll_cleanup, the re-acquire the lock, and
|
||||
restart the loop. Confirmed by myself to fix the problem reported.
|
||||
|
||||
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
|
||||
CC: "David S. Miller" <davem@davemloft.net>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
|
||||
index dfb67eb..eb41e44 100644
|
||||
--- a/drivers/net/netconsole.c
|
||||
+++ b/drivers/net/netconsole.c
|
||||
@@ -671,6 +671,7 @@ static int netconsole_netdev_event(struct notifier_block *this,
|
||||
goto done;
|
||||
|
||||
spin_lock_irqsave(&target_list_lock, flags);
|
||||
+restart:
|
||||
list_for_each_entry(nt, &target_list, list) {
|
||||
netconsole_target_get(nt);
|
||||
if (nt->np.dev == dev) {
|
||||
@@ -683,9 +684,16 @@ static int netconsole_netdev_event(struct notifier_block *this,
|
||||
* rtnl_lock already held
|
||||
*/
|
||||
if (nt->np.dev) {
|
||||
+ spin_unlock_irqrestore(
|
||||
+ &target_list_lock,
|
||||
+ flags);
|
||||
__netpoll_cleanup(&nt->np);
|
||||
+ spin_lock_irqsave(&target_list_lock,
|
||||
+ flags);
|
||||
dev_put(nt->np.dev);
|
||||
nt->np.dev = NULL;
|
||||
+ netconsole_target_put(nt);
|
||||
+ goto restart;
|
||||
}
|
||||
/* Fall through */
|
||||
case NETDEV_GOING_DOWN:
|
|
@ -1,124 +0,0 @@
|
|||
This needs a fixed toolchain, and a userspace rebuild to work.
|
||||
For these reasons, it's had difficulty getting upstream.
|
||||
|
||||
ie, Fedora has a new enough toolchain, and has been rebuilt, so we don't need
|
||||
the ifdefs. Other distros don't/haven't, and this patch would break them
|
||||
if pushed upstream.
|
||||
|
||||
|
||||
Subject: [Fwd: Re: [PATCH] Disable execmem for sparc]
|
||||
From: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
To: Dave Jones <davej@redhat.com>
|
||||
Date: Wed, 28 Apr 2010 16:04:56 -0400
|
||||
Message-Id: <1272485096.6013.326.camel@moss-pluto.epoch.ncsc.mil>
|
||||
|
||||
-------- Forwarded Message --------
|
||||
From: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
To: David Miller <davem@davemloft.net>
|
||||
Cc: tcallawa@redhat.com, dennis@ausil.us, sparclinux@vger.kernel.org, dgilmore@redhat.com, jmorris@namei.org, eparis@parisplace.org
|
||||
Subject: Re: [PATCH] Disable execmem for sparc
|
||||
Date: Wed, 28 Apr 2010 15:57:57 -0400
|
||||
|
||||
On Tue, 2010-04-27 at 11:47 -0700, David Miller wrote:
|
||||
> From: "Tom \"spot\" Callaway" <tcallawa@redhat.com>
|
||||
> Date: Tue, 27 Apr 2010 14:20:21 -0400
|
||||
>
|
||||
> > [root@apollo ~]$ cat /proc/2174/maps
|
||||
> > 00010000-00014000 r-xp 00000000 fd:00 15466577
|
||||
> > /sbin/mingetty
|
||||
> > 00022000-00024000 rwxp 00002000 fd:00 15466577
|
||||
> > /sbin/mingetty
|
||||
> > 00024000-00046000 rwxp 00000000 00:00 0
|
||||
> > [heap]
|
||||
>
|
||||
> SELINUX probably barfs on the executable heap, the PLT is in the HEAP
|
||||
> just like powerpc32 and that's why VM_DATA_DEFAULT_FLAGS has to set
|
||||
> both executable and writable.
|
||||
>
|
||||
> You also can't remove the CONFIG_PPC32 ifdefs in selinux, since
|
||||
> because of the VM_DATA_DEFAULT_FLAGS setting used still in that arch,
|
||||
> the heap will always have executable permission, just like sparc does.
|
||||
> You have to support those binaries forever, whether you like it or not.
|
||||
>
|
||||
> Let's just replace the CONFIG_PPC32 ifdef in SELINUX with CONFIG_PPC32
|
||||
> || CONFIG_SPARC as in Tom's original patch and let's be done with
|
||||
> this.
|
||||
>
|
||||
> In fact I would go through all the arch/ header files and check the
|
||||
> VM_DATA_DEFAULT_FLAGS settings and add the necessary new ifdefs to the
|
||||
> SELINUX code so that other platforms don't have the pain of having to
|
||||
> go through this process too.
|
||||
|
||||
To avoid maintaining per-arch ifdefs, it seems that we could just
|
||||
directly use (VM_DATA_DEFAULT_FLAGS & VM_EXEC) as the basis for deciding
|
||||
whether to enable or disable these checks. VM_DATA_DEFAULT_FLAGS isn't
|
||||
constant on some architectures but instead depends on
|
||||
current->personality, but we want this applied uniformly. So we'll just
|
||||
use the initial task state to determine whether or not to enable these
|
||||
checks.
|
||||
|
||||
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
|
||||
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
|
||||
index ebee467..a03fd74 100644
|
||||
--- a/security/selinux/hooks.c
|
||||
+++ b/security/selinux/hooks.c
|
||||
@@ -2999,13 +2999,15 @@ static int selinux_file_ioctl(struct file *file, unsigned int cmd,
|
||||
return file_has_perm(cred, file, av);
|
||||
}
|
||||
|
||||
+static int default_noexec;
|
||||
+
|
||||
static int file_map_prot_check(struct file *file, unsigned long prot, int shared)
|
||||
{
|
||||
const struct cred *cred = current_cred();
|
||||
int rc = 0;
|
||||
|
||||
-#ifndef CONFIG_PPC32
|
||||
- if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
|
||||
+ if (default_noexec &&
|
||||
+ (prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
|
||||
/*
|
||||
* We are making executable an anonymous mapping or a
|
||||
* private file mapping that will also be writable.
|
||||
@@ -3015,7 +3017,6 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
|
||||
if (rc)
|
||||
goto error;
|
||||
}
|
||||
-#endif
|
||||
|
||||
if (file) {
|
||||
/* read access is always possible with a mapping */
|
||||
@@ -3076,8 +3077,8 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
|
||||
if (selinux_checkreqprot)
|
||||
prot = reqprot;
|
||||
|
||||
-#ifndef CONFIG_PPC32
|
||||
- if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
|
||||
+ if (default_noexec &&
|
||||
+ (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
|
||||
int rc = 0;
|
||||
if (vma->vm_start >= vma->vm_mm->start_brk &&
|
||||
vma->vm_end <= vma->vm_mm->brk) {
|
||||
@@ -3099,7 +3100,6 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
-#endif
|
||||
|
||||
return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
|
||||
}
|
||||
@@ -5662,6 +5662,8 @@ static __init int selinux_init(void)
|
||||
/* Set the security state for the initial task. */
|
||||
cred_init_security();
|
||||
|
||||
+ default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
|
||||
+
|
||||
sel_inode_cache = kmem_cache_create("selinux_inode_security",
|
||||
sizeof(struct inode_security_struct),
|
||||
0, SLAB_PANIC, NULL);
|
||||
|
||||
--
|
||||
Stephen Smalley
|
||||
National Security Agency
|
||||
|
|
@ -34,23 +34,24 @@ ratelimited. It isn't particularly useful, so just remove it.
|
|||
|
||||
Signed-off-by: Dave Jones <davej@redhat.com>
|
||||
|
||||
--- linux-2.6.27.noarch/net/can/af_can.c~ 2008-12-11 16:53:48.000000000 -0500
|
||||
+++ linux-2.6.27.noarch/net/can/af_can.c 2008-12-11 16:54:42.000000000 -0500
|
||||
@@ -134,13 +134,9 @@ static int can_create(struct net *net, s
|
||||
--- a/net/can/af_can.c
|
||||
+++ b/net/can/af_can.c
|
||||
@@ -157,13 +157,9 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
|
||||
err = request_module("can-proto-%d", protocol);
|
||||
|
||||
/*
|
||||
- * In case of error we only print a message but don't
|
||||
- * return the error code immediately. Below we will
|
||||
- * return -EPROTONOSUPPORT
|
||||
+ * In case of error we don't return the error code immediately.
|
||||
+ * In case of error we but don't return the error code immediately.
|
||||
+ * Below we will return -EPROTONOSUPPORT
|
||||
*/
|
||||
- if (err && printk_ratelimit())
|
||||
- printk(KERN_ERR "can: request_module "
|
||||
- "(can-proto-%d) failed.\n", protocol);
|
||||
|
||||
cp = can_get_proto(protocol);
|
||||
}
|
||||
#endif
|
||||
|
||||
This was removed in revision 1.6 of linux-2.6-silence-noise.patch
|
||||
in ye olde CVS tree. I have no idea why. Originally the pr_debug in
|
||||
|
@ -68,5 +69,5 @@ index 2a52270..bacbdd2 100644
|
|||
- pr_debug("PM: Adding info for %s:%s\n",
|
||||
- dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
|
||||
mutex_lock(&dpm_list_mtx);
|
||||
if (dev->parent && dev->parent->power.in_suspend)
|
||||
if (dev->parent && dev->parent->power.is_prepared)
|
||||
dev_warn(dev, "parent %s should not be sleeping\n",
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
diff -up linux-2.6.24.sparc64/security/selinux/hooks.c.BAD linux-2.6.24.sparc64/security/selinux/hooks.c
|
||||
--- linux-2.6.24.sparc64/security/selinux/hooks.c.BAD 2008-03-21 14:28:06.000000000 -0400
|
||||
+++ linux-2.6.24.sparc64/security/selinux/hooks.c 2008-03-21 14:29:10.000000000 -0400
|
||||
@@ -3018,6 +3018,7 @@ static int file_map_prot_check(struct fi
|
||||
const struct cred *cred = current_cred();
|
||||
int rc = 0;
|
||||
|
||||
+#ifndef CONFIG_SPARC
|
||||
if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
|
||||
/*
|
||||
* We are making executable an anonymous mapping or a
|
||||
@@ -3028,6 +3029,7 @@ static int file_map_prot_check(struct fi
|
||||
if (rc)
|
||||
goto error;
|
||||
}
|
||||
+#endif
|
||||
|
||||
if (file) {
|
||||
/* read access is always possible with a mapping */
|
||||
@@ -3081,6 +3081,7 @@ static int selinux_file_mprotect(struct
|
||||
if (selinux_checkreqprot)
|
||||
prot = reqprot;
|
||||
|
||||
+#ifndef CONFIG_SPARC
|
||||
if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
|
||||
rc = 0;
|
||||
if (vma->vm_start >= vma->vm_mm->start_brk &&
|
||||
@@ -3103,6 +3103,7 @@ static int selinux_file_mprotect(struct
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
+#endif
|
||||
|
||||
return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
From: Oleg Nesterov <oleg@redhat.com>
|
||||
|
||||
[PATCH] signals: check ->group_stop_count after tracehook_get_signal()
|
||||
|
||||
Move the call to do_signal_stop() down, after tracehook call.
|
||||
This makes ->group_stop_count condition visible to tracers before
|
||||
do_signal_stop() will participate in this group-stop.
|
||||
|
||||
Currently the patch has no effect, tracehook_get_signal() always
|
||||
returns 0.
|
||||
|
||||
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
||||
Signed-off-by: Roland McGrath <roland@redhat.com>
|
||||
---
|
||||
include/linux/ptrace.h | 1 +
|
||||
include/linux/sched.h | 1 +
|
||||
include/linux/tracehook.h | 10 +++++-----
|
||||
kernel/ptrace.c | 2 +-
|
||||
kernel/signal.c | 4 ++--
|
||||
5 files changed, 10 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
|
||||
index 092a04f..619cdf0 100644
|
||||
--- a/include/linux/ptrace.h
|
||||
+++ b/include/linux/ptrace.h
|
||||
@@ -106,6 +106,7 @@ extern int ptrace_traceme(void);
|
||||
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
|
||||
extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
|
||||
extern int ptrace_attach(struct task_struct *tsk);
|
||||
+extern bool __ptrace_detach(struct task_struct *tracer, struct task_struct *tracee);
|
||||
extern int ptrace_detach(struct task_struct *, unsigned int);
|
||||
extern void ptrace_disable(struct task_struct *);
|
||||
extern int ptrace_check_attach(struct task_struct *task, int kill);
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 2238745..09f26df 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -2061,6 +2061,7 @@ extern int kill_pgrp(struct pid *pid, in
|
||||
extern int kill_pid(struct pid *pid, int sig, int priv);
|
||||
extern int kill_proc_info(int, struct siginfo *, pid_t);
|
||||
extern int do_notify_parent(struct task_struct *, int);
|
||||
+extern void do_notify_parent_cldstop(struct task_struct *, int);
|
||||
extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
|
||||
extern void force_sig(int, struct task_struct *);
|
||||
extern int send_sig(int, struct task_struct *, int);
|
||||
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
|
||||
index 3a2e66d..98917e9 100644
|
||||
--- a/include/linux/tracehook.h
|
||||
+++ b/include/linux/tracehook.h
|
||||
@@ -134,7 +134,7 @@ static inline __must_check int tracehook
|
||||
*/
|
||||
static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
|
||||
{
|
||||
- if (step) {
|
||||
+ if (step && (task_ptrace(current) & PT_PTRACED)) {
|
||||
siginfo_t info;
|
||||
user_single_step_siginfo(current, regs, &info);
|
||||
force_sig_info(SIGTRAP, &info, current);
|
||||
@@ -156,7 +156,7 @@ static inline int tracehook_unsafe_exec(
|
||||
{
|
||||
int unsafe = 0;
|
||||
int ptrace = task_ptrace(task);
|
||||
- if (ptrace & PT_PTRACED) {
|
||||
+ if (ptrace) {
|
||||
if (ptrace & PT_PTRACE_CAP)
|
||||
unsafe |= LSM_UNSAFE_PTRACE_CAP;
|
||||
else
|
||||
@@ -178,7 +178,7 @@ static inline int tracehook_unsafe_exec(
|
||||
*/
|
||||
static inline struct task_struct *tracehook_tracer_task(struct task_struct *tsk)
|
||||
{
|
||||
- if (task_ptrace(tsk) & PT_PTRACED)
|
||||
+ if (task_ptrace(tsk))
|
||||
return rcu_dereference(tsk->parent);
|
||||
return NULL;
|
||||
}
|
||||
@@ -386,7 +386,7 @@ static inline void tracehook_signal_hand
|
||||
const struct k_sigaction *ka,
|
||||
struct pt_regs *regs, int stepping)
|
||||
{
|
||||
- if (stepping)
|
||||
+ if (stepping && (task_ptrace(current) & PT_PTRACED))
|
||||
ptrace_notify(SIGTRAP);
|
||||
}
|
||||
|
||||
@@ -492,7 +492,7 @@ static inline int tracehook_get_signal(s
|
||||
*/
|
||||
static inline int tracehook_notify_jctl(int notify, int why)
|
||||
{
|
||||
- return notify ?: (current->ptrace & PT_PTRACED) ? why : 0;
|
||||
+ return notify ?: task_ptrace(current) ? why : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
|
||||
index 99bbaa3..84d9f8f 100644
|
||||
--- a/kernel/ptrace.c
|
||||
+++ b/kernel/ptrace.c
|
||||
@@ -270,7 +270,7 @@ static int ignoring_children(struct sigh
|
||||
* reap it now, in that case we must also wake up sub-threads sleeping in
|
||||
* do_wait().
|
||||
*/
|
||||
-static bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
|
||||
+bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
|
||||
{
|
||||
__ptrace_unlink(p);
|
||||
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 4e3cff1..b74324d 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -1522,7 +1522,7 @@ int do_notify_parent(struct task_struct
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
|
||||
+void do_notify_parent_cldstop(struct task_struct *tsk, int why)
|
||||
{
|
||||
struct siginfo info;
|
||||
unsigned long flags;
|
||||
@@ -1794,7 +1794,7 @@ static int do_signal_stop(int signr)
|
||||
static int ptrace_signal(int signr, siginfo_t *info,
|
||||
struct pt_regs *regs, void *cookie)
|
||||
{
|
||||
- if (!task_ptrace(current))
|
||||
+ if (!(task_ptrace(current) & PT_PTRACED))
|
||||
return signr;
|
||||
|
||||
ptrace_signal_deliver(regs, cookie);
|
|
@ -1,203 +1 @@
|
|||
From 97bfd0acd32e9639c9136e03955d574655d5cc2b Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Thu, 19 May 2011 14:14:43 +1000
|
||||
Subject: drm/radeon/kms: add wait idle ioctl for eg->cayman
|
||||
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
commit 97bfd0acd32e9639c9136e03955d574655d5cc2b upstream.
|
||||
|
||||
None of the latest GPUs had this hooked up, this is necessary for
|
||||
correct operation in a lot of cases, however we should test this on a few
|
||||
GPUs in these families as we've had problems in this area before.
|
||||
|
||||
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_asic.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/radeon_asic.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
|
||||
@@ -782,6 +782,7 @@ static struct radeon_asic evergreen_asic
|
||||
.hpd_fini = &evergreen_hpd_fini,
|
||||
.hpd_sense = &evergreen_hpd_sense,
|
||||
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
||||
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
||||
.gui_idle = &r600_gui_idle,
|
||||
.pm_misc = &evergreen_pm_misc,
|
||||
.pm_prepare = &evergreen_pm_prepare,
|
||||
@@ -828,6 +829,7 @@ static struct radeon_asic sumo_asic = {
|
||||
.hpd_fini = &evergreen_hpd_fini,
|
||||
.hpd_sense = &evergreen_hpd_sense,
|
||||
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
||||
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
||||
.gui_idle = &r600_gui_idle,
|
||||
.pm_misc = &evergreen_pm_misc,
|
||||
.pm_prepare = &evergreen_pm_prepare,
|
||||
@@ -874,6 +876,8 @@ static struct radeon_asic btc_asic = {
|
||||
.hpd_fini = &evergreen_hpd_fini,
|
||||
.hpd_sense = &evergreen_hpd_sense,
|
||||
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
||||
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
||||
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
||||
.gui_idle = &r600_gui_idle,
|
||||
.pm_misc = &evergreen_pm_misc,
|
||||
.pm_prepare = &evergreen_pm_prepare,
|
||||
From f25a5c63bfa017498c9adecb24d649ae96ba5c68 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Thu, 19 May 2011 11:07:57 -0400
|
||||
Subject: drm/radeon/evergreen/btc/fusion: setup hdp to invalidate and
|
||||
flush when asked
|
||||
|
||||
From: Alex Deucher <alexdeucher@gmail.com>
|
||||
|
||||
commit f25a5c63bfa017498c9adecb24d649ae96ba5c68 upstream.
|
||||
|
||||
This needs to be explicitly set on btc. It's set by default
|
||||
on evergreen/fusion, so it fine to just unconditionally enable it for
|
||||
all chips.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@gmail.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/radeon/evergreen.c | 6 +++++-
|
||||
drivers/gpu/drm/radeon/evergreend.h | 2 ++
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/evergreen.c
|
||||
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
||||
@@ -1585,7 +1585,7 @@ static void evergreen_gpu_init(struct ra
|
||||
u32 sq_stack_resource_mgmt_2;
|
||||
u32 sq_stack_resource_mgmt_3;
|
||||
u32 vgt_cache_invalidation;
|
||||
- u32 hdp_host_path_cntl;
|
||||
+ u32 hdp_host_path_cntl, tmp;
|
||||
int i, j, num_shader_engines, ps_thread_count;
|
||||
|
||||
switch (rdev->family) {
|
||||
@@ -2145,6 +2145,10 @@ static void evergreen_gpu_init(struct ra
|
||||
for (i = SQ_ALU_CONST_BUFFER_SIZE_HS_0; i < 0x29000; i += 4)
|
||||
WREG32(i, 0);
|
||||
|
||||
+ tmp = RREG32(HDP_MISC_CNTL);
|
||||
+ tmp |= HDP_FLUSH_INVALIDATE_CACHE;
|
||||
+ WREG32(HDP_MISC_CNTL, tmp);
|
||||
+
|
||||
hdp_host_path_cntl = RREG32(HDP_HOST_PATH_CNTL);
|
||||
WREG32(HDP_HOST_PATH_CNTL, hdp_host_path_cntl);
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/evergreend.h
|
||||
+++ b/drivers/gpu/drm/radeon/evergreend.h
|
||||
@@ -64,6 +64,8 @@
|
||||
#define GB_BACKEND_MAP 0x98FC
|
||||
#define DMIF_ADDR_CONFIG 0xBD4
|
||||
#define HDP_ADDR_CONFIG 0x2F48
|
||||
+#define HDP_MISC_CNTL 0x2F4C
|
||||
+#define HDP_FLUSH_INVALIDATE_CACHE (1 << 0)
|
||||
|
||||
#define CC_SYS_RB_BACKEND_DISABLE 0x3F88
|
||||
#define GC_USER_RB_BACKEND_DISABLE 0x9B7C
|
||||
From alexdeucher@gmail.com Mon May 9 16:35:34 2011
|
||||
From: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Fri, 6 May 2011 14:29:55 -0400
|
||||
Subject: [stable] [PATCH] drm/radeon/kms: fix gart setup on fusion parts (v2) backport
|
||||
To: stable@kernel.org
|
||||
Cc: Alex Deucher <alexdeucher@gmail.com>, airlied@redhat.com, gregkh@suse.de
|
||||
Message-ID: <1304706595-9781-1-git-send-email-alexdeucher@gmail.com>
|
||||
|
||||
From: Alex Deucher <alexdeucher@gmail.com>
|
||||
|
||||
Backport of 8aeb96f80232e9a701b5c4715504f4c9173978bd
|
||||
(drm/radeon/kms: fix gart setup on fusion parts (v2))
|
||||
to the stable tree.
|
||||
|
||||
Out of the entire GART/VM subsystem, the hw designers changed
|
||||
the location of 3 regs.
|
||||
|
||||
v2: airlied: add parameter for userspace to work from.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
---
|
||||
drivers/gpu/drm/radeon/evergreen.c | 17 +++++++++--------
|
||||
drivers/gpu/drm/radeon/evergreend.h | 5 +++++
|
||||
drivers/gpu/drm/radeon/radeon_kms.c | 3 +++
|
||||
include/drm/radeon_drm.h | 1 +
|
||||
4 files changed, 18 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/evergreen.c
|
||||
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
||||
@@ -869,9 +869,15 @@ int evergreen_pcie_gart_enable(struct ra
|
||||
SYSTEM_ACCESS_MODE_NOT_IN_SYS |
|
||||
SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU |
|
||||
EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5);
|
||||
- WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
|
||||
- WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
|
||||
- WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
|
||||
+ if (rdev->flags & RADEON_IS_IGP) {
|
||||
+ WREG32(FUS_MC_VM_MD_L1_TLB0_CNTL, tmp);
|
||||
+ WREG32(FUS_MC_VM_MD_L1_TLB1_CNTL, tmp);
|
||||
+ WREG32(FUS_MC_VM_MD_L1_TLB2_CNTL, tmp);
|
||||
+ } else {
|
||||
+ WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
|
||||
+ WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
|
||||
+ WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
|
||||
+ }
|
||||
WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
|
||||
WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
|
||||
WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp);
|
||||
@@ -2930,11 +2936,6 @@ static int evergreen_startup(struct rade
|
||||
rdev->asic->copy = NULL;
|
||||
dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
|
||||
}
|
||||
- /* XXX: ontario has problems blitting to gart at the moment */
|
||||
- if (rdev->family == CHIP_PALM) {
|
||||
- rdev->asic->copy = NULL;
|
||||
- radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
- }
|
||||
|
||||
/* allocate wb buffer */
|
||||
r = radeon_wb_init(rdev);
|
||||
--- a/drivers/gpu/drm/radeon/evergreend.h
|
||||
+++ b/drivers/gpu/drm/radeon/evergreend.h
|
||||
@@ -221,6 +221,11 @@
|
||||
#define MC_VM_MD_L1_TLB0_CNTL 0x2654
|
||||
#define MC_VM_MD_L1_TLB1_CNTL 0x2658
|
||||
#define MC_VM_MD_L1_TLB2_CNTL 0x265C
|
||||
+
|
||||
+#define FUS_MC_VM_MD_L1_TLB0_CNTL 0x265C
|
||||
+#define FUS_MC_VM_MD_L1_TLB1_CNTL 0x2660
|
||||
+#define FUS_MC_VM_MD_L1_TLB2_CNTL 0x2664
|
||||
+
|
||||
#define MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203C
|
||||
#define MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038
|
||||
#define MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
|
||||
--- a/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
@@ -205,6 +205,9 @@ int radeon_info_ioctl(struct drm_device
|
||||
/* return clock value in KHz */
|
||||
value = rdev->clock.spll.reference_freq * 10;
|
||||
break;
|
||||
+ case RADEON_INFO_FUSION_GART_WORKING:
|
||||
+ value = 1;
|
||||
+ break;
|
||||
default:
|
||||
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
|
||||
return -EINVAL;
|
||||
--- a/include/drm/radeon_drm.h
|
||||
+++ b/include/drm/radeon_drm.h
|
||||
@@ -908,6 +908,7 @@ struct drm_radeon_cs {
|
||||
#define RADEON_INFO_WANT_HYPERZ 0x07
|
||||
#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */
|
||||
#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */
|
||||
+#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */
|
||||
|
||||
struct drm_radeon_info {
|
||||
uint32_t request;
|
||||
nil
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,47 +0,0 @@
|
|||
Revert:
|
||||
commit e3e89cc535223433a619d0969db3fa05cdd946b8
|
||||
("Mark ptrace_{traceme,attach,detach} static")
|
||||
|
||||
--- b/include/linux/ptrace.h
|
||||
+++ a/include/linux/ptrace.h
|
||||
@@ -102,8 +102,11 @@
|
||||
|
||||
extern long arch_ptrace(struct task_struct *child, long request,
|
||||
unsigned long addr, unsigned long data);
|
||||
+extern int ptrace_traceme(void);
|
||||
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
|
||||
extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
|
||||
+extern int ptrace_attach(struct task_struct *tsk);
|
||||
+extern int ptrace_detach(struct task_struct *, unsigned int);
|
||||
extern void ptrace_disable(struct task_struct *);
|
||||
extern int ptrace_check_attach(struct task_struct *task, int kill);
|
||||
extern int ptrace_request(struct task_struct *child, long request,
|
||||
--- b/kernel/ptrace.c
|
||||
+++ a/kernel/ptrace.c
|
||||
@@ -163,7 +163,7 @@
|
||||
return !err;
|
||||
}
|
||||
|
||||
+int ptrace_attach(struct task_struct *task)
|
||||
-static int ptrace_attach(struct task_struct *task)
|
||||
{
|
||||
int retval;
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
* Performs checks and sets PT_PTRACED.
|
||||
* Should be used by all ptrace implementations for PTRACE_TRACEME.
|
||||
*/
|
||||
+int ptrace_traceme(void)
|
||||
-static int ptrace_traceme(void)
|
||||
{
|
||||
int ret = -EPERM;
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
+int ptrace_detach(struct task_struct *child, unsigned int data)
|
||||
-static int ptrace_detach(struct task_struct *child, unsigned int data)
|
||||
{
|
||||
bool dead = false;
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,82 +0,0 @@
|
|||
commit 7a1d6564a15183cb5994656040966df09af8390f
|
||||
Author: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
|
||||
Date: Mon Jun 20 14:42:28 2011 +0300
|
||||
|
||||
zd1211rw: fix invalid signal values from device
|
||||
|
||||
Driver uses IEEE80211_HW_SIGNAL_UNSPEC and so signal values reported to
|
||||
mac80211 should be in range 0..100. Sometimes device return out of range
|
||||
values. These out of range values can then trigger warning in
|
||||
cfg80211_inform_bss_frame.
|
||||
|
||||
This patch adds checks to enforce range returned from driver to
|
||||
mac80211 be in 0..100 range.
|
||||
|
||||
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
|
||||
diff --git a/drivers/net/wireless/zd1211rw/zd_def.h b/drivers/net/wireless/zd1211rw/zd_def.h
|
||||
index 5463ca9..9a1b013 100644
|
||||
--- a/drivers/net/wireless/zd1211rw/zd_def.h
|
||||
+++ b/drivers/net/wireless/zd1211rw/zd_def.h
|
||||
@@ -37,9 +37,15 @@ typedef u16 __nocast zd_addr_t;
|
||||
if (net_ratelimit()) \
|
||||
dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
|
||||
} while (0)
|
||||
+# define dev_dbg_f_cond(dev, cond, fmt, args...) ({ \
|
||||
+ bool __cond = !!(cond); \
|
||||
+ if (unlikely(__cond)) \
|
||||
+ dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
|
||||
+})
|
||||
#else
|
||||
# define dev_dbg_f(dev, fmt, args...) do { (void)(dev); } while (0)
|
||||
# define dev_dbg_f_limit(dev, fmt, args...) do { (void)(dev); } while (0)
|
||||
+# define dev_dbg_f_cond(dev, cond, fmt, args...) do { (void)(dev); } while (0)
|
||||
#endif /* DEBUG */
|
||||
|
||||
#ifdef DEBUG
|
||||
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
|
||||
index 5037c8b..5de28bf 100644
|
||||
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
|
||||
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
|
||||
@@ -160,6 +160,22 @@ static int zd_reg2alpha2(u8 regdomain, char *alpha2)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static int zd_check_signal(struct ieee80211_hw *hw, int signal)
|
||||
+{
|
||||
+ struct zd_mac *mac = zd_hw_mac(hw);
|
||||
+
|
||||
+ dev_dbg_f_cond(zd_mac_dev(mac), signal < 0 || signal > 100,
|
||||
+ "%s: signal value from device not in range 0..100, "
|
||||
+ "but %d.\n", __func__, signal);
|
||||
+
|
||||
+ if (signal < 0)
|
||||
+ signal = 0;
|
||||
+ else if (signal > 100)
|
||||
+ signal = 100;
|
||||
+
|
||||
+ return signal;
|
||||
+}
|
||||
+
|
||||
int zd_mac_preinit_hw(struct ieee80211_hw *hw)
|
||||
{
|
||||
int r;
|
||||
@@ -461,7 +477,7 @@ static void zd_mac_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||
if (i<IEEE80211_TX_MAX_RATES)
|
||||
info->status.rates[i].idx = -1; /* terminate */
|
||||
|
||||
- info->status.ack_signal = ackssi;
|
||||
+ info->status.ack_signal = zd_check_signal(hw, ackssi);
|
||||
ieee80211_tx_status_irqsafe(hw, skb);
|
||||
}
|
||||
|
||||
@@ -982,7 +998,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
|
||||
|
||||
stats.freq = zd_channels[_zd_chip_get_channel(&mac->chip) - 1].center_freq;
|
||||
stats.band = IEEE80211_BAND_2GHZ;
|
||||
- stats.signal = status->signal_strength;
|
||||
+ stats.signal = zd_check_signal(hw, status->signal_strength);
|
||||
|
||||
rate = zd_rx_rate(buffer, status);
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
From: Luciano Coelho <coelho@ti.com>
|
||||
Date: Wed, 18 May 2011 21:43:38 +0000 (+0300)
|
||||
Subject: nl80211: fix check for valid SSID size in scan operations
|
||||
X-Git-Tag: v3.0-rc2~7^2~16^2~12
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=208c72f4fe44fe09577e7975ba0e7fa0278f3d03
|
||||
|
||||
nl80211: fix check for valid SSID size in scan operations
|
||||
[ 2.6.38 backport ]
|
||||
|
||||
In both trigger_scan and sched_scan operations, we were checking for
|
||||
the SSID length before assigning the value correctly. Since the
|
||||
memory was just kzalloc'ed, the check was always failing and SSID with
|
||||
over 32 characters were allowed to go through.
|
||||
|
||||
This was causing a buffer overflow when copying the actual SSID to the
|
||||
proper place.
|
||||
|
||||
This bug has been there since 2.6.29-rc4.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
|
||||
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
|
||||
index ec83f41..88a565f 100644
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -3406,12 +3406,12 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||
i = 0;
|
||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) {
|
||||
nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) {
|
||||
+ request->ssids[i].ssid_len = nla_len(attr);
|
||||
if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) {
|
||||
err = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr));
|
||||
- request->ssids[i].ssid_len = nla_len(attr);
|
||||
i++;
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
From: Luciano Coelho <coelho@ti.com>
|
||||
Date: Tue, 7 Jun 2011 17:42:26 +0000 (+0300)
|
||||
Subject: nl80211: fix overflow in ssid_len
|
||||
X-Git-Tag: v3.0-rc4~5^2~13^2~6
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=57a27e1d6a3bb9ad4efeebd3a8c71156d6207536
|
||||
|
||||
nl80211: fix overflow in ssid_len
|
||||
[ 2.6.38 backport ]
|
||||
|
||||
When one of the SSID's length passed in a scan or sched_scan request
|
||||
is larger than 255, there will be an overflow in the u8 that is used
|
||||
to store the length before checking. This causes the check to fail
|
||||
and we overrun the buffer when copying the SSID.
|
||||
|
||||
Fix this by checking the nl80211 attribute length before copying it to
|
||||
the struct.
|
||||
|
||||
This is a follow up for the previous commit
|
||||
208c72f4fe44fe09577e7975ba0e7fa0278f3d03, which didn't fix the problem
|
||||
entirely.
|
||||
|
||||
Reported-by: Ido Yariv <ido@wizery.com>
|
||||
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
|
||||
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
|
||||
index 88a565f..98fa8eb 100644
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -3406,11 +3406,11 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||
i = 0;
|
||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) {
|
||||
nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) {
|
||||
- request->ssids[i].ssid_len = nla_len(attr);
|
||||
- if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) {
|
||||
+ if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) {
|
||||
err = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
+ request->ssids[i].ssid_len = nla_len(attr);
|
||||
memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr));
|
||||
i++;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
Date: Thu, 10 Mar 2011 18:54:16 +0000 (-0700)
|
||||
Subject: PCI: Enable ASPM state clearing regardless of policy
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=1a4e6a3c049bba1574c2a80af44f0ceb5c1abf83
|
||||
|
||||
PCI: Enable ASPM state clearing regardless of policy
|
||||
|
||||
Commit 2f671e2d allowed us to clear ASPM state when the FADT
|
||||
tells us it isn't supported, but we don't put this into effect
|
||||
if the aspm_policy is set to POLICY_POWERSAVE. Enable the
|
||||
state to be cleared regardless of policy.
|
||||
|
||||
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
||||
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
---
|
||||
|
||||
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
|
||||
index eee09f7..3eb667b 100644
|
||||
--- a/drivers/pci/pcie/aspm.c
|
||||
+++ b/drivers/pci/pcie/aspm.c
|
||||
@@ -608,7 +608,7 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
|
||||
* the BIOS's expectation, we'll do so once pci_enable_device() is
|
||||
* called.
|
||||
*/
|
||||
- if (aspm_policy != POLICY_POWERSAVE) {
|
||||
+ if (aspm_policy != POLICY_POWERSAVE || aspm_clear_state) {
|
||||
pcie_config_aspm_path(link);
|
||||
pcie_set_clkpm(link, policy_to_clkpm_state(link));
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
From: Naga Chumbalkar <nagananda.chumbalkar@hp.com>
|
||||
Date: Mon, 21 Mar 2011 03:29:08 +0000 (+0000)
|
||||
Subject: PCI: PCIe links may not get configured for ASPM under POWERSAVE mode
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=1a680b7c325882188865f05b9a88d32f75f26495
|
||||
|
||||
PCI: PCIe links may not get configured for ASPM under POWERSAVE mode
|
||||
|
||||
v3 -> v2: Moved ASPM enabling logic to pci_set_power_state()
|
||||
v2 -> v1: Preserved the logic in pci_raw_set_power_state()
|
||||
: Added ASPM enabling logic after scanning Root Bridge
|
||||
: http://marc.info/?l=linux-pci&m=130046996216391&w=2
|
||||
v1 : http://marc.info/?l=linux-pci&m=130013164703283&w=2
|
||||
|
||||
The assumption made in commit 41cd766b065970ff6f6c89dd1cf55fa706c84a3d
|
||||
(PCI: Don't enable aspm before drivers have had a chance to veto it) that
|
||||
pci_enable_device() will result in re-configuring ASPM when aspm_policy is
|
||||
POWERSAVE is no longer valid. This is due to commit
|
||||
97c145f7c87453cec90e91238fba5fe2c1561b32 (PCI: read current power state
|
||||
at enable time) which resets dev->current_state to D0. Due to this the
|
||||
call to pcie_aspm_pm_state_change() is never made. Note the equality check
|
||||
(below) that returns early:
|
||||
./drivers/pci/pci.c: pci_raw_set_pci_power_state()
|
||||
546 /* Check if we're already there */
|
||||
547 if (dev->current_state == state)
|
||||
548 return 0;
|
||||
|
||||
Therefore OSPM never configures the PCIe links for ASPM to turn them "on".
|
||||
|
||||
Fix it by configuring ASPM from the pci_enable_device() code path. This
|
||||
also allows a driver such as the e1000e networking driver a chance to
|
||||
disable ASPM (L0s, L1), if need be, prior to enabling the device. A
|
||||
driver may perform this action if the device is known to mis-behave
|
||||
wrt ASPM.
|
||||
|
||||
Signed-off-by: Naga Chumbalkar <nagananda.chumbalkar@hp.com>
|
||||
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
---
|
||||
|
||||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
|
||||
index b714d78..2472e71 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -740,6 +740,12 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
|
||||
|
||||
if (!__pci_complete_power_transition(dev, state))
|
||||
error = 0;
|
||||
+ /*
|
||||
+ * When aspm_policy is "powersave" this call ensures
|
||||
+ * that ASPM is configured.
|
||||
+ */
|
||||
+ if (!error && dev->bus->self)
|
||||
+ pcie_aspm_powersave_config_link(dev->bus->self);
|
||||
|
||||
return error;
|
||||
}
|
||||
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
|
||||
index bbdb4fd..e61b82e 100644
|
||||
--- a/drivers/pci/pcie/aspm.c
|
||||
+++ b/drivers/pci/pcie/aspm.c
|
||||
@@ -708,6 +708,28 @@ void pcie_aspm_pm_state_change(struct pci_dev *pdev)
|
||||
up_read(&pci_bus_sem);
|
||||
}
|
||||
|
||||
+void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
|
||||
+{
|
||||
+ struct pcie_link_state *link = pdev->link_state;
|
||||
+
|
||||
+ if (aspm_disabled || !pci_is_pcie(pdev) || !link)
|
||||
+ return;
|
||||
+
|
||||
+ if (aspm_policy != POLICY_POWERSAVE)
|
||||
+ return;
|
||||
+
|
||||
+ if ((pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT) &&
|
||||
+ (pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM))
|
||||
+ return;
|
||||
+
|
||||
+ down_read(&pci_bus_sem);
|
||||
+ mutex_lock(&aspm_lock);
|
||||
+ pcie_config_aspm_path(link);
|
||||
+ pcie_set_clkpm(link, policy_to_clkpm_state(link));
|
||||
+ mutex_unlock(&aspm_lock);
|
||||
+ up_read(&pci_bus_sem);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* pci_disable_link_state - disable pci device's link state, so the link will
|
||||
* never enter specific states
|
||||
diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
|
||||
index ce68105..67cb3ae 100644
|
||||
--- a/include/linux/pci-aspm.h
|
||||
+++ b/include/linux/pci-aspm.h
|
||||
@@ -26,6 +26,7 @@
|
||||
extern void pcie_aspm_init_link_state(struct pci_dev *pdev);
|
||||
extern void pcie_aspm_exit_link_state(struct pci_dev *pdev);
|
||||
extern void pcie_aspm_pm_state_change(struct pci_dev *pdev);
|
||||
+extern void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
|
||||
extern void pci_disable_link_state(struct pci_dev *pdev, int state);
|
||||
extern void pcie_clear_aspm(void);
|
||||
extern void pcie_no_aspm(void);
|
||||
@@ -39,6 +40,9 @@ static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev)
|
||||
static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev)
|
||||
{
|
||||
}
|
||||
+static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
|
||||
+{
|
||||
+}
|
||||
static inline void pci_disable_link_state(struct pci_dev *pdev, int state)
|
||||
{
|
||||
}
|
|
@ -1,214 +0,0 @@
|
|||
From: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Date: Sun, 13 Mar 2011 02:19:51 +0000 (+0100)
|
||||
Subject: printk: do not mangle valid userspace syslog prefixes
|
||||
X-Git-Tag: v2.6.39-rc1~471^2
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9d90c8d9cde929cbc575098e825d7c29d9f45054
|
||||
|
||||
printk: do not mangle valid userspace syslog prefixes
|
||||
|
||||
printk: do not mangle valid userspace syslog prefixes with /dev/kmsg
|
||||
|
||||
Log messages passed to the kernel log by using /dev/kmsg or /dev/ttyprintk
|
||||
might contain a syslog prefix including the syslog facility value.
|
||||
|
||||
This makes printk to recognize these headers properly, extract the real log
|
||||
level from it to use, and add the prefix as a proper prefix to the
|
||||
log buffer, instead of wrongly printing it as the log message text.
|
||||
|
||||
Before:
|
||||
$ echo '<14>text' > /dev/kmsg
|
||||
$ dmesg -r
|
||||
<4>[135159.594810] <14>text
|
||||
|
||||
After:
|
||||
$ echo '<14>text' > /dev/kmsg
|
||||
$ dmesg -r
|
||||
<14>[ 50.750654] text
|
||||
|
||||
Cc: Lennart Poettering <lennart@poettering.net>
|
||||
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
---
|
||||
|
||||
diff --git a/kernel/printk.c b/kernel/printk.c
|
||||
index 2ddbdc7..5e3d042 100644
|
||||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -499,6 +499,71 @@ static void _call_console_drivers(unsigned start,
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Parse the syslog header <[0-9]*>. The decimal value represents 32bit, the
|
||||
+ * lower 3 bit are the log level, the rest are the log facility. In case
|
||||
+ * userspace passes usual userspace syslog messages to /dev/kmsg or
|
||||
+ * /dev/ttyprintk, the log prefix might contain the facility. Printk needs
|
||||
+ * to extract the correct log level for in-kernel processing, and not mangle
|
||||
+ * the original value.
|
||||
+ *
|
||||
+ * If a prefix is found, the length of the prefix is returned. If 'level' is
|
||||
+ * passed, it will be filled in with the log level without a possible facility
|
||||
+ * value. If 'special' is passed, the special printk prefix chars are accepted
|
||||
+ * and returned. If no valid header is found, 0 is returned and the passed
|
||||
+ * variables are not touched.
|
||||
+ */
|
||||
+static size_t log_prefix(const char *p, unsigned int *level, char *special)
|
||||
+{
|
||||
+ unsigned int lev = 0;
|
||||
+ char sp = '\0';
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (p[0] != '<' || !p[1])
|
||||
+ return 0;
|
||||
+ if (p[2] == '>') {
|
||||
+ /* usual single digit level number or special char */
|
||||
+ switch (p[1]) {
|
||||
+ case '0' ... '7':
|
||||
+ lev = p[1] - '0';
|
||||
+ break;
|
||||
+ case 'c': /* KERN_CONT */
|
||||
+ case 'd': /* KERN_DEFAULT */
|
||||
+ sp = p[1];
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+ len = 3;
|
||||
+ } else {
|
||||
+ /* multi digit including the level and facility number */
|
||||
+ char *endp = NULL;
|
||||
+
|
||||
+ if (p[1] < '0' && p[1] > '9')
|
||||
+ return 0;
|
||||
+
|
||||
+ lev = (simple_strtoul(&p[1], &endp, 10) & 7);
|
||||
+ if (endp == NULL || endp[0] != '>')
|
||||
+ return 0;
|
||||
+ len = (endp + 1) - p;
|
||||
+ }
|
||||
+
|
||||
+ /* do not accept special char if not asked for */
|
||||
+ if (sp && !special)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (special) {
|
||||
+ *special = sp;
|
||||
+ /* return special char, do not touch level */
|
||||
+ if (sp)
|
||||
+ return len;
|
||||
+ }
|
||||
+
|
||||
+ if (level)
|
||||
+ *level = lev;
|
||||
+ return len;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Call the console drivers, asking them to write out
|
||||
* log_buf[start] to log_buf[end - 1].
|
||||
* The console_lock must be held.
|
||||
@@ -513,13 +578,9 @@ static void call_console_drivers(unsigned start, unsigned end)
|
||||
cur_index = start;
|
||||
start_print = start;
|
||||
while (cur_index != end) {
|
||||
- if (msg_level < 0 && ((end - cur_index) > 2) &&
|
||||
- LOG_BUF(cur_index + 0) == '<' &&
|
||||
- LOG_BUF(cur_index + 1) >= '0' &&
|
||||
- LOG_BUF(cur_index + 1) <= '7' &&
|
||||
- LOG_BUF(cur_index + 2) == '>') {
|
||||
- msg_level = LOG_BUF(cur_index + 1) - '0';
|
||||
- cur_index += 3;
|
||||
+ if (msg_level < 0 && ((end - cur_index) > 2)) {
|
||||
+ /* strip log prefix */
|
||||
+ cur_index += log_prefix(&LOG_BUF(cur_index), &msg_level, NULL);
|
||||
start_print = cur_index;
|
||||
}
|
||||
while (cur_index != end) {
|
||||
@@ -717,6 +778,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
unsigned long flags;
|
||||
int this_cpu;
|
||||
char *p;
|
||||
+ size_t plen;
|
||||
+ char special;
|
||||
|
||||
boot_delay_msec();
|
||||
printk_delay();
|
||||
@@ -757,45 +820,52 @@ asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
printed_len += vscnprintf(printk_buf + printed_len,
|
||||
sizeof(printk_buf) - printed_len, fmt, args);
|
||||
|
||||
-
|
||||
p = printk_buf;
|
||||
|
||||
- /* Do we have a loglevel in the string? */
|
||||
- if (p[0] == '<') {
|
||||
- unsigned char c = p[1];
|
||||
- if (c && p[2] == '>') {
|
||||
- switch (c) {
|
||||
- case '0' ... '7': /* loglevel */
|
||||
- current_log_level = c - '0';
|
||||
- /* Fallthrough - make sure we're on a new line */
|
||||
- case 'd': /* KERN_DEFAULT */
|
||||
- if (!new_text_line) {
|
||||
- emit_log_char('\n');
|
||||
- new_text_line = 1;
|
||||
- }
|
||||
- /* Fallthrough - skip the loglevel */
|
||||
- case 'c': /* KERN_CONT */
|
||||
- p += 3;
|
||||
- break;
|
||||
+ /* Read log level and handle special printk prefix */
|
||||
+ plen = log_prefix(p, ¤t_log_level, &special);
|
||||
+ if (plen) {
|
||||
+ p += plen;
|
||||
+
|
||||
+ switch (special) {
|
||||
+ case 'c': /* Strip <c> KERN_CONT, continue line */
|
||||
+ plen = 0;
|
||||
+ break;
|
||||
+ case 'd': /* Strip <d> KERN_DEFAULT, start new line */
|
||||
+ plen = 0;
|
||||
+ default:
|
||||
+ if (!new_text_line) {
|
||||
+ emit_log_char('\n');
|
||||
+ new_text_line = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
- * Copy the output into log_buf. If the caller didn't provide
|
||||
- * appropriate log level tags, we insert them here
|
||||
+ * Copy the output into log_buf. If the caller didn't provide
|
||||
+ * the appropriate log prefix, we insert them here
|
||||
*/
|
||||
- for ( ; *p; p++) {
|
||||
+ for (; *p; p++) {
|
||||
if (new_text_line) {
|
||||
- /* Always output the token */
|
||||
- emit_log_char('<');
|
||||
- emit_log_char(current_log_level + '0');
|
||||
- emit_log_char('>');
|
||||
- printed_len += 3;
|
||||
new_text_line = 0;
|
||||
|
||||
+ if (plen) {
|
||||
+ /* Copy original log prefix */
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < plen; i++)
|
||||
+ emit_log_char(printk_buf[i]);
|
||||
+ printed_len += plen;
|
||||
+ } else {
|
||||
+ /* Add log prefix */
|
||||
+ emit_log_char('<');
|
||||
+ emit_log_char(current_log_level + '0');
|
||||
+ emit_log_char('>');
|
||||
+ printed_len += 3;
|
||||
+ }
|
||||
+
|
||||
if (printk_time) {
|
||||
- /* Follow the token with the time */
|
||||
+ /* Add the current time stamp */
|
||||
char tbuf[50], *tp;
|
||||
unsigned tlen;
|
||||
unsigned long long t;
|
|
@ -1,21 +0,0 @@
|
|||
revert c055f5b2614b4f758ae6cc86733f31fa4c2c5844 from 2.6.38.6
|
||||
|
||||
--- b/drivers/scsi/scsi_lib.c
|
||||
+++ a/drivers/scsi/scsi_lib.c
|
||||
@@ -400,15 +400,10 @@
|
||||
static void scsi_run_queue(struct request_queue *q)
|
||||
{
|
||||
struct scsi_device *sdev = q->queuedata;
|
||||
+ struct Scsi_Host *shost = sdev->host;
|
||||
- struct Scsi_Host *shost;
|
||||
LIST_HEAD(starved_list);
|
||||
unsigned long flags;
|
||||
|
||||
- /* if the device is dead, sdev will be NULL, so no queue to run */
|
||||
- if (!sdev)
|
||||
- return;
|
||||
-
|
||||
- shost = sdev->host;
|
||||
if (scsi_target(sdev)->single_lun)
|
||||
scsi_single_lun_run(sdev);
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From: Jiri Kosina <jkosina@suse.cz>
|
||||
Date: Thu, 16 Jun 2011 10:21:34 +0000 (+0200)
|
||||
Subject: Revert "HID: magicmouse: ignore 'ivalid report id' while switching modes"
|
||||
X-Git-Tag: v3.0-rc4~20^2
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c3a4924565e2eecf2539871abd123d35be6d76d5
|
||||
|
||||
Revert "HID: magicmouse: ignore 'ivalid report id' while switching modes"
|
||||
|
||||
This reverts commit 23746a66d7d9e73402c68ef00d708796b97ebd72.
|
||||
|
||||
It turned out that the actual reason for failure is not the device
|
||||
firmware, but bug in Bluetooth stack, which will be fixed by
|
||||
patch by Ville Tervo which corrects the mask handling for CSR 1.1
|
||||
Dongles.
|
||||
|
||||
Reported-and-tested-by: Ed Tomlinson <edt@aei.ca>
|
||||
Reported-and-tested-by: Chase Douglas <chase.douglas@canonical.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
|
||||
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
|
||||
index a5eda4c..0ec91c1 100644
|
||||
--- a/drivers/hid/hid-magicmouse.c
|
||||
+++ b/drivers/hid/hid-magicmouse.c
|
||||
@@ -501,17 +501,9 @@ static int magicmouse_probe(struct hid_device *hdev,
|
||||
}
|
||||
report->size = 6;
|
||||
|
||||
- /*
|
||||
- * The device reponds with 'invalid report id' when feature
|
||||
- * report switching it into multitouch mode is sent to it.
|
||||
- *
|
||||
- * This results in -EIO from the _raw low-level transport callback,
|
||||
- * but there seems to be no other way of switching the mode.
|
||||
- * Thus the super-ugly hacky success check below.
|
||||
- */
|
||||
ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature),
|
||||
HID_FEATURE_REPORT);
|
||||
- if (ret != -EIO) {
|
||||
+ if (ret != sizeof(feature)) {
|
||||
hid_err(hdev, "unable to request touch data (%d)\n", ret);
|
||||
goto err_stop_hw;
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
reverte 86cbfb5607d4b81b1a993ff689bbd2addd5d3a9b from 2.6.38.6
|
||||
|
||||
--- b/drivers/scsi/scsi_sysfs.c
|
||||
+++ a/drivers/scsi/scsi_sysfs.c
|
||||
@@ -322,8 +322,14 @@
|
||||
kfree(evt);
|
||||
}
|
||||
|
||||
+ if (sdev->request_queue) {
|
||||
+ sdev->request_queue->queuedata = NULL;
|
||||
+ /* user context needed to free queue */
|
||||
+ scsi_free_queue(sdev->request_queue);
|
||||
+ /* temporary expedient, try to catch use of queue lock
|
||||
+ * after free of sdev */
|
||||
+ sdev->request_queue = NULL;
|
||||
+ }
|
||||
- /* NULL queue means the device can't be used */
|
||||
- sdev->request_queue = NULL;
|
||||
|
||||
scsi_target_reap(scsi_target(sdev));
|
||||
|
||||
@@ -931,12 +937,6 @@
|
||||
if (sdev->host->hostt->slave_destroy)
|
||||
sdev->host->hostt->slave_destroy(sdev);
|
||||
transport_destroy_device(dev);
|
||||
-
|
||||
- /* cause the request function to reject all I/O requests */
|
||||
- sdev->request_queue->queuedata = NULL;
|
||||
-
|
||||
- /* Freeing the queue signals to block that we're done */
|
||||
- scsi_free_queue(sdev->request_queue);
|
||||
put_device(dev);
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
|
||||
index e567302..261638a 100644
|
||||
--- a/drivers/scsi/sd.c
|
||||
+++ b/drivers/scsi/sd.c
|
||||
@@ -1956,12 +1956,12 @@ sd_read_cache_type(struct scsi_disk *sdk
|
||||
int offset = data.header_length + data.block_descriptor_length;
|
||||
|
||||
if (offset >= SD_BUF_SIZE - 2) {
|
||||
- sd_printk(KERN_ERR, sdkp, "Malformed MODE SENSE response\n");
|
||||
+ sd_printk(KERN_NOTICE, sdkp, "Malformed MODE SENSE response\n");
|
||||
goto defaults;
|
||||
}
|
||||
|
||||
if ((buffer[offset] & 0x3f) != modepage) {
|
||||
- sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
|
||||
+ sd_printk(KERN_NOTICE, sdkp, "Got wrong page\n");
|
||||
goto defaults;
|
||||
}
|
||||
|
||||
@@ -2033,7 +2033,7 @@ bad_sense:
|
||||
sd_printk(KERN_ERR, sdkp, "Asking for cache data failed\n");
|
||||
|
||||
defaults:
|
||||
- sd_printk(KERN_ERR, sdkp, "Assuming drive cache: write through\n");
|
||||
+ sd_printk(KERN_NOTICE, sdkp, "Assuming drive cache: write through\n");
|
||||
sdkp->WCE = 0;
|
||||
sdkp->RCD = 0;
|
||||
sdkp->DPOFUA = 0;
|
|
@ -1,32 +0,0 @@
|
|||
From 7a1e9d829f8bd821466c5ea834ad6f378740d2be Mon Sep 17 00:00:00 2001
|
||||
From: Mike Snitzer <snitzer@redhat.com>
|
||||
Date: Tue, 25 Jan 2011 11:52:17 -0500
|
||||
Subject: [SCSI] scsi_dh_hp_sw: fix deadlock in start_stop_endio
|
||||
|
||||
The use of blk_execute_rq_nowait() implies __blk_put_request() is needed
|
||||
in start_stop_endio() rather than blk_put_request() --
|
||||
blk_finish_request() is called with queue lock already held.
|
||||
|
||||
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
|
||||
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
|
||||
---
|
||||
drivers/scsi/device_handler/scsi_dh_hp_sw.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
|
||||
index e391664..d0363c8 100644
|
||||
--- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
|
||||
+++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
|
||||
@@ -225,7 +225,8 @@ static void start_stop_endio(struct request *req, int error)
|
||||
}
|
||||
}
|
||||
done:
|
||||
- blk_put_request(req);
|
||||
+ req->end_io_data = NULL;
|
||||
+ __blk_put_request(req->q, req);
|
||||
if (h->callback_fn) {
|
||||
h->callback_fn(h->callback_data, err);
|
||||
h->callback_fn = h->callback_data = NULL;
|
||||
--
|
||||
1.7.5.1
|
||||
|
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
7d471477bfa67546f902da62227fa976 linux-2.6.38.tar.bz2
|
||||
c0f416f6a2e916633f697287cc7cb914 patch-2.6.38.8.bz2
|
||||
1aab7a741abe08d42e8eccf20de61e05 linux-2.6.39.tar.bz2
|
||||
df5790b51f218fc5e5463162b26afbfc patch-3.0.bz2
|
||||
|
|
|
@ -1,352 +0,0 @@
|
|||
From: Namhyung Kim <namhyung@gmail.com>
|
||||
Date: Fri, 18 Mar 2011 02:40:06 +0000 (+0900)
|
||||
Subject: x86, dumpstack: Correct stack dump info when frame pointer is available
|
||||
X-Git-Tag: v2.6.39-rc1~64^2~7
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=e8e999cf3cc733482e390b02ff25a64cecdc0b64
|
||||
|
||||
x86, dumpstack: Correct stack dump info when frame pointer is available
|
||||
|
||||
Current stack dump code scans entire stack and check each entry
|
||||
contains a pointer to kernel code. If CONFIG_FRAME_POINTER=y it
|
||||
could mark whether the pointer is valid or not based on value of
|
||||
the frame pointer. Invalid entries could be preceded by '?' sign.
|
||||
|
||||
However this was not going to happen because scan start point
|
||||
was always higher than the frame pointer so that they could not
|
||||
meet.
|
||||
|
||||
Commit 9c0729dc8062 ("x86: Eliminate bp argument from the stack
|
||||
tracing routines") delayed bp acquisition point, so the bp was
|
||||
read in lower frame, thus all of the entries were marked
|
||||
invalid.
|
||||
|
||||
This patch fixes this by reverting above commit while retaining
|
||||
stack_frame() helper as suggested by Frederic Weisbecker.
|
||||
|
||||
End result looks like below:
|
||||
|
||||
before:
|
||||
|
||||
[ 3.508329] Call Trace:
|
||||
[ 3.508551] [<ffffffff814f35c9>] ? panic+0x91/0x199
|
||||
[ 3.508662] [<ffffffff814f3739>] ? printk+0x68/0x6a
|
||||
[ 3.508770] [<ffffffff81a981b2>] ? mount_block_root+0x257/0x26e
|
||||
[ 3.508876] [<ffffffff81a9821f>] ? mount_root+0x56/0x5a
|
||||
[ 3.508975] [<ffffffff81a98393>] ? prepare_namespace+0x170/0x1a9
|
||||
[ 3.509216] [<ffffffff81a9772b>] ? kernel_init+0x1d2/0x1e2
|
||||
[ 3.509335] [<ffffffff81003894>] ? kernel_thread_helper+0x4/0x10
|
||||
[ 3.509442] [<ffffffff814f6880>] ? restore_args+0x0/0x30
|
||||
[ 3.509542] [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
|
||||
[ 3.509641] [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10
|
||||
|
||||
after:
|
||||
|
||||
[ 3.522991] Call Trace:
|
||||
[ 3.523351] [<ffffffff814f35b9>] panic+0x91/0x199
|
||||
[ 3.523468] [<ffffffff814f3729>] ? printk+0x68/0x6a
|
||||
[ 3.523576] [<ffffffff81a981b2>] mount_block_root+0x257/0x26e
|
||||
[ 3.523681] [<ffffffff81a9821f>] mount_root+0x56/0x5a
|
||||
[ 3.523780] [<ffffffff81a98393>] prepare_namespace+0x170/0x1a9
|
||||
[ 3.523885] [<ffffffff81a9772b>] kernel_init+0x1d2/0x1e2
|
||||
[ 3.523987] [<ffffffff81003894>] kernel_thread_helper+0x4/0x10
|
||||
[ 3.524228] [<ffffffff814f6880>] ? restore_args+0x0/0x30
|
||||
[ 3.524345] [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
|
||||
[ 3.524445] [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10
|
||||
|
||||
-v5:
|
||||
* fix build breakage with oprofile
|
||||
|
||||
-v4:
|
||||
* use 0 instead of regs->bp
|
||||
* separate out printk changes
|
||||
|
||||
-v3:
|
||||
* apply comment from Frederic
|
||||
* add a couple of printk fixes
|
||||
|
||||
Signed-off-by: Namhyung Kim <namhyung@gmail.com>
|
||||
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
|
||||
Cc: Soren Sandmann <ssp@redhat.com>
|
||||
Cc: Paul Mackerras <paulus@samba.org>
|
||||
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
Cc: Robert Richter <robert.richter@amd.com>
|
||||
LKML-Reference: <1300416006-3163-1-git-send-email-namhyung@gmail.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
---
|
||||
|
||||
diff --git a/arch/x86/include/asm/kdebug.h b/arch/x86/include/asm/kdebug.h
|
||||
index 518bbbb..fe2cc6e 100644
|
||||
--- a/arch/x86/include/asm/kdebug.h
|
||||
+++ b/arch/x86/include/asm/kdebug.h
|
||||
@@ -26,7 +26,7 @@ extern void die(const char *, struct pt_regs *,long);
|
||||
extern int __must_check __die(const char *, struct pt_regs *, long);
|
||||
extern void show_registers(struct pt_regs *regs);
|
||||
extern void show_trace(struct task_struct *t, struct pt_regs *regs,
|
||||
- unsigned long *sp);
|
||||
+ unsigned long *sp, unsigned long bp);
|
||||
extern void __show_regs(struct pt_regs *regs, int all);
|
||||
extern void show_regs(struct pt_regs *regs);
|
||||
extern unsigned long oops_begin(void);
|
||||
diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h
|
||||
index 52b5c7e..d7e89c8 100644
|
||||
--- a/arch/x86/include/asm/stacktrace.h
|
||||
+++ b/arch/x86/include/asm/stacktrace.h
|
||||
@@ -47,7 +47,7 @@ struct stacktrace_ops {
|
||||
};
|
||||
|
||||
void dump_trace(struct task_struct *tsk, struct pt_regs *regs,
|
||||
- unsigned long *stack,
|
||||
+ unsigned long *stack, unsigned long bp,
|
||||
const struct stacktrace_ops *ops, void *data);
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
@@ -86,11 +86,11 @@ stack_frame(struct task_struct *task, struct pt_regs *regs)
|
||||
|
||||
extern void
|
||||
show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *stack, char *log_lvl);
|
||||
+ unsigned long *stack, unsigned long bp, char *log_lvl);
|
||||
|
||||
extern void
|
||||
show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *sp, char *log_lvl);
|
||||
+ unsigned long *sp, unsigned long bp, char *log_lvl);
|
||||
|
||||
extern unsigned int code_bytes;
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
|
||||
index 279bc9d..3061276 100644
|
||||
--- a/arch/x86/kernel/cpu/perf_event.c
|
||||
+++ b/arch/x86/kernel/cpu/perf_event.c
|
||||
@@ -1792,7 +1792,7 @@ perf_callchain_kernel(struct perf_callchain_entry *entry, struct pt_regs *regs)
|
||||
|
||||
perf_callchain_store(entry, regs->ip);
|
||||
|
||||
- dump_trace(NULL, regs, NULL, &backtrace_ops, entry);
|
||||
+ dump_trace(NULL, regs, NULL, 0, &backtrace_ops, entry);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
|
||||
index 220a1c1..999e279 100644
|
||||
--- a/arch/x86/kernel/dumpstack.c
|
||||
+++ b/arch/x86/kernel/dumpstack.c
|
||||
@@ -175,21 +175,21 @@ static const struct stacktrace_ops print_trace_ops = {
|
||||
|
||||
void
|
||||
show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *stack, char *log_lvl)
|
||||
+ unsigned long *stack, unsigned long bp, char *log_lvl)
|
||||
{
|
||||
printk("%sCall Trace:\n", log_lvl);
|
||||
- dump_trace(task, regs, stack, &print_trace_ops, log_lvl);
|
||||
+ dump_trace(task, regs, stack, bp, &print_trace_ops, log_lvl);
|
||||
}
|
||||
|
||||
void show_trace(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *stack)
|
||||
+ unsigned long *stack, unsigned long bp)
|
||||
{
|
||||
- show_trace_log_lvl(task, regs, stack, "");
|
||||
+ show_trace_log_lvl(task, regs, stack, bp, "");
|
||||
}
|
||||
|
||||
void show_stack(struct task_struct *task, unsigned long *sp)
|
||||
{
|
||||
- show_stack_log_lvl(task, NULL, sp, "");
|
||||
+ show_stack_log_lvl(task, NULL, sp, 0, "");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -197,14 +197,16 @@ void show_stack(struct task_struct *task, unsigned long *sp)
|
||||
*/
|
||||
void dump_stack(void)
|
||||
{
|
||||
+ unsigned long bp;
|
||||
unsigned long stack;
|
||||
|
||||
+ bp = stack_frame(current, NULL);
|
||||
printk("Pid: %d, comm: %.20s %s %s %.*s\n",
|
||||
current->pid, current->comm, print_tainted(),
|
||||
init_utsname()->release,
|
||||
(int)strcspn(init_utsname()->version, " "),
|
||||
init_utsname()->version);
|
||||
- show_trace(NULL, NULL, &stack);
|
||||
+ show_trace(NULL, NULL, &stack, bp);
|
||||
}
|
||||
EXPORT_SYMBOL(dump_stack);
|
||||
|
||||
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
|
||||
index 74cc1ed..3b97a80 100644
|
||||
--- a/arch/x86/kernel/dumpstack_32.c
|
||||
+++ b/arch/x86/kernel/dumpstack_32.c
|
||||
@@ -17,12 +17,11 @@
|
||||
#include <asm/stacktrace.h>
|
||||
|
||||
|
||||
-void dump_trace(struct task_struct *task,
|
||||
- struct pt_regs *regs, unsigned long *stack,
|
||||
+void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
||||
+ unsigned long *stack, unsigned long bp,
|
||||
const struct stacktrace_ops *ops, void *data)
|
||||
{
|
||||
int graph = 0;
|
||||
- unsigned long bp;
|
||||
|
||||
if (!task)
|
||||
task = current;
|
||||
@@ -35,7 +34,9 @@ void dump_trace(struct task_struct *task,
|
||||
stack = (unsigned long *)task->thread.sp;
|
||||
}
|
||||
|
||||
- bp = stack_frame(task, regs);
|
||||
+ if (!bp)
|
||||
+ bp = stack_frame(task, regs);
|
||||
+
|
||||
for (;;) {
|
||||
struct thread_info *context;
|
||||
|
||||
@@ -55,7 +56,7 @@ EXPORT_SYMBOL(dump_trace);
|
||||
|
||||
void
|
||||
show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *sp, char *log_lvl)
|
||||
+ unsigned long *sp, unsigned long bp, char *log_lvl)
|
||||
{
|
||||
unsigned long *stack;
|
||||
int i;
|
||||
@@ -77,7 +78,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
touch_nmi_watchdog();
|
||||
}
|
||||
printk(KERN_CONT "\n");
|
||||
- show_trace_log_lvl(task, regs, sp, log_lvl);
|
||||
+ show_trace_log_lvl(task, regs, sp, bp, log_lvl);
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +103,7 @@ void show_registers(struct pt_regs *regs)
|
||||
u8 *ip;
|
||||
|
||||
printk(KERN_EMERG "Stack:\n");
|
||||
- show_stack_log_lvl(NULL, regs, ®s->sp, KERN_EMERG);
|
||||
+ show_stack_log_lvl(NULL, regs, ®s->sp, 0, KERN_EMERG);
|
||||
|
||||
printk(KERN_EMERG "Code: ");
|
||||
|
||||
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
|
||||
index a6b6fcf..e71c98d 100644
|
||||
--- a/arch/x86/kernel/dumpstack_64.c
|
||||
+++ b/arch/x86/kernel/dumpstack_64.c
|
||||
@@ -139,8 +139,8 @@ fixup_bp_irq_link(unsigned long bp, unsigned long *stack,
|
||||
* severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
|
||||
*/
|
||||
|
||||
-void dump_trace(struct task_struct *task,
|
||||
- struct pt_regs *regs, unsigned long *stack,
|
||||
+void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
||||
+ unsigned long *stack, unsigned long bp,
|
||||
const struct stacktrace_ops *ops, void *data)
|
||||
{
|
||||
const unsigned cpu = get_cpu();
|
||||
@@ -150,7 +150,6 @@ void dump_trace(struct task_struct *task,
|
||||
struct thread_info *tinfo;
|
||||
int graph = 0;
|
||||
unsigned long dummy;
|
||||
- unsigned long bp;
|
||||
|
||||
if (!task)
|
||||
task = current;
|
||||
@@ -161,7 +160,8 @@ void dump_trace(struct task_struct *task,
|
||||
stack = (unsigned long *)task->thread.sp;
|
||||
}
|
||||
|
||||
- bp = stack_frame(task, regs);
|
||||
+ if (!bp)
|
||||
+ bp = stack_frame(task, regs);
|
||||
/*
|
||||
* Print function call entries in all stacks, starting at the
|
||||
* current stack address. If the stacks consist of nested
|
||||
@@ -225,7 +225,7 @@ EXPORT_SYMBOL(dump_trace);
|
||||
|
||||
void
|
||||
show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
- unsigned long *sp, char *log_lvl)
|
||||
+ unsigned long *sp, unsigned long bp, char *log_lvl)
|
||||
{
|
||||
unsigned long *irq_stack_end;
|
||||
unsigned long *irq_stack;
|
||||
@@ -269,7 +269,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
preempt_enable();
|
||||
|
||||
printk(KERN_CONT "\n");
|
||||
- show_trace_log_lvl(task, regs, sp, log_lvl);
|
||||
+ show_trace_log_lvl(task, regs, sp, bp, log_lvl);
|
||||
}
|
||||
|
||||
void show_registers(struct pt_regs *regs)
|
||||
@@ -298,7 +298,7 @@ void show_registers(struct pt_regs *regs)
|
||||
|
||||
printk(KERN_EMERG "Stack:\n");
|
||||
show_stack_log_lvl(NULL, regs, (unsigned long *)sp,
|
||||
- KERN_EMERG);
|
||||
+ 0, KERN_EMERG);
|
||||
|
||||
printk(KERN_EMERG "Code: ");
|
||||
|
||||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
|
||||
index 99fa3ad..d46cbe4 100644
|
||||
--- a/arch/x86/kernel/process.c
|
||||
+++ b/arch/x86/kernel/process.c
|
||||
@@ -87,7 +87,7 @@ void exit_thread(void)
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
show_registers(regs);
|
||||
- show_trace(NULL, regs, (unsigned long *)kernel_stack_pointer(regs));
|
||||
+ show_trace(NULL, regs, (unsigned long *)kernel_stack_pointer(regs), 0);
|
||||
}
|
||||
|
||||
void show_regs_common(void)
|
||||
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
|
||||
index 938c8e1..6515733 100644
|
||||
--- a/arch/x86/kernel/stacktrace.c
|
||||
+++ b/arch/x86/kernel/stacktrace.c
|
||||
@@ -73,7 +73,7 @@ static const struct stacktrace_ops save_stack_ops_nosched = {
|
||||
*/
|
||||
void save_stack_trace(struct stack_trace *trace)
|
||||
{
|
||||
- dump_trace(current, NULL, NULL, &save_stack_ops, trace);
|
||||
+ dump_trace(current, NULL, NULL, 0, &save_stack_ops, trace);
|
||||
if (trace->nr_entries < trace->max_entries)
|
||||
trace->entries[trace->nr_entries++] = ULONG_MAX;
|
||||
}
|
||||
@@ -81,14 +81,14 @@ EXPORT_SYMBOL_GPL(save_stack_trace);
|
||||
|
||||
void save_stack_trace_regs(struct stack_trace *trace, struct pt_regs *regs)
|
||||
{
|
||||
- dump_trace(current, regs, NULL, &save_stack_ops, trace);
|
||||
+ dump_trace(current, regs, NULL, 0, &save_stack_ops, trace);
|
||||
if (trace->nr_entries < trace->max_entries)
|
||||
trace->entries[trace->nr_entries++] = ULONG_MAX;
|
||||
}
|
||||
|
||||
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
||||
{
|
||||
- dump_trace(tsk, NULL, NULL, &save_stack_ops_nosched, trace);
|
||||
+ dump_trace(tsk, NULL, NULL, 0, &save_stack_ops_nosched, trace);
|
||||
if (trace->nr_entries < trace->max_entries)
|
||||
trace->entries[trace->nr_entries++] = ULONG_MAX;
|
||||
}
|
||||
diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c
|
||||
index 72cbec1..2d49d4e 100644
|
||||
--- a/arch/x86/oprofile/backtrace.c
|
||||
+++ b/arch/x86/oprofile/backtrace.c
|
||||
@@ -126,7 +126,7 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
|
||||
if (!user_mode_vm(regs)) {
|
||||
unsigned long stack = kernel_stack_pointer(regs);
|
||||
if (depth)
|
||||
- dump_trace(NULL, regs, (unsigned long *)stack,
|
||||
+ dump_trace(NULL, regs, (unsigned long *)stack, 0,
|
||||
&backtrace_ops, &depth);
|
||||
return;
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
From: Narendra K <narendra_k@dell.com>
|
||||
Subject: [PATCH] x86/PCI: Preserve existing pci=bfsort whitelist for Dell systems.
|
||||
|
||||
Commit 6e8af08dfa40b747002207d3ce8e8b43a050d99f enables pci=bfsort on
|
||||
future Dell systems. But the identification string 'Dell System' matches
|
||||
on already existing whitelist, which do not have SMBIOS type 0xB1,
|
||||
causing pci=bfsort not being set on existing whitelist.
|
||||
|
||||
This patch fixes the regression by moving the type 0xB1 check beyond the
|
||||
existing whitelist so that existing whitelist is walked before.
|
||||
|
||||
Signed-off-by: Shyam Iyer <shyam_iyer@dell.com>
|
||||
Signed-off-by: Narendra K <narendra_k@dell.com>
|
||||
---
|
||||
RHBZ #702740
|
||||
http://marc.info/?l=linux-pci&m=130046899115205&q=raw
|
||||
|
||||
arch/x86/pci/common.c | 14 +++++++-------
|
||||
1 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
|
||||
index 5fe7502..92df322 100644
|
||||
--- a/arch/x86/pci/common.c
|
||||
+++ b/arch/x86/pci/common.c
|
||||
@@ -247,13 +247,6 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
|
||||
},
|
||||
#endif /* __i386__ */
|
||||
{
|
||||
- .callback = find_sort_method,
|
||||
- .ident = "Dell System",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
.callback = set_bf_sort,
|
||||
.ident = "Dell PowerEdge 1950",
|
||||
.matches = {
|
||||
@@ -294,6 +287,13 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
+ .callback = find_sort_method,
|
||||
+ .ident = "Dell System",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
.callback = set_bf_sort,
|
||||
.ident = "HP ProLiant BL20p G3",
|
||||
.matches = {
|
||||
--
|
||||
1.7.3.1
|
||||
|
Loading…
Reference in New Issue