Compare commits
99 Commits
master
...
f15-2.6.39
Author | SHA1 | Date |
---|---|---|
Dave Jones | ad87c3c819 | |
Dave Jones | e99605611a | |
Chuck Ebbert | 24958d9bb6 | |
Dave Jones | 4efc3fff00 | |
Chuck Ebbert | a9318c93e6 | |
Chuck Ebbert | 54043246c1 | |
Dave Jones | 8bc042555b | |
Chuck Ebbert | be7c8ca14b | |
Chuck Ebbert | 0dd8943dd9 | |
Chuck Ebbert | 198deb8acf | |
Chuck Ebbert | b67156cd9e | |
Chuck Ebbert | d111c750cc | |
Chuck Ebbert | 1d95757421 | |
Chuck Ebbert | 1412b6df72 | |
Chuck Ebbert | ced86e1611 | |
Chuck Ebbert | 7562ee4726 | |
Chuck Ebbert | 8744fb36ce | |
Chuck Ebbert | ce8c067136 | |
Dave Airlie | 797a5eb619 | |
Dave Airlie | bc6617c233 | |
Dave Airlie | 9a9eea3502 | |
Dave Jones | 7bbc91a67d | |
Kyle McMartin | 622985637b | |
Kyle McMartin | aa53a627e5 | |
Kyle McMartin | bfdadc2f0b | |
Kyle McMartin | 8dba4a6f78 | |
Dave Jones | b97a14431d | |
Dave Jones | 0b2fda5000 | |
Chuck Ebbert | f6de3b4340 | |
Chuck Ebbert | 18dd18f538 | |
Adam Jackson | f91329b1ad | |
Adam Jackson | 53392f03f5 | |
Dave Airlie | de4207af71 | |
Ben Skeggs | 5e40603daf | |
Ben Skeggs | 1c2a2024ce | |
Dave Airlie | f6fc553f93 | |
Chuck Ebbert | b1f66838e6 | |
Kyle McMartin | e56d281126 | |
Chuck Ebbert | fcfc30ed64 | |
Chuck Ebbert | 3cc5871fa6 | |
Chuck Ebbert | 7a131a574f | |
Chuck Ebbert | cdf695a919 | |
Kyle McMartin | 6c43c19fb8 | |
Kyle McMartin | 3c5f6df32d | |
Chuck Ebbert | 8d4bec9c02 | |
Kyle McMartin | 34f3a6f6cf | |
Chuck Ebbert | 49be14f7fd | |
Chuck Ebbert | ac4b917a22 | |
Kyle McMartin | 5c3a39fd9a | |
Kyle McMartin | ee720e9539 | |
Chuck Ebbert | d470023c15 | |
Dave Airlie | 7f205bd485 | |
Chuck Ebbert | 9057ac9c23 | |
Dave Airlie | 9da2734a4b | |
Dave Airlie | 3bcf43a573 | |
Chuck Ebbert | 50ffc6fec5 | |
Chuck Ebbert | e883ed16c1 | |
Chuck Ebbert | 6034fb773e | |
Kyle McMartin | 4102971164 | |
Kyle McMartin | 19b3eb0b8a | |
Kyle McMartin | da9a09fb91 | |
Chuck Ebbert | 915385f9f0 | |
Jarod Wilson | caf1c2222c | |
Neil Horman | cb4a4c8907 | |
Kyle McMartin | 9fd0d88656 | |
Kyle McMartin | 36dff6f30f | |
Kyle McMartin | 05118fa9b4 | |
Jarod Wilson | 78e43cbafc | |
Kyle McMartin | 36477ddc42 | |
Chuck Ebbert | 1e374f7f2b | |
Chuck Ebbert | 894d7acd63 | |
Kyle McMartin | 9dde67c33a | |
Ben Skeggs | e92d339e55 | |
Ben Skeggs | 6747df9c31 | |
Dave Airlie | 7666e4b3f3 | |
Ben Skeggs | 304107e3d0 | |
Hans de Goede | aef9f10724 | |
Ben Skeggs | 91fab41dfb | |
Ben Skeggs | f3e795d08b | |
Ben Skeggs | abe10d7eb7 | |
Kyle McMartin | 86c0bad77a | |
Kyle McMartin | 755fd341e7 | |
Kyle McMartin | 1862e7dee1 | |
Kyle McMartin | 1d3db7f8fb | |
Chuck Ebbert | 7a46f6afe6 | |
Chuck Ebbert | 75edc04edd | |
Chuck Ebbert | 3312da328f | |
Chuck Ebbert | 073133a682 | |
Chuck Ebbert | 1590df9db8 | |
Chuck Ebbert | b0e7478b71 | |
Chuck Ebbert | 535b4d942d | |
Chuck Ebbert | 06ad6a4c25 | |
Chuck Ebbert | 6236c85dc6 | |
Kyle McMartin | a13914ae1e | |
Dave Airlie | e04a1dcc80 | |
Ben Skeggs | 1abc854706 | |
Chuck Ebbert | c5e062a0ef | |
Matthew Garrett | 93c9d72918 | |
Dennis Gilmore | e53e7fadc2 |
|
@ -3,3 +3,4 @@ patch-*.bz2
|
|||
clog
|
||||
*.rpm
|
||||
kernel-2.6.*/
|
||||
kernel-3.*/
|
||||
|
|
2
Makefile
2
Makefile
|
@ -89,7 +89,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_CRYPTO_MANAGER_DISABLE_TESTS=y/# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set/' 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
|
||||
|
@ -168,7 +167,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_CRYPTO_MANAGER_DISABLE_TESTS is not set/CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y/' 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
|
||||
|
|
61
TODO
61
TODO
|
@ -1,61 +0,0 @@
|
|||
# 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
|
||||
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.
|
||||
|
||||
* lirc-2.6.33.patch
|
||||
* hdpvr-ir-enable.patch
|
||||
jarod working on upstreaming
|
||||
|
||||
* 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-serial-460800.patch
|
||||
Probably not upstreamable.
|
||||
http://marc.theaimsgroup.com/?l=linux-kernel&m=112687270832687&w=2
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
|
||||
http://lkml.org/lkml/2006/8/2/208
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
Improve our reboot handling for compatibility with Windows. Upstream in .38?
|
||||
|
||||
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[] = {
|
||||
#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
|
||||
{ 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) },
|
||||
#endif
|
||||
- { 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,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);
|
|
@ -0,0 +1,37 @@
|
|||
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 },
|
14
config-arm
14
config-arm
|
@ -83,7 +83,7 @@ CONFIG_FB_ARMCLCD=m
|
|||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_ARMAACI=m
|
||||
|
||||
CONFIG_USB_MUSB_HDRC=m
|
||||
CONFIG_USB_MUSB_HDRC=y
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
CONFIG_USB_TUSB6010=y
|
||||
# CONFIG_USB_MUSB_DEBUG is not set
|
||||
|
@ -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
|
||||
|
@ -88,8 +89,6 @@ CONFIG_PM_ADVANCED_DEBUG=y
|
|||
CONFIG_CEPH_LIB_PRETTYDEBUG=y
|
||||
CONFIG_QUOTA_DEBUG=y
|
||||
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
|
||||
CONFIG_PCI_DEFAULT_USE_CRS=y
|
||||
|
||||
CONFIG_KGDB_KDB=y
|
||||
|
|
226
config-generic
226
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
|
||||
|
@ -569,6 +575,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 +696,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 +767,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 +815,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 +851,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 +912,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 +940,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 +1031,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 +1105,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 +1453,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 +1514,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 +1549,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 +1582,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 +1646,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 +1706,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 +1740,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 +1932,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 +2013,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 +2049,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 +2098,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 +2171,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 +2279,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 +2318,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 +2422,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 +2484,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 +2508,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 +2559,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 +2571,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 +2591,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 +2663,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 +2692,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
|
||||
|
@ -2677,7 +2771,10 @@ 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
|
||||
|
@ -2743,6 +2840,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
|
||||
|
@ -2760,11 +2858,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
|
||||
|
@ -2875,6 +2975,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
|
||||
|
@ -2932,6 +3033,7 @@ CONFIG_SND_VIRTUOSO=m
|
|||
CONFIG_SND_VX222=m
|
||||
CONFIG_SND_YMFPCI=m
|
||||
CONFIG_SND_ASIHPI=m
|
||||
CONFIG_SND_LOLA=m
|
||||
|
||||
#
|
||||
# ALSA USB devices
|
||||
|
@ -2943,6 +3045,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
|
||||
|
@ -2951,6 +3054,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
|
||||
#
|
||||
|
@ -2983,6 +3090,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
|
||||
|
@ -3003,17 +3112,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
|
||||
|
||||
|
@ -3078,6 +3189,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
|
||||
|
@ -3136,6 +3252,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
|
||||
|
@ -3161,6 +3280,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
|
||||
|
@ -3189,6 +3309,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
|
||||
|
@ -3213,7 +3334,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
|
||||
|
@ -3279,6 +3400,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
|
||||
|
@ -3322,7 +3445,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
|
||||
|
@ -3362,7 +3484,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
|
||||
|
@ -3488,6 +3609,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
|
||||
|
@ -3550,9 +3672,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
|
||||
|
@ -3572,6 +3695,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
|
||||
|
@ -3734,10 +3858,11 @@ CONFIG_CRYPTO=y
|
|||
CONFIG_CRYPTO_FIPS=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_CRYPTO_MANAGER_TESTS=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
# Note, CONFIG_CRYPTO_MANAGER_DISABLE_TESTS needs to be unset, or FIPS will be disabled.
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_MANAGER=m
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_AES=y
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
|
@ -3825,6 +3950,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 +3983,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 +4195,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
|
||||
|
@ -4122,13 +4251,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 +4303,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 +4332,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 +4372,6 @@ CONFIG_PHONET=m
|
|||
|
||||
CONFIG_ICS932S401=m
|
||||
# CONFIG_C2PORT is not set
|
||||
CONFIG_W1_SLAVE_BQ27000=m
|
||||
|
||||
|
||||
CONFIG_IT87_WDT=m
|
||||
|
@ -4327,6 +4460,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 +4512,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,9 +4535,11 @@ 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 is not set
|
||||
CONFIG_FB_UDL=m
|
||||
|
||||
# DEBUG options that don't get enabled/disabled with 'make debug/release'
|
||||
#
|
||||
|
@ -4422,12 +4567,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 +4595,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
|
||||
|
@ -4489,6 +4637,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
|
||||
|
@ -88,8 +89,6 @@ CONFIG_PM_ADVANCED_DEBUG=y
|
|||
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
|
||||
# CONFIG_QUOTA_DEBUG is not set
|
||||
|
||||
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
|
||||
|
||||
CONFIG_PCI_DEFAULT_USE_CRS=y
|
||||
|
||||
CONFIG_KGDB_KDB=y
|
||||
|
|
|
@ -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
|
||||
|
@ -338,3 +341,17 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
|||
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
|
||||
|
|
|
@ -137,7 +137,6 @@ CONFIG_VIRTUALIZATION=y
|
|||
# CONFIG_MEMSTICK is not set
|
||||
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
# PPC gets sad with debug alloc (bz 448598)
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
@ -182,3 +181,7 @@ CONFIG_PERF_EVENTS=y
|
|||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_KVM_BOOK3S_32=m
|
||||
|
||||
# CONFIG_SCSI_QLA_ISCSI is not set
|
||||
|
||||
CONFIG_BATTERY_PMU=m
|
||||
|
|
|
@ -126,7 +126,7 @@ CONFIG_SCSI_IBMVSCSIS=m
|
|||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_TUNE_CELL=y
|
||||
# CONFIG_TUNE_CELL is not set
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
# CONFIG_BLK_DEV_PLATFORM is not set
|
||||
|
@ -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
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
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,69 +0,0 @@
|
|||
From bea96046b4245e9abd65ed7acfed9adfd5f6c639 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Thu, 3 Mar 2011 23:43:02 +0000
|
||||
Subject: [PATCH] drm/i915: Gen4+ has non-power-of-two strides
|
||||
|
||||
In c2e0eb16707, we started checking that the buffer was the correct size
|
||||
for tiled access by ensuring that the size was a multiple of tiles.
|
||||
However, gen4+ complicates the issue by allowing any multiple of 4096
|
||||
bytes for the stride and so the simple check based on a power-of-two
|
||||
stride was failing for valid bo.
|
||||
|
||||
Reported-by: Dan Williams <dcbw@redhat.com>
|
||||
Reported-by: Robert Hooker <sarvatt@gmail.com>
|
||||
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem_tiling.c | 29 ++++++++++++++---------------
|
||||
1 files changed, 14 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
|
||||
index 79a04fd..654f350 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
|
||||
@@ -215,6 +215,19 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (INTEL_INFO(dev)->gen >= 4) {
|
||||
+ /* 965+ just needs multiples of tile width */
|
||||
+ if (stride & (tile_width - 1))
|
||||
+ return false;
|
||||
+ } else {
|
||||
+ /* Pre-965 needs power of two tile widths */
|
||||
+ if (stride < tile_width)
|
||||
+ return false;
|
||||
+
|
||||
+ if (stride & (stride - 1))
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (IS_GEN2(dev) ||
|
||||
(tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)))
|
||||
tile_height = 32;
|
||||
@@ -226,21 +239,7 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
|
||||
tile_height *= 2;
|
||||
|
||||
/* Size needs to be aligned to a full tile row */
|
||||
- if (size & (tile_height * stride - 1))
|
||||
- return false;
|
||||
-
|
||||
- /* 965+ just needs multiples of tile width */
|
||||
- if (INTEL_INFO(dev)->gen >= 4) {
|
||||
- if (stride & (tile_width - 1))
|
||||
- return false;
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- /* Pre-965 needs power of two tile widths */
|
||||
- if (stride < tile_width)
|
||||
- return false;
|
||||
-
|
||||
- if (stride & (stride - 1))
|
||||
+ if (size % (tile_height * stride))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
--
|
||||
1.7.4.1
|
||||
|
|
@ -25,20 +25,12 @@ index 300f64b..2e3db37 100644
|
|||
|
||||
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);
|
||||
@@ -851,7 +851,7 @@ static bool ironlake_edp_panel_on (struc
|
||||
I915_WRITE(PCH_PP_CONTROL, pp);
|
||||
POSTING_READ(PCH_PP_CONTROL);
|
||||
|
||||
- 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);
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,56 @@
|
|||
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,403 +0,0 @@
|
|||
Default EFI to physical rather than virtual. Upstream seem to be going
|
||||
in this direction.
|
||||
|
||||
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
|
||||
index 8e4a165..3c62f15 100644
|
||||
--- a/arch/x86/include/asm/efi.h
|
||||
+++ b/arch/x86/include/asm/efi.h
|
||||
@@ -93,6 +93,9 @@ extern int add_efi_memmap;
|
||||
extern void efi_memblock_x86_reserve_range(void);
|
||||
extern void efi_call_phys_prelog(void);
|
||||
extern void efi_call_phys_epilog(void);
|
||||
+extern void efi_call_phys_prelog_in_physmode(void);
|
||||
+extern void efi_call_phys_epilog_in_physmode(void);
|
||||
+extern void efi_pagetable_init(void);
|
||||
|
||||
#ifndef CONFIG_EFI
|
||||
/*
|
||||
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
|
||||
index 0fe27d7..e1158b0 100644
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -58,6 +58,7 @@ struct efi_memory_map memmap;
|
||||
|
||||
static struct efi efi_phys __initdata;
|
||||
static efi_system_table_t efi_systab __initdata;
|
||||
+static efi_runtime_services_t phys_runtime;
|
||||
|
||||
static int __init setup_noefi(char *arg)
|
||||
{
|
||||
@@ -172,7 +173,7 @@ static efi_status_t __init phys_efi_set_virtual_address_map(
|
||||
return status;
|
||||
}
|
||||
|
||||
-static efi_status_t __init phys_efi_get_time(efi_time_t *tm,
|
||||
+static efi_status_t __init phys_efi_get_time_early(efi_time_t *tm,
|
||||
efi_time_cap_t *tc)
|
||||
{
|
||||
efi_status_t status;
|
||||
@@ -183,6 +184,112 @@ static efi_status_t __init phys_efi_get_time(efi_time_t *tm,
|
||||
return status;
|
||||
}
|
||||
|
||||
+static efi_status_t phys_efi_get_time(efi_time_t *tm,
|
||||
+ efi_time_cap_t *tc)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys2((void*)phys_runtime.get_time, tm, tc);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t __init phys_efi_set_time(efi_time_t *tm)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys1((void*)phys_runtime.set_time, tm);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_get_wakeup_time(efi_bool_t *enabled,
|
||||
+ efi_bool_t *pending,
|
||||
+ efi_time_t *tm)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys3((void*)phys_runtime.get_wakeup_time, enabled,
|
||||
+ pending, tm);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys2((void*)phys_runtime.set_wakeup_time, enabled,
|
||||
+ tm);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_get_variable(efi_char16_t *name,
|
||||
+ efi_guid_t *vendor,
|
||||
+ u32 *attr,
|
||||
+ unsigned long *data_size,
|
||||
+ void *data)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys5((void*)phys_runtime.get_variable, name, vendor,
|
||||
+ attr, data_size, data);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_get_next_variable(unsigned long *name_size,
|
||||
+ efi_char16_t *name,
|
||||
+ efi_guid_t *vendor)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys3((void*)phys_runtime.get_next_variable,
|
||||
+ name_size, name, vendor);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_set_variable(efi_char16_t *name,
|
||||
+ efi_guid_t *vendor,
|
||||
+ unsigned long attr,
|
||||
+ unsigned long data_size,
|
||||
+ void *data)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys5((void*)phys_runtime.set_variable, name,
|
||||
+ vendor, attr, data_size, data);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static efi_status_t phys_efi_get_next_high_mono_count(u32 *count)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ status = efi_call_phys1((void*)phys_runtime.get_next_high_mono_count,
|
||||
+ count);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static void phys_efi_reset_system(int reset_type,
|
||||
+ efi_status_t status,
|
||||
+ unsigned long data_size,
|
||||
+ efi_char16_t *data)
|
||||
+{
|
||||
+ efi_call_phys_prelog_in_physmode();
|
||||
+ efi_call_phys4((void*)phys_runtime.reset_system, reset_type, status,
|
||||
+ data_size, data);
|
||||
+ efi_call_phys_epilog_in_physmode();
|
||||
+}
|
||||
+
|
||||
int efi_set_rtc_mmss(unsigned long nowtime)
|
||||
{
|
||||
int real_seconds, real_minutes;
|
||||
@@ -435,7 +542,9 @@ void __init efi_init(void)
|
||||
* Make efi_get_time can be called before entering
|
||||
* virtual mode.
|
||||
*/
|
||||
- efi.get_time = phys_efi_get_time;
|
||||
+ efi.get_time = phys_efi_get_time_early;
|
||||
+
|
||||
+ memcpy(&phys_runtime, runtime, sizeof(efi_runtime_services_t));
|
||||
} else
|
||||
printk(KERN_ERR "Could not map the EFI runtime service "
|
||||
"table!\n");
|
||||
@@ -466,6 +575,14 @@ void __init efi_init(void)
|
||||
#if EFI_DEBUG
|
||||
print_efi_memmap();
|
||||
#endif
|
||||
+
|
||||
+#ifndef CONFIG_X86_64
|
||||
+ /*
|
||||
+ * Only x86_64 supports physical mode as of now. Use virtual mode
|
||||
+ * forcibly.
|
||||
+ */
|
||||
+ usevirtefi = 1;
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void __init runtime_code_page_mkexec(void)
|
||||
@@ -579,6 +696,27 @@ void __init efi_enter_virtual_mode(void)
|
||||
memmap.map = NULL;
|
||||
}
|
||||
|
||||
+void __init efi_setup_physical_mode(void)
|
||||
+{
|
||||
+#ifdef CONFIG_X86_64
|
||||
+ efi_pagetable_init();
|
||||
+#endif
|
||||
+ efi.get_time = phys_efi_get_time;
|
||||
+ efi.set_time = phys_efi_set_time;
|
||||
+ efi.get_wakeup_time = phys_efi_get_wakeup_time;
|
||||
+ efi.set_wakeup_time = phys_efi_set_wakeup_time;
|
||||
+ efi.get_variable = phys_efi_get_variable;
|
||||
+ efi.get_next_variable = phys_efi_get_next_variable;
|
||||
+ efi.set_variable = phys_efi_set_variable;
|
||||
+ efi.get_next_high_mono_count =
|
||||
+ phys_efi_get_next_high_mono_count;
|
||||
+ efi.reset_system = phys_efi_reset_system;
|
||||
+ efi.set_virtual_address_map = NULL; /* Not needed */
|
||||
+
|
||||
+ early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size);
|
||||
+ memmap.map = NULL;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Convenience functions to obtain memory types and attributes
|
||||
*/
|
||||
diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
|
||||
index 5cab48e..90767b1 100644
|
||||
--- a/arch/x86/platform/efi/efi_32.c
|
||||
+++ b/arch/x86/platform/efi/efi_32.c
|
||||
@@ -110,3 +110,7 @@ void efi_call_phys_epilog(void)
|
||||
|
||||
local_irq_restore(efi_rt_eflags);
|
||||
}
|
||||
+
|
||||
+void efi_call_phys_prelog_in_physmode(void) { /* Not supported */ }
|
||||
+void efi_call_phys_epilog_in_physmode(void) { /* Not supported */ }
|
||||
+
|
||||
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
|
||||
index ac0621a..ad19fe9 100644
|
||||
--- a/arch/x86/platform/efi/efi_64.c
|
||||
+++ b/arch/x86/platform/efi/efi_64.c
|
||||
@@ -39,7 +39,9 @@
|
||||
#include <asm/fixmap.h>
|
||||
|
||||
static pgd_t save_pgd __initdata;
|
||||
-static unsigned long efi_flags __initdata;
|
||||
+static DEFINE_PER_CPU(unsigned long, efi_flags);
|
||||
+static DEFINE_PER_CPU(unsigned long, save_cr3);
|
||||
+static pgd_t efi_pgd[PTRS_PER_PGD] __page_aligned_bss;
|
||||
|
||||
static void __init early_mapping_set_exec(unsigned long start,
|
||||
unsigned long end,
|
||||
@@ -80,7 +82,7 @@ void __init efi_call_phys_prelog(void)
|
||||
unsigned long vaddress;
|
||||
|
||||
early_runtime_code_mapping_set_exec(1);
|
||||
- local_irq_save(efi_flags);
|
||||
+ local_irq_save(get_cpu_var(efi_flags));
|
||||
vaddress = (unsigned long)__va(0x0UL);
|
||||
save_pgd = *pgd_offset_k(0x0UL);
|
||||
set_pgd(pgd_offset_k(0x0UL), *pgd_offset_k(vaddress));
|
||||
@@ -94,10 +96,23 @@ void __init efi_call_phys_epilog(void)
|
||||
*/
|
||||
set_pgd(pgd_offset_k(0x0UL), save_pgd);
|
||||
__flush_tlb_all();
|
||||
- local_irq_restore(efi_flags);
|
||||
+ local_irq_restore(get_cpu_var(efi_flags));
|
||||
early_runtime_code_mapping_set_exec(0);
|
||||
}
|
||||
|
||||
+void efi_call_phys_prelog_in_physmode(void)
|
||||
+{
|
||||
+ local_irq_save(get_cpu_var(efi_flags));
|
||||
+ get_cpu_var(save_cr3)= read_cr3();
|
||||
+ write_cr3(virt_to_phys(efi_pgd));
|
||||
+}
|
||||
+
|
||||
+void efi_call_phys_epilog_in_physmode(void)
|
||||
+{
|
||||
+ write_cr3(get_cpu_var(save_cr3));
|
||||
+ local_irq_restore(get_cpu_var(efi_flags));
|
||||
+}
|
||||
+
|
||||
void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size,
|
||||
u32 type)
|
||||
{
|
||||
@@ -112,3 +127,78 @@ void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size,
|
||||
|
||||
return (void __iomem *)__va(phys_addr);
|
||||
}
|
||||
+
|
||||
+static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
|
||||
+{
|
||||
+ if (pgd_none(*pgd)) {
|
||||
+ pud_t *pud = (pud_t *)get_zeroed_page(GFP_ATOMIC);
|
||||
+ set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud)));
|
||||
+ if (pud != pud_offset(pgd, 0))
|
||||
+ printk(KERN_ERR "EFI PAGETABLE BUG #00! %p <-> %p\n",
|
||||
+ pud, pud_offset(pgd, 0));
|
||||
+ }
|
||||
+ return pud_offset(pgd, vaddr);
|
||||
+}
|
||||
+
|
||||
+static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
|
||||
+{
|
||||
+ if (pud_none(*pud)) {
|
||||
+ pmd_t *pmd = (pmd_t *)get_zeroed_page(GFP_ATOMIC);
|
||||
+ set_pud(pud, __pud(_PAGE_TABLE | __pa(pmd)));
|
||||
+ if (pmd != pmd_offset(pud, 0))
|
||||
+ printk(KERN_ERR "EFI PAGETABLE BUG #01! %p <-> %p\n",
|
||||
+ pmd, pmd_offset(pud, 0));
|
||||
+ }
|
||||
+ return pmd_offset(pud, vaddr);
|
||||
+}
|
||||
+
|
||||
+static pte_t *fill_pte(pmd_t *pmd, unsigned long vaddr)
|
||||
+{
|
||||
+ if (pmd_none(*pmd)) {
|
||||
+ pte_t *pte = (pte_t *)get_zeroed_page(GFP_ATOMIC);
|
||||
+ set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)));
|
||||
+ if (pte != pte_offset_kernel(pmd, 0))
|
||||
+ printk(KERN_ERR "EFI PAGETABLE BUG #02!\n");
|
||||
+ }
|
||||
+ return pte_offset_kernel(pmd, vaddr);
|
||||
+}
|
||||
+
|
||||
+void __init efi_pagetable_init(void)
|
||||
+{
|
||||
+ efi_memory_desc_t *md;
|
||||
+ unsigned long size;
|
||||
+ u64 start_pfn, end_pfn, pfn, vaddr;
|
||||
+ void *p;
|
||||
+ pgd_t *pgd;
|
||||
+ pud_t *pud;
|
||||
+ pmd_t *pmd;
|
||||
+ pte_t *pte;
|
||||
+
|
||||
+ memset(efi_pgd, 0, sizeof(efi_pgd));
|
||||
+ for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
|
||||
+ md = p;
|
||||
+ if (!(md->type & EFI_RUNTIME_SERVICES_CODE) &&
|
||||
+ !(md->type & EFI_RUNTIME_SERVICES_DATA))
|
||||
+ continue;
|
||||
+
|
||||
+ start_pfn = md->phys_addr >> PAGE_SHIFT;
|
||||
+ size = md->num_pages << EFI_PAGE_SHIFT;
|
||||
+ end_pfn = PFN_UP(md->phys_addr + size);
|
||||
+
|
||||
+ for (pfn = start_pfn; pfn <= end_pfn; pfn++) {
|
||||
+ vaddr = pfn << PAGE_SHIFT;
|
||||
+ pgd = efi_pgd + pgd_index(vaddr);
|
||||
+ pud = fill_pud(pgd, vaddr);
|
||||
+ pmd = fill_pmd(pud, vaddr);
|
||||
+ pte = fill_pte(pmd, vaddr);
|
||||
+ if (md->type & EFI_RUNTIME_SERVICES_CODE)
|
||||
+ set_pte(pte, pfn_pte(pfn, PAGE_KERNEL_EXEC));
|
||||
+ else
|
||||
+ set_pte(pte, pfn_pte(pfn, PAGE_KERNEL));
|
||||
+ }
|
||||
+ }
|
||||
+ pgd = efi_pgd + pgd_index(PAGE_OFFSET);
|
||||
+ set_pgd(pgd, *pgd_offset_k(PAGE_OFFSET));
|
||||
+ pgd = efi_pgd + pgd_index(__START_KERNEL_map);
|
||||
+ set_pgd(pgd, *pgd_offset_k(__START_KERNEL_map));
|
||||
+}
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index fb737bc..c4e310e 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -290,6 +290,7 @@ extern void efi_map_pal_code (void);
|
||||
extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg);
|
||||
extern void efi_gettimeofday (struct timespec *ts);
|
||||
extern void efi_enter_virtual_mode (void); /* switch EFI to virtual mode, if possible */
|
||||
+extern void efi_setup_physical_mode(void);
|
||||
extern u64 efi_get_iobase (void);
|
||||
extern u32 efi_mem_type (unsigned long phys_addr);
|
||||
extern u64 efi_mem_attributes (unsigned long phys_addr);
|
||||
diff --git a/include/linux/init.h b/include/linux/init.h
|
||||
index 577671c..2f1b28f 100644
|
||||
--- a/include/linux/init.h
|
||||
+++ b/include/linux/init.h
|
||||
@@ -149,6 +149,7 @@ extern int do_one_initcall(initcall_t fn);
|
||||
extern char __initdata boot_command_line[];
|
||||
extern char *saved_command_line;
|
||||
extern unsigned int reset_devices;
|
||||
+extern unsigned int usevirtefi;
|
||||
|
||||
/* used by init/main.c */
|
||||
void setup_arch(char **);
|
||||
diff --git a/init/main.c b/init/main.c
|
||||
index 8646401..726025e 100644
|
||||
--- a/init/main.c
|
||||
+++ b/init/main.c
|
||||
@@ -196,6 +196,14 @@ static int __init set_reset_devices(char *str)
|
||||
|
||||
__setup("reset_devices", set_reset_devices);
|
||||
|
||||
+unsigned int usevirtefi;
|
||||
+static int __init set_virt_efi(char *str)
|
||||
+{
|
||||
+ usevirtefi = 1;
|
||||
+ return 1;
|
||||
+}
|
||||
+__setup("virtefi", set_virt_efi);
|
||||
+
|
||||
static const char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
|
||||
const char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
|
||||
static const char *panic_later, *panic_param;
|
||||
@@ -668,8 +676,12 @@ asmlinkage void __init start_kernel(void)
|
||||
pidmap_init();
|
||||
anon_vma_init();
|
||||
#ifdef CONFIG_X86
|
||||
- if (efi_enabled)
|
||||
- efi_enter_virtual_mode();
|
||||
+ if (efi_enabled) {
|
||||
+ if (usevirtefi)
|
||||
+ efi_enter_virtual_mode();
|
||||
+ else
|
||||
+ efi_setup_physical_mode();
|
||||
+ }
|
||||
#endif
|
||||
thread_info_cache_init();
|
||||
cred_init();
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
diff --git a/drivers/media/dvb/b2c2/flexcop-pci.c b/drivers/media/dvb/b2c2/flexcop-pci.c
|
||||
index 227c020..7465308 100644
|
||||
--- a/drivers/media/dvb/b2c2/flexcop-pci.c
|
||||
+++ b/drivers/media/dvb/b2c2/flexcop-pci.c
|
||||
@@ -39,6 +39,7 @@ MODULE_PARM_DESC(debug,
|
||||
|
||||
#define DRIVER_VERSION "0.1"
|
||||
#define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver"
|
||||
+#define FLEXCOP_MODULE_NAME "b2c2-flexcop"
|
||||
#define DRIVER_AUTHOR "Patrick Boettcher <patrick.boettcher@desy.de>"
|
||||
|
||||
struct flexcop_pci {
|
||||
@@ -299,7 +300,7 @@ static int flexcop_pci_init(struct flexcop_pci *fc_pci)
|
||||
return ret;
|
||||
pci_set_master(fc_pci->pdev);
|
||||
|
||||
- if ((ret = pci_request_regions(fc_pci->pdev, DRIVER_NAME)) != 0)
|
||||
+ if ((ret = pci_request_regions(fc_pci->pdev, FLEXCOP_MODULE_NAME)) != 0)
|
||||
goto err_pci_disable_device;
|
||||
|
||||
fc_pci->io_mem = pci_iomap(fc_pci->pdev, 0, 0x800);
|
||||
@@ -313,7 +314,7 @@ static int flexcop_pci_init(struct flexcop_pci *fc_pci)
|
||||
pci_set_drvdata(fc_pci->pdev, fc_pci);
|
||||
spin_lock_init(&fc_pci->irq_lock);
|
||||
if ((ret = request_irq(fc_pci->pdev->irq, flexcop_pci_isr,
|
||||
- IRQF_SHARED, DRIVER_NAME, fc_pci)) != 0)
|
||||
+ IRQF_SHARED, FLEXCOP_MODULE_NAME, fc_pci)) != 0)
|
||||
goto err_pci_iounmap;
|
||||
|
||||
fc_pci->init_state |= FC_PCI_INIT;
|
|
@ -1,64 +0,0 @@
|
|||
From linux-fsdevel-owner@vger.kernel.org Thu Nov 18 21:03:11 2010
|
||||
From: Josef Bacik <josef@redhat.com>
|
||||
To: linux-fsdevel@vger.kernel.org, eparis@redhat.com,
|
||||
linux-kernel@vger.kernel.org, sds@tycho.nsa.gov,
|
||||
selinux@tycho.nsa.gov, bfields@fieldses.org
|
||||
Subject: [PATCH] fs: call security_d_instantiate in d_obtain_alias V2
|
||||
Date: Thu, 18 Nov 2010 20:52:55 -0500
|
||||
Message-Id: <1290131575-2489-1-git-send-email-josef@redhat.com>
|
||||
X-Mailing-List: linux-fsdevel@vger.kernel.org
|
||||
|
||||
While trying to track down some NFS problems with BTRFS, I kept noticing I was
|
||||
getting -EACCESS for no apparent reason. Eric Paris and printk() helped me
|
||||
figure out that it was SELinux that was giving me grief, with the following
|
||||
denial
|
||||
|
||||
type=AVC msg=audit(1290013638.413:95): avc: denied { 0x800000 } for pid=1772
|
||||
comm="nfsd" name="" dev=sda1 ino=256 scontext=system_u:system_r:kernel_t:s0
|
||||
tcontext=system_u:object_r:unlabeled_t:s0 tclass=file
|
||||
|
||||
Turns out this is because in d_obtain_alias if we can't find an alias we create
|
||||
one and do all the normal instantiation stuff, but we don't do the
|
||||
security_d_instantiate.
|
||||
|
||||
Usually we are protected from getting a hashed dentry that hasn't yet run
|
||||
security_d_instantiate() by the parent's i_mutex, but obviously this isn't an
|
||||
option there, so in order to deal with the case that a second thread comes in
|
||||
and finds our new dentry before we get to run security_d_instantiate(), we go
|
||||
ahead and call it if we find a dentry already. Eric assures me that this is ok
|
||||
as the code checks to see if the dentry has been initialized already so calling
|
||||
security_d_instantiate() against the same dentry multiple times is ok. With
|
||||
this patch I'm no longer getting errant -EACCESS values.
|
||||
|
||||
Signed-off-by: Josef Bacik <josef@redhat.com>
|
||||
---
|
||||
V1->V2:
|
||||
-added second security_d_instantiate() call
|
||||
|
||||
fs/dcache.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index 5699d4c..85388fc 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -1577,9 +1577,13 @@ struct dentry *d_obtain_alias(struct inode *inode)
|
||||
spin_unlock(&tmp->d_lock);
|
||||
spin_unlock(&inode->i_lock);
|
||||
|
||||
+ security_d_instantiate(tmp, inode);
|
||||
+
|
||||
return tmp;
|
||||
|
||||
out_iput:
|
||||
+ if (res && !IS_ERR(res))
|
||||
+ security_d_instantiate(res, inode);
|
||||
iput(inode);
|
||||
return res;
|
||||
}
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
|
|
@ -1,229 +0,0 @@
|
|||
diff --git a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
|
||||
index e0230fc..3baa9f6 100644
|
||||
--- a/drivers/media/video/hdpvr/Makefile
|
||||
+++ b/drivers/media/video/hdpvr/Makefile
|
||||
@@ -1,6 +1,4 @@
|
||||
-hdpvr-objs := hdpvr-control.o hdpvr-core.o hdpvr-video.o
|
||||
-
|
||||
-hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
|
||||
+hdpvr-objs := hdpvr-control.o hdpvr-core.o hdpvr-video.o hdpvr-i2c.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o
|
||||
|
||||
diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
|
||||
index 830d47b..70cfdc8 100644
|
||||
--- a/drivers/media/video/hdpvr/hdpvr-core.c
|
||||
+++ b/drivers/media/video/hdpvr/hdpvr-core.c
|
||||
@@ -364,14 +364,13 @@ static int hdpvr_probe(struct usb_interface *interface,
|
||||
goto error;
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_I2C
|
||||
- /* until i2c is working properly */
|
||||
- retval = 0; /* hdpvr_register_i2c_adapter(dev); */
|
||||
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
|
||||
+ retval = hdpvr_register_i2c_adapter(dev);
|
||||
if (retval < 0) {
|
||||
v4l2_err(&dev->v4l2_dev, "registering i2c adapter failed\n");
|
||||
goto error;
|
||||
}
|
||||
-#endif /* CONFIG_I2C */
|
||||
+#endif
|
||||
|
||||
/* let the user know what node this device is now attached to */
|
||||
v4l2_info(&dev->v4l2_dev, "device now attached to %s\n",
|
||||
diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
|
||||
index 463b81b..60cdc06 100644
|
||||
--- a/drivers/media/video/hdpvr/hdpvr-i2c.c
|
||||
+++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
|
||||
@@ -10,6 +10,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
|
||||
+
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -22,8 +24,11 @@
|
||||
#define REQTYPE_I2C_WRITE 0xb0
|
||||
#define REQTYPE_I2C_WRITE_STATT 0xd0
|
||||
|
||||
-static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
|
||||
- char *data, int len)
|
||||
+#define HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR 0x70
|
||||
+#define HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR 0x71
|
||||
+
|
||||
+static int hdpvr_i2c_read(struct hdpvr_device *dev, int bus,
|
||||
+ unsigned char addr, char *data, int len)
|
||||
{
|
||||
int ret;
|
||||
char *buf = kmalloc(len, GFP_KERNEL);
|
||||
@@ -33,7 +38,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
|
||||
ret = usb_control_msg(dev->udev,
|
||||
usb_rcvctrlpipe(dev->udev, 0),
|
||||
REQTYPE_I2C_READ, CTRL_READ_REQUEST,
|
||||
- 0x100|addr, 0, buf, len, 1000);
|
||||
+ (bus << 8) | addr, 0, buf, len, 1000);
|
||||
|
||||
if (ret == len) {
|
||||
memcpy(data, buf, len);
|
||||
@@ -46,8 +51,8 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
|
||||
- char *data, int len)
|
||||
+static int hdpvr_i2c_write(struct hdpvr_device *dev, int bus,
|
||||
+ unsigned char addr, char *data, int len)
|
||||
{
|
||||
int ret;
|
||||
char *buf = kmalloc(len, GFP_KERNEL);
|
||||
@@ -58,7 +63,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
|
||||
ret = usb_control_msg(dev->udev,
|
||||
usb_sndctrlpipe(dev->udev, 0),
|
||||
REQTYPE_I2C_WRITE, CTRL_WRITE_REQUEST,
|
||||
- 0x100|addr, 0, buf, len, 1000);
|
||||
+ (bus << 8) | addr, 0, buf, len, 1000);
|
||||
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
@@ -68,7 +73,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
|
||||
REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
|
||||
0, 0, buf, 2, 1000);
|
||||
|
||||
- if (ret == 2)
|
||||
+ if ((ret == 2) && (buf[1] == (len - 1)))
|
||||
ret = 0;
|
||||
else if (ret >= 0)
|
||||
ret = -EIO;
|
||||
@@ -93,10 +98,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
|
||||
addr = msgs[i].addr << 1;
|
||||
|
||||
if (msgs[i].flags & I2C_M_RD)
|
||||
- retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
|
||||
+ retval = hdpvr_i2c_read(dev, 1, addr, msgs[i].buf,
|
||||
msgs[i].len);
|
||||
else
|
||||
- retval = hdpvr_i2c_write(dev, addr, msgs[i].buf,
|
||||
+ retval = hdpvr_i2c_write(dev, 1, addr, msgs[i].buf,
|
||||
msgs[i].len);
|
||||
}
|
||||
|
||||
@@ -115,30 +120,58 @@ static struct i2c_algorithm hdpvr_algo = {
|
||||
.functionality = hdpvr_functionality,
|
||||
};
|
||||
|
||||
+static struct i2c_adapter hdpvr_i2c_adapter_template = {
|
||||
+ .name = "Hauppage HD PVR I2C",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .id = I2C_HW_B_HDPVR,
|
||||
+ .algo = &hdpvr_algo,
|
||||
+};
|
||||
+
|
||||
+static struct i2c_board_info hdpvr_i2c_board_info = {
|
||||
+ I2C_BOARD_INFO("ir_tx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR),
|
||||
+ I2C_BOARD_INFO("ir_rx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR),
|
||||
+};
|
||||
+
|
||||
+static int hdpvr_activate_ir(struct hdpvr_device *dev)
|
||||
+{
|
||||
+ char buffer[8];
|
||||
+
|
||||
+ mutex_lock(&dev->i2c_mutex);
|
||||
+
|
||||
+ hdpvr_i2c_read(dev, 0, 0x54, buffer, 1);
|
||||
+
|
||||
+ buffer[0] = 0;
|
||||
+ buffer[1] = 0x8;
|
||||
+ hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
|
||||
+
|
||||
+ buffer[1] = 0x18;
|
||||
+ hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
|
||||
+
|
||||
+ mutex_unlock(&dev->i2c_mutex);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
|
||||
{
|
||||
- struct i2c_adapter *i2c_adap;
|
||||
int retval = -ENOMEM;
|
||||
|
||||
- i2c_adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
|
||||
- if (i2c_adap == NULL)
|
||||
- goto error;
|
||||
+ hdpvr_activate_ir(dev);
|
||||
|
||||
- strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
|
||||
- sizeof(i2c_adap->name));
|
||||
- i2c_adap->algo = &hdpvr_algo;
|
||||
- i2c_adap->owner = THIS_MODULE;
|
||||
- i2c_adap->dev.parent = &dev->udev->dev;
|
||||
+ memcpy(&dev->i2c_adapter, &hdpvr_i2c_adapter_template,
|
||||
+ sizeof(struct i2c_adapter));
|
||||
+ dev->i2c_adapter.dev.parent = &dev->udev->dev;
|
||||
|
||||
- i2c_set_adapdata(i2c_adap, dev);
|
||||
+ i2c_set_adapdata(&dev->i2c_adapter, dev);
|
||||
|
||||
- retval = i2c_add_adapter(i2c_adap);
|
||||
+ retval = i2c_add_adapter(&dev->i2c_adapter);
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
- if (!retval)
|
||||
- dev->i2c_adapter = i2c_adap;
|
||||
- else
|
||||
- kfree(i2c_adap);
|
||||
+ i2c_new_device(&dev->i2c_adapter, &hdpvr_i2c_board_info);
|
||||
|
||||
error:
|
||||
return retval;
|
||||
}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/media/video/hdpvr/hdpvr-video.c b/drivers/media/video/hdpvr/hdpvr-video.c
|
||||
index c338f3f..26fd9bf 100644
|
||||
--- a/drivers/media/video/hdpvr/hdpvr-video.c
|
||||
+++ b/drivers/media/video/hdpvr/hdpvr-video.c
|
||||
@@ -1221,12 +1221,9 @@ static void hdpvr_device_release(struct video_device *vdev)
|
||||
v4l2_device_unregister(&dev->v4l2_dev);
|
||||
|
||||
/* deregister I2C adapter */
|
||||
-#ifdef CONFIG_I2C
|
||||
+#if defined(CONFIG_I2C) || (CONFIG_I2C_MODULE)
|
||||
mutex_lock(&dev->i2c_mutex);
|
||||
- if (dev->i2c_adapter)
|
||||
- i2c_del_adapter(dev->i2c_adapter);
|
||||
- kfree(dev->i2c_adapter);
|
||||
- dev->i2c_adapter = NULL;
|
||||
+ i2c_del_adapter(&dev->i2c_adapter);
|
||||
mutex_unlock(&dev->i2c_mutex);
|
||||
#endif /* CONFIG_I2C */
|
||||
|
||||
diff --git a/drivers/media/video/hdpvr/hdpvr.h b/drivers/media/video/hdpvr/hdpvr.h
|
||||
index b0f046d..2107055 100644
|
||||
--- a/drivers/media/video/hdpvr/hdpvr.h
|
||||
+++ b/drivers/media/video/hdpvr/hdpvr.h
|
||||
@@ -102,7 +102,7 @@ struct hdpvr_device {
|
||||
struct work_struct worker;
|
||||
|
||||
/* I2C adapter */
|
||||
- struct i2c_adapter *i2c_adapter;
|
||||
+ struct i2c_adapter i2c_adapter;
|
||||
/* I2C lock */
|
||||
struct mutex i2c_mutex;
|
||||
|
||||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
|
||||
index 4bef5c5..4385341 100644
|
||||
--- a/include/linux/i2c-id.h
|
||||
+++ b/include/linux/i2c-id.h
|
||||
@@ -33,5 +33,6 @@
|
||||
|
||||
/* --- Bit algorithm adapters */
|
||||
#define I2C_HW_B_CX2388x 0x01001b /* connexant 2388x based tv cards */
|
||||
+#define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */
|
||||
|
||||
#endif /* LINUX_I2C_ID_H */
|
File diff suppressed because it is too large
Load Diff
1011
kernel.spec
1011
kernel.spec
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,72 @@
|
|||
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,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,18 @@ 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.
|
||||
--- linux-2.6.39.noarch/drivers/char/Kconfig~ 2011-06-29 23:41:24.386370545 -0400
|
||||
+++ linux-2.6.39.noarch/drivers/char/Kconfig 2011-06-29 23:42:11.984193335 -0400
|
||||
@@ -15,6 +15,9 @@ config DEVKMEM
|
||||
kind of kernel debugging operations.
|
||||
When in doubt, say "N".
|
||||
|
||||
+config CRASH
|
||||
+ tristate "Crash Utility memory driver"
|
||||
|
||||
config LEGACY_PTY_COUNT
|
||||
int "Maximum number of legacy PTY in use"
|
||||
|
||||
+ tristate "Crash Utility memory driver"
|
||||
+
|
||||
config STALDRV
|
||||
bool "Stallion multiport serial support"
|
||||
depends on SERIAL_NONSTANDARD
|
||||
diff --git a/drivers/char/crash.c b/drivers/char/crash.c
|
||||
new file mode 100644
|
||||
index 0000000..e5437de
|
||||
|
|
|
@ -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,54 +0,0 @@
|
|||
commit e17a07a9e0b62d5a5f0a5683ecbabad3aa95a4d5
|
||||
Author: Matthew Garrett <mjg@redhat.com>
|
||||
Date: Tue Jan 11 12:19:40 2011 -0500
|
||||
|
||||
ehci: Check individual port status registers on resume
|
||||
|
||||
If a device plug/unplug is detected on an ATI SB700 USB controller in D3,
|
||||
it appears to set the port status register but not the controller status
|
||||
register. As a result we'll fail to detect the plug event. Check the port
|
||||
status register on resume as well in order to catch this case.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
|
||||
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
|
||||
index 796ea0c..d9c0748 100644
|
||||
--- a/drivers/usb/host/ehci-hub.c
|
||||
+++ b/drivers/usb/host/ehci-hub.c
|
||||
@@ -106,6 +106,27 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci)
|
||||
ehci->owned_ports = 0;
|
||||
}
|
||||
|
||||
+static int ehci_port_change(struct ehci_hcd *ehci)
|
||||
+{
|
||||
+ int i = HCS_N_PORTS(ehci->hcs_params);
|
||||
+
|
||||
+ /* First check if the controller indicates a change event */
|
||||
+
|
||||
+ if (ehci_readl(ehci, &ehci->regs->status) & STS_PCD)
|
||||
+ return 1;
|
||||
+
|
||||
+ /*
|
||||
+ * Not all controllers appear to update this while going from D3 to D0,
|
||||
+ * so check the individual port status registers as well
|
||||
+ */
|
||||
+
|
||||
+ while (i--)
|
||||
+ if (ehci_readl(ehci, &ehci->regs->port_status[i]) & PORT_CSC)
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
|
||||
bool suspending, bool do_wakeup)
|
||||
{
|
||||
@@ -168,7 +189,7 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
|
||||
}
|
||||
|
||||
/* Does the root hub have a port wakeup pending? */
|
||||
- if (!suspending && (ehci_readl(ehci, &ehci->regs->status) & STS_PCD))
|
||||
+ if (!suspending && ehci_port_change(ehci))
|
||||
usb_hcd_resume_root_hub(ehci_to_hcd(ehci));
|
||||
|
||||
spin_unlock_irqrestore(&ehci->lock, flags);
|
|
@ -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>
|
||||
|
||||
|
|
@ -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,18 +7,25 @@
|
||||
/*
|
||||
* The x86 doesn't have a mmu context, but
|
||||
* we put the segment information here.
|
||||
|
@ -59,10 +59,16 @@
|
|||
int size;
|
||||
struct mutex lock;
|
||||
void *vdso;
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
/* True if mm supports a task running in 32 bit compatibility mode. */
|
||||
unsigned short ia32_compat;
|
||||
#endif
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ struct desc_struct user_cs;
|
||||
+ unsigned long exec_limit;
|
||||
+#endif
|
||||
|
||||
} mm_context_t;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -132,7 +138,7 @@
|
|||
.store_gdt = native_store_gdt,
|
||||
--- a/arch/x86/kernel/process_32.c
|
||||
+++ b/arch/x86/kernel/process_32.c
|
||||
@@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||
@@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flag
|
||||
void
|
||||
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
{
|
||||
|
@ -141,8 +147,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 +478,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;
|
||||
|
|
|
@ -57,16 +57,14 @@ in ye olde CVS tree. I have no idea why. Originally the pr_debug in
|
|||
device_pm_remove was nuked as well, but that seems to have gotten lost in
|
||||
the r1.634 of kernel.spec (2.6.26-rc2-git5.)
|
||||
|
||||
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
|
||||
index 2a52270..bacbdd2 100644
|
||||
--- a/drivers/base/power/main.c
|
||||
+++ b/drivers/base/power/main.c
|
||||
@@ -87,8 +87,6 @@ void device_pm_unlock(void)
|
||||
--- linux-2.6.39.x86_64/drivers/base/power/main.c~ 2011-07-12 19:58:19.788854464 -0400
|
||||
+++ linux-2.6.39.x86_64/drivers/base/power/main.c 2011-07-12 19:58:39.684798674 -0400
|
||||
@@ -89,8 +89,6 @@ void device_pm_unlock(void)
|
||||
*/
|
||||
void device_pm_add(struct device *dev)
|
||||
{
|
||||
- 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 +0,0 @@
|
|||
nil
|
|
@ -48,7 +48,7 @@ new file mode 100644
|
|||
index ...a5bcb9e 100644
|
||||
--- /dev/null
|
||||
+++ b/kernel/ptrace-utrace.c
|
||||
@@ -0,0 +1,1187 @@
|
||||
@@ -0,0 +1,1186 @@
|
||||
+/*
|
||||
+ * linux/kernel/ptrace.c
|
||||
+ *
|
||||
|
@ -65,7 +65,6 @@ index ...a5bcb9e 100644
|
|||
+#include <linux/mm.h>
|
||||
+#include <linux/highmem.h>
|
||||
+#include <linux/pagemap.h>
|
||||
+#include <linux/smp_lock.h>
|
||||
+#include <linux/ptrace.h>
|
||||
+#include <linux/utrace.h>
|
||||
+#include <linux/security.h>
|
||||
|
@ -1248,389 +1247,6 @@ index e275608..72ea65c 100644
|
|||
#include <linux/security.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/audit.h>
|
||||
@@ -24,7 +23,320 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/regset.h>
|
||||
|
||||
+int __ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
+{
|
||||
+ const struct cred *cred = current_cred(), *tcred;
|
||||
+
|
||||
+ /* May we inspect the given task?
|
||||
+ * This check is used both for attaching with ptrace
|
||||
+ * and for allowing access to sensitive information in /proc.
|
||||
+ *
|
||||
+ * ptrace_attach denies several cases that /proc allows
|
||||
+ * because setting up the necessary parent/child relationship
|
||||
+ * or halting the specified task is impossible.
|
||||
+ */
|
||||
+ int dumpable = 0;
|
||||
+ /* Don't let security modules deny introspection */
|
||||
+ if (task == current)
|
||||
+ return 0;
|
||||
+ rcu_read_lock();
|
||||
+ tcred = __task_cred(task);
|
||||
+ if ((cred->uid != tcred->euid ||
|
||||
+ cred->uid != tcred->suid ||
|
||||
+ cred->uid != tcred->uid ||
|
||||
+ cred->gid != tcred->egid ||
|
||||
+ cred->gid != tcred->sgid ||
|
||||
+ cred->gid != tcred->gid) &&
|
||||
+ !capable(CAP_SYS_PTRACE)) {
|
||||
+ rcu_read_unlock();
|
||||
+ return -EPERM;
|
||||
+ }
|
||||
+ rcu_read_unlock();
|
||||
+ smp_rmb();
|
||||
+ if (task->mm)
|
||||
+ dumpable = get_dumpable(task->mm);
|
||||
+ if (!dumpable && !capable(CAP_SYS_PTRACE))
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ return security_ptrace_access_check(task, mode);
|
||||
+}
|
||||
+
|
||||
+bool ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
+{
|
||||
+ int err;
|
||||
+ task_lock(task);
|
||||
+ err = __ptrace_may_access(task, mode);
|
||||
+ task_unlock(task);
|
||||
+ return !err;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Called with irqs disabled, returns true if childs should reap themselves.
|
||||
+ */
|
||||
+static int ignoring_children(struct sighand_struct *sigh)
|
||||
+{
|
||||
+ int ret;
|
||||
+ spin_lock(&sigh->siglock);
|
||||
+ ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
|
||||
+ (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
|
||||
+ spin_unlock(&sigh->siglock);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Called with tasklist_lock held for writing.
|
||||
+ * Unlink a traced task, and clean it up if it was a traced zombie.
|
||||
+ * Return true if it needs to be reaped with release_task().
|
||||
+ * (We can't call release_task() here because we already hold tasklist_lock.)
|
||||
+ *
|
||||
+ * If it's a zombie, our attachedness prevented normal parent notification
|
||||
+ * or self-reaping. Do notification now if it would have happened earlier.
|
||||
+ * If it should reap itself, return true.
|
||||
+ *
|
||||
+ * If it's our own child, there is no notification to do. But if our normal
|
||||
+ * children self-reap, then this child was prevented by ptrace and we must
|
||||
+ * reap it now, in that case we must also wake up sub-threads sleeping in
|
||||
+ * do_wait().
|
||||
+ */
|
||||
+bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
|
||||
+{
|
||||
+ __ptrace_unlink(p);
|
||||
+
|
||||
+ if (p->exit_state == EXIT_ZOMBIE) {
|
||||
+ if (!task_detached(p) && thread_group_empty(p)) {
|
||||
+ if (!same_thread_group(p->real_parent, tracer))
|
||||
+ do_notify_parent(p, p->exit_signal);
|
||||
+ else if (ignoring_children(tracer->sighand)) {
|
||||
+ __wake_up_parent(p, tracer);
|
||||
+ p->exit_signal = -1;
|
||||
+ }
|
||||
+ }
|
||||
+ if (task_detached(p)) {
|
||||
+ /* Mark it as in the process of being reaped. */
|
||||
+ p->exit_state = EXIT_DEAD;
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
|
||||
+{
|
||||
+ int copied = 0;
|
||||
+
|
||||
+ while (len > 0) {
|
||||
+ char buf[128];
|
||||
+ int this_len, retval;
|
||||
+
|
||||
+ this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
|
||||
+ retval = access_process_vm(tsk, src, buf, this_len, 0);
|
||||
+ if (!retval) {
|
||||
+ if (copied)
|
||||
+ break;
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+ if (copy_to_user(dst, buf, retval))
|
||||
+ return -EFAULT;
|
||||
+ copied += retval;
|
||||
+ src += retval;
|
||||
+ dst += retval;
|
||||
+ len -= retval;
|
||||
+ }
|
||||
+ return copied;
|
||||
+}
|
||||
+
|
||||
+int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
|
||||
+{
|
||||
+ int copied = 0;
|
||||
+
|
||||
+ while (len > 0) {
|
||||
+ char buf[128];
|
||||
+ int this_len, retval;
|
||||
+
|
||||
+ this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
|
||||
+ if (copy_from_user(buf, src, this_len))
|
||||
+ return -EFAULT;
|
||||
+ retval = access_process_vm(tsk, dst, buf, this_len, 1);
|
||||
+ if (!retval) {
|
||||
+ if (copied)
|
||||
+ break;
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+ copied += retval;
|
||||
+ src += retval;
|
||||
+ dst += retval;
|
||||
+ len -= retval;
|
||||
+ }
|
||||
+ return copied;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
|
||||
+
|
||||
+static const struct user_regset *
|
||||
+find_regset(const struct user_regset_view *view, unsigned int type)
|
||||
+{
|
||||
+ const struct user_regset *regset;
|
||||
+ int n;
|
||||
+
|
||||
+ for (n = 0; n < view->n; ++n) {
|
||||
+ regset = view->regsets + n;
|
||||
+ if (regset->core_note_type == type)
|
||||
+ return regset;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+int ptrace_regset(struct task_struct *task, int req, unsigned int type,
|
||||
+ struct iovec *kiov)
|
||||
+{
|
||||
+ const struct user_regset_view *view = task_user_regset_view(task);
|
||||
+ const struct user_regset *regset = find_regset(view, type);
|
||||
+ int regset_no;
|
||||
+
|
||||
+ if (!regset || (kiov->iov_len % regset->size) != 0)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ regset_no = regset - view->regsets;
|
||||
+ kiov->iov_len = min(kiov->iov_len,
|
||||
+ (__kernel_size_t) (regset->n * regset->size));
|
||||
+
|
||||
+ if (req == PTRACE_GETREGSET)
|
||||
+ return copy_regset_to_user(task, view, regset_no, 0,
|
||||
+ kiov->iov_len, kiov->iov_base);
|
||||
+ else
|
||||
+ return copy_regset_from_user(task, view, regset_no, 0,
|
||||
+ kiov->iov_len, kiov->iov_base);
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+static struct task_struct *ptrace_get_task_struct(pid_t pid)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+
|
||||
+ rcu_read_lock();
|
||||
+ child = find_task_by_vpid(pid);
|
||||
+ if (child)
|
||||
+ get_task_struct(child);
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
+ if (!child)
|
||||
+ return ERR_PTR(-ESRCH);
|
||||
+ return child;
|
||||
+}
|
||||
+
|
||||
+#ifndef arch_ptrace_attach
|
||||
+#define arch_ptrace_attach(child) do { } while (0)
|
||||
+#endif
|
||||
+
|
||||
+SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
|
||||
+ unsigned long, data)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+ long ret;
|
||||
+
|
||||
+ if (request == PTRACE_TRACEME) {
|
||||
+ ret = ptrace_traceme();
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(current);
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
+ child = ptrace_get_task_struct(pid);
|
||||
+ if (IS_ERR(child)) {
|
||||
+ ret = PTR_ERR(child);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (request == PTRACE_ATTACH) {
|
||||
+ ret = ptrace_attach(child);
|
||||
+ /*
|
||||
+ * Some architectures need to do book-keeping after
|
||||
+ * a ptrace attach.
|
||||
+ */
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(child);
|
||||
+ goto out_put_task_struct;
|
||||
+ }
|
||||
+
|
||||
+ ret = ptrace_check_attach(child, request == PTRACE_KILL);
|
||||
+ if (ret < 0)
|
||||
+ goto out_put_task_struct;
|
||||
+
|
||||
+ ret = arch_ptrace(child, request, addr, data);
|
||||
+
|
||||
+ out_put_task_struct:
|
||||
+ put_task_struct(child);
|
||||
+ out:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
|
||||
+ unsigned long data)
|
||||
+{
|
||||
+ unsigned long tmp;
|
||||
+ int copied;
|
||||
+
|
||||
+ copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
|
||||
+ if (copied != sizeof(tmp))
|
||||
+ return -EIO;
|
||||
+ return put_user(tmp, (unsigned long __user *)data);
|
||||
+}
|
||||
+
|
||||
+int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
|
||||
+ unsigned long data)
|
||||
+{
|
||||
+ int copied;
|
||||
+
|
||||
+ copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
|
||||
+ return (copied == sizeof(data)) ? 0 : -EIO;
|
||||
+}
|
||||
+
|
||||
+#if defined CONFIG_COMPAT
|
||||
+#include <linux/compat.h>
|
||||
+
|
||||
+asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
||||
+ compat_long_t addr, compat_long_t data)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+ long ret;
|
||||
+
|
||||
+ if (request == PTRACE_TRACEME) {
|
||||
+ ret = ptrace_traceme();
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ child = ptrace_get_task_struct(pid);
|
||||
+ if (IS_ERR(child)) {
|
||||
+ ret = PTR_ERR(child);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (request == PTRACE_ATTACH) {
|
||||
+ ret = ptrace_attach(child);
|
||||
+ /*
|
||||
+ * Some architectures need to do book-keeping after
|
||||
+ * a ptrace attach.
|
||||
+ */
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(child);
|
||||
+ goto out_put_task_struct;
|
||||
+ }
|
||||
+
|
||||
+ ret = ptrace_check_attach(child, request == PTRACE_KILL);
|
||||
+ if (!ret)
|
||||
+ ret = compat_arch_ptrace(child, request, addr, data);
|
||||
+
|
||||
+ out_put_task_struct:
|
||||
+ put_task_struct(child);
|
||||
+ out:
|
||||
+ return ret;
|
||||
+}
|
||||
+#endif /* CONFIG_COMPAT */
|
||||
+
|
||||
+#ifndef CONFIG_UTRACE
|
||||
/*
|
||||
* ptrace a task: make the debugger its new parent and
|
||||
* move it to the ptrace list.
|
||||
@@ -117,61 +429,6 @@ int ptrace_check_attach(struct task_stru
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int __ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
-{
|
||||
- const struct cred *cred = current_cred(), *tcred;
|
||||
-
|
||||
- /* May we inspect the given task?
|
||||
- * This check is used both for attaching with ptrace
|
||||
- * and for allowing access to sensitive information in /proc.
|
||||
- *
|
||||
- * ptrace_attach denies several cases that /proc allows
|
||||
- * because setting up the necessary parent/child relationship
|
||||
- * or halting the specified task is impossible.
|
||||
- */
|
||||
- int dumpable = 0;
|
||||
- /* Don't let security modules deny introspection */
|
||||
- if (task == current)
|
||||
- return 0;
|
||||
- rcu_read_lock();
|
||||
- tcred = __task_cred(task);
|
||||
- if ((cred->uid != tcred->euid ||
|
||||
- cred->uid != tcred->suid ||
|
||||
- cred->uid != tcred->uid ||
|
||||
- cred->gid != tcred->egid ||
|
||||
- cred->gid != tcred->sgid ||
|
||||
- cred->gid != tcred->gid) &&
|
||||
- !capable(CAP_SYS_PTRACE)) {
|
||||
- rcu_read_unlock();
|
||||
- return -EPERM;
|
||||
- }
|
||||
- rcu_read_unlock();
|
||||
- smp_rmb();
|
||||
- if (task->mm)
|
||||
- dumpable = get_dumpable(task->mm);
|
||||
- if (!dumpable && !capable(CAP_SYS_PTRACE))
|
||||
- return -EPERM;
|
||||
-
|
||||
- return security_ptrace_access_check(task, mode);
|
||||
-}
|
||||
-
|
||||
-bool ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
-{
|
||||
- int err;
|
||||
- task_lock(task);
|
||||
- err = __ptrace_may_access(task, mode);
|
||||
- task_unlock(task);
|
||||
- return !err;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * For experimental use of utrace, exclude ptrace on the same task.
|
||||
- */
|
||||
-static inline bool exclude_ptrace(struct task_struct *task)
|
||||
-{
|
||||
- return unlikely(!!task_utrace_flags(task));
|
||||
-}
|
||||
-
|
||||
int ptrace_attach(struct task_struct *task)
|
||||
{
|
||||
int retval;
|
||||
@@ -195,8 +452,6 @@ int ptrace_attach(struct task_struct *ta
|
||||
|
||||
task_lock(task);
|
||||
|
@ -1955,11 +1571,399 @@ index e275608..72ea65c 100644
|
|||
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
|
||||
compat_ulong_t addr, compat_ulong_t data)
|
||||
{
|
||||
@@ -851,42 +876,5 @@ int compat_ptrace_request(struct task_st
|
||||
--- linux-2.6.39.noarch/kernel/ptrace.c~ 2011-06-30 01:26:39.872164118 -0400
|
||||
+++ linux-2.6.39.noarch/kernel/ptrace.c 2011-06-30 01:30:09.682400285 -0400
|
||||
@@ -24,8 +24,321 @@
|
||||
#include <linux/regset.h>
|
||||
#include <linux/hw_breakpoint.h>
|
||||
|
||||
+int __ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
+{
|
||||
+ const struct cred *cred = current_cred(), *tcred;
|
||||
+
|
||||
+ /* May we inspect the given task?
|
||||
+ * This check is used both for attaching with ptrace
|
||||
+ * and for allowing access to sensitive information in /proc.
|
||||
+ *
|
||||
+ * ptrace_attach denies several cases that /proc allows
|
||||
+ * because setting up the necessary parent/child relationship
|
||||
+ * or halting the specified task is impossible.
|
||||
+ */
|
||||
+ int dumpable = 0;
|
||||
+ /* Don't let security modules deny introspection */
|
||||
+ if (task == current)
|
||||
+ return 0;
|
||||
+ rcu_read_lock();
|
||||
+ tcred = __task_cred(task);
|
||||
+ if ((cred->uid != tcred->euid ||
|
||||
+ cred->uid != tcred->suid ||
|
||||
+ cred->uid != tcred->uid ||
|
||||
+ cred->gid != tcred->egid ||
|
||||
+ cred->gid != tcred->sgid ||
|
||||
+ cred->gid != tcred->gid) &&
|
||||
+ !capable(CAP_SYS_PTRACE)) {
|
||||
+ rcu_read_unlock();
|
||||
+ return -EPERM;
|
||||
+ }
|
||||
+ rcu_read_unlock();
|
||||
+ smp_rmb();
|
||||
+ if (task->mm)
|
||||
+ dumpable = get_dumpable(task->mm);
|
||||
+ if (!dumpable && !capable(CAP_SYS_PTRACE))
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ return security_ptrace_access_check(task, mode);
|
||||
+}
|
||||
+
|
||||
+bool ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
+{
|
||||
+ int err;
|
||||
+ task_lock(task);
|
||||
+ err = __ptrace_may_access(task, mode);
|
||||
+ task_unlock(task);
|
||||
+ return !err;
|
||||
+}
|
||||
|
||||
/*
|
||||
+ * Called with irqs disabled, returns true if childs should reap themselves.
|
||||
+ */
|
||||
+static int ignoring_children(struct sighand_struct *sigh)
|
||||
+{
|
||||
+ int ret;
|
||||
+ spin_lock(&sigh->siglock);
|
||||
+ ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
|
||||
+ (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
|
||||
+ spin_unlock(&sigh->siglock);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Called with tasklist_lock held for writing.
|
||||
+ * Unlink a traced task, and clean it up if it was a traced zombie.
|
||||
+ * Return true if it needs to be reaped with release_task().
|
||||
+ * (We can't call release_task() here because we already hold tasklist_lock.)
|
||||
+ *
|
||||
+ * If it's a zombie, our attachedness prevented normal parent notification
|
||||
+ * or self-reaping. Do notification now if it would have happened earlier.
|
||||
+ * If it should reap itself, return true.
|
||||
+ *
|
||||
+ * If it's our own child, there is no notification to do. But if our normal
|
||||
+ * children self-reap, then this child was prevented by ptrace and we must
|
||||
+ * reap it now, in that case we must also wake up sub-threads sleeping in
|
||||
+ * do_wait().
|
||||
+ */
|
||||
+bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
|
||||
+{
|
||||
+ __ptrace_unlink(p);
|
||||
+
|
||||
+ if (p->exit_state == EXIT_ZOMBIE) {
|
||||
+ if (!task_detached(p) && thread_group_empty(p)) {
|
||||
+ if (!same_thread_group(p->real_parent, tracer))
|
||||
+ do_notify_parent(p, p->exit_signal);
|
||||
+ else if (ignoring_children(tracer->sighand)) {
|
||||
+ __wake_up_parent(p, tracer);
|
||||
+ p->exit_signal = -1;
|
||||
+ }
|
||||
+ }
|
||||
+ if (task_detached(p)) {
|
||||
+ /* Mark it as in the process of being reaped. */
|
||||
+ p->exit_state = EXIT_DEAD;
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
|
||||
+{
|
||||
+ int copied = 0;
|
||||
+
|
||||
+ while (len > 0) {
|
||||
+ char buf[128];
|
||||
+ int this_len, retval;
|
||||
+
|
||||
+ this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
|
||||
+ retval = access_process_vm(tsk, src, buf, this_len, 0);
|
||||
+ if (!retval) {
|
||||
+ if (copied)
|
||||
+ break;
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+ if (copy_to_user(dst, buf, retval))
|
||||
+ return -EFAULT;
|
||||
+ copied += retval;
|
||||
+ src += retval;
|
||||
+ dst += retval;
|
||||
+ len -= retval;
|
||||
+ }
|
||||
+ return copied;
|
||||
+}
|
||||
+
|
||||
+int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
|
||||
+{
|
||||
+ int copied = 0;
|
||||
+
|
||||
+ while (len > 0) {
|
||||
+ char buf[128];
|
||||
+ int this_len, retval;
|
||||
+
|
||||
+ this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
|
||||
+ if (copy_from_user(buf, src, this_len))
|
||||
+ return -EFAULT;
|
||||
+ retval = access_process_vm(tsk, dst, buf, this_len, 1);
|
||||
+ if (!retval) {
|
||||
+ if (copied)
|
||||
+ break;
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+ copied += retval;
|
||||
+ src += retval;
|
||||
+ dst += retval;
|
||||
+ len -= retval;
|
||||
+ }
|
||||
+ return copied;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
|
||||
+
|
||||
+static const struct user_regset *
|
||||
+find_regset(const struct user_regset_view *view, unsigned int type)
|
||||
+{
|
||||
+ const struct user_regset *regset;
|
||||
+ int n;
|
||||
+
|
||||
+ for (n = 0; n < view->n; ++n) {
|
||||
+ regset = view->regsets + n;
|
||||
+ if (regset->core_note_type == type)
|
||||
+ return regset;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+int ptrace_regset(struct task_struct *task, int req, unsigned int type,
|
||||
+ struct iovec *kiov)
|
||||
+{
|
||||
+ const struct user_regset_view *view = task_user_regset_view(task);
|
||||
+ const struct user_regset *regset = find_regset(view, type);
|
||||
+ int regset_no;
|
||||
+
|
||||
+ if (!regset || (kiov->iov_len % regset->size) != 0)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ regset_no = regset - view->regsets;
|
||||
+ kiov->iov_len = min(kiov->iov_len,
|
||||
+ (__kernel_size_t) (regset->n * regset->size));
|
||||
+
|
||||
+ if (req == PTRACE_GETREGSET)
|
||||
+ return copy_regset_to_user(task, view, regset_no, 0,
|
||||
+ kiov->iov_len, kiov->iov_base);
|
||||
+ else
|
||||
+ return copy_regset_from_user(task, view, regset_no, 0,
|
||||
+ kiov->iov_len, kiov->iov_base);
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+static struct task_struct *ptrace_get_task_struct(pid_t pid)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+
|
||||
+ rcu_read_lock();
|
||||
+ child = find_task_by_vpid(pid);
|
||||
+ if (child)
|
||||
+ get_task_struct(child);
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
+ if (!child)
|
||||
+ return ERR_PTR(-ESRCH);
|
||||
+ return child;
|
||||
+}
|
||||
+
|
||||
+#ifndef arch_ptrace_attach
|
||||
+#define arch_ptrace_attach(child) do { } while (0)
|
||||
+#endif
|
||||
+
|
||||
+SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
|
||||
+ unsigned long, data)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+ long ret;
|
||||
+
|
||||
+ if (request == PTRACE_TRACEME) {
|
||||
+ ret = ptrace_traceme();
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(current);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ child = ptrace_get_task_struct(pid);
|
||||
+ if (IS_ERR(child)) {
|
||||
+ ret = PTR_ERR(child);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (request == PTRACE_ATTACH) {
|
||||
+ ret = ptrace_attach(child);
|
||||
+ /*
|
||||
+ * Some architectures need to do book-keeping after
|
||||
+ * a ptrace attach.
|
||||
+ */
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(child);
|
||||
+ goto out_put_task_struct;
|
||||
+ }
|
||||
+
|
||||
+ ret = ptrace_check_attach(child, request == PTRACE_KILL);
|
||||
+ if (ret < 0)
|
||||
+ goto out_put_task_struct;
|
||||
+
|
||||
+ ret = arch_ptrace(child, request, addr, data);
|
||||
+
|
||||
+ out_put_task_struct:
|
||||
+ put_task_struct(child);
|
||||
+ out:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
|
||||
+ unsigned long data)
|
||||
+{
|
||||
+ unsigned long tmp;
|
||||
+ int copied;
|
||||
+
|
||||
+ copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
|
||||
+ if (copied != sizeof(tmp))
|
||||
+ return -EIO;
|
||||
+ return put_user(tmp, (unsigned long __user *)data);
|
||||
+}
|
||||
+
|
||||
+int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
|
||||
+ unsigned long data)
|
||||
+{
|
||||
+ int copied;
|
||||
+
|
||||
+ copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
|
||||
+ return (copied == sizeof(data)) ? 0 : -EIO;
|
||||
+}
|
||||
+
|
||||
+#if defined CONFIG_COMPAT
|
||||
+#include <linux/compat.h>
|
||||
+
|
||||
+asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
||||
+ compat_long_t addr, compat_long_t data)
|
||||
+{
|
||||
+ struct task_struct *child;
|
||||
+ long ret;
|
||||
+
|
||||
+ if (request == PTRACE_TRACEME) {
|
||||
+ ret = ptrace_traceme();
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ child = ptrace_get_task_struct(pid);
|
||||
+ if (IS_ERR(child)) {
|
||||
+ ret = PTR_ERR(child);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (request == PTRACE_ATTACH) {
|
||||
+ ret = ptrace_attach(child);
|
||||
+ /*
|
||||
+ * Some architectures need to do book-keeping after
|
||||
+ * a ptrace attach.
|
||||
+ */
|
||||
+ if (!ret)
|
||||
+ arch_ptrace_attach(child);
|
||||
+ goto out_put_task_struct;
|
||||
+ }
|
||||
+
|
||||
+ ret = ptrace_check_attach(child, request == PTRACE_KILL);
|
||||
+ if (!ret)
|
||||
+ ret = compat_arch_ptrace(child, request, addr, data);
|
||||
+
|
||||
+ out_put_task_struct:
|
||||
+ put_task_struct(child);
|
||||
+ out:
|
||||
+ return ret;
|
||||
+}
|
||||
+#endif /* CONFIG_COMPAT */
|
||||
+
|
||||
+#ifndef CONFIG_UTRACE
|
||||
+/*
|
||||
* ptrace a task: make the debugger its new parent and
|
||||
* move it to the ptrace list.
|
||||
*
|
||||
@@ -117,64 +430,6 @@ int ptrace_check_attach(struct task_stru
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int __ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
-{
|
||||
- const struct cred *cred = current_cred(), *tcred;
|
||||
-
|
||||
- /* May we inspect the given task?
|
||||
- * This check is used both for attaching with ptrace
|
||||
- * and for allowing access to sensitive information in /proc.
|
||||
- *
|
||||
- * ptrace_attach denies several cases that /proc allows
|
||||
- * because setting up the necessary parent/child relationship
|
||||
- * or halting the specified task is impossible.
|
||||
- */
|
||||
- int dumpable = 0;
|
||||
- /* Don't let security modules deny introspection */
|
||||
- if (task == current)
|
||||
- return 0;
|
||||
- rcu_read_lock();
|
||||
- tcred = __task_cred(task);
|
||||
- if (cred->user->user_ns == tcred->user->user_ns &&
|
||||
- (cred->uid == tcred->euid &&
|
||||
- cred->uid == tcred->suid &&
|
||||
- cred->uid == tcred->uid &&
|
||||
- cred->gid == tcred->egid &&
|
||||
- cred->gid == tcred->sgid &&
|
||||
- cred->gid == tcred->gid))
|
||||
- goto ok;
|
||||
- if (ns_capable(tcred->user->user_ns, CAP_SYS_PTRACE))
|
||||
- goto ok;
|
||||
- rcu_read_unlock();
|
||||
- return -EPERM;
|
||||
-ok:
|
||||
- rcu_read_unlock();
|
||||
- smp_rmb();
|
||||
- if (task->mm)
|
||||
- dumpable = get_dumpable(task->mm);
|
||||
- if (!dumpable && !task_ns_capable(task, CAP_SYS_PTRACE))
|
||||
- return -EPERM;
|
||||
-
|
||||
- return security_ptrace_access_check(task, mode);
|
||||
-}
|
||||
-
|
||||
-bool ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
-{
|
||||
- int err;
|
||||
- task_lock(task);
|
||||
- err = __ptrace_may_access(task, mode);
|
||||
- task_unlock(task);
|
||||
- return !err;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * For experimental use of utrace, exclude ptrace on the same task.
|
||||
- */
|
||||
-static inline bool exclude_ptrace(struct task_struct *task)
|
||||
-{
|
||||
- return unlikely(!!task_utrace_flags(task));
|
||||
-}
|
||||
-
|
||||
int ptrace_attach(struct task_struct *task)
|
||||
{
|
||||
int retval;
|
||||
@@ -624,44 +879,8 @@ int compat_ptrace_request(struct task_st
|
||||
return ret;
|
||||
}
|
||||
|
||||
-asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
||||
- compat_long_t addr, compat_long_t data)
|
||||
-{
|
||||
|
@ -1998,7 +2002,10 @@ index e275608..72ea65c 100644
|
|||
- return ret;
|
||||
-}
|
||||
#endif /* CONFIG_COMPAT */
|
||||
+#endif /* CONFIG_UTRACE */
|
||||
+#endif /* CONFIG_UTRACE */
|
||||
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
int ptrace_get_breakpoints(struct task_struct *tsk)
|
||||
diff --git a/kernel/utrace.c b/kernel/utrace.c
|
||||
index 26d6faf..37dce16 100644
|
||||
--- a/kernel/utrace.c
|
||||
|
|
|
@ -1,350 +0,0 @@
|
|||
From b71e18093e2e7f240797875c50c49552722f8825 Mon Sep 17 00:00:00 2001
|
||||
From: Jarod Wilson <jarod@redhat.com>
|
||||
Date: Mon, 15 Feb 2010 17:13:25 -0500
|
||||
Subject: [PATCH 1/2] dvb: add lgdt3304 support to lgdt3305 driver
|
||||
|
||||
There's a currently-unused lgdt3304 demod driver, which leaves a lot to
|
||||
be desired as far as functionality. The 3304 is unsurprisingly quite
|
||||
similar to the 3305, and empirical testing yeilds far better results
|
||||
and more complete functionality by merging 3304 support into the 3305
|
||||
driver. (For example, the current lgdt3304 driver lacks support for
|
||||
signal strength, snr, ucblocks, etc., which we get w/the lgdt3305).
|
||||
|
||||
For the moment, not dropping the lgdt3304 driver, and its still up to
|
||||
a given device's config setup to choose which demod driver to use, but
|
||||
I'd suggest dropping the 3304 driver entirely.
|
||||
|
||||
As a follow-up to this patch, I've got another patch that adds support
|
||||
for the KWorld PlusTV 340U (ATSC) em2870-based tuner stick, driving
|
||||
its lgdt3304 demod via this lgdt3305 driver, which is what I used to
|
||||
successfully test this patch with both VSB_8 and QAM_256 signals.
|
||||
|
||||
A few pieces are still a touch crude, but I think its a solid start,
|
||||
as well as much cleaner and more feature-complete than the existing
|
||||
lgdt3304 driver.
|
||||
|
||||
Signed-off-by: Jarod Wilson <jarod@redhat.com>
|
||||
---
|
||||
drivers/media/dvb/frontends/lgdt3305.c | 206 ++++++++++++++++++++++++++++++--
|
||||
drivers/media/dvb/frontends/lgdt3305.h | 6 +
|
||||
2 files changed, 203 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/frontends/lgdt3305.c b/drivers/media/dvb/frontends/lgdt3305.c
|
||||
index fde8c59..40695e6 100644
|
||||
--- a/drivers/media/dvb/frontends/lgdt3305.c
|
||||
+++ b/drivers/media/dvb/frontends/lgdt3305.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Support for LGDT3305 - VSB/QAM
|
||||
+ * Support for LG Electronics LGDT3304 and LGDT3305 - VSB/QAM
|
||||
*
|
||||
* Copyright (C) 2008, 2009 Michael Krufky <mkrufky@linuxtv.org>
|
||||
*
|
||||
@@ -357,7 +357,10 @@ static int lgdt3305_rfagc_loop(struct lgdt3305_state *state,
|
||||
case QAM_256:
|
||||
agcdelay = 0x046b;
|
||||
rfbw = 0x8889;
|
||||
- ifbw = 0x8888;
|
||||
+ if (state->cfg->demod_chip == LGDT3305)
|
||||
+ ifbw = 0x8888;
|
||||
+ else
|
||||
+ ifbw = 0x6666;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -409,8 +412,18 @@ static int lgdt3305_agc_setup(struct lgdt3305_state *state,
|
||||
lg_dbg("lockdten = %d, acqen = %d\n", lockdten, acqen);
|
||||
|
||||
/* control agc function */
|
||||
- lgdt3305_write_reg(state, LGDT3305_AGC_CTRL_4, 0xe1 | lockdten << 1);
|
||||
- lgdt3305_set_reg_bit(state, LGDT3305_AGC_CTRL_1, 2, acqen);
|
||||
+ switch (state->cfg->demod_chip) {
|
||||
+ case LGDT3304:
|
||||
+ lgdt3305_write_reg(state, 0x0314, 0xe1 | lockdten << 1);
|
||||
+ lgdt3305_set_reg_bit(state, 0x030e, 2, acqen);
|
||||
+ break;
|
||||
+ case LGDT3305:
|
||||
+ lgdt3305_write_reg(state, LGDT3305_AGC_CTRL_4, 0xe1 | lockdten << 1);
|
||||
+ lgdt3305_set_reg_bit(state, LGDT3305_AGC_CTRL_1, 2, acqen);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
return lgdt3305_rfagc_loop(state, param);
|
||||
}
|
||||
@@ -543,6 +556,11 @@ static int lgdt3305_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
|
||||
enable ? 0 : 1);
|
||||
}
|
||||
|
||||
+static int lgdt3304_sleep(struct dvb_frontend *fe)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int lgdt3305_sleep(struct dvb_frontend *fe)
|
||||
{
|
||||
struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
@@ -571,6 +589,55 @@ static int lgdt3305_sleep(struct dvb_frontend *fe)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int lgdt3304_init(struct dvb_frontend *fe)
|
||||
+{
|
||||
+ struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
+ int ret;
|
||||
+
|
||||
+ static struct lgdt3305_reg lgdt3304_init_data[] = {
|
||||
+ { .reg = LGDT3305_GEN_CTRL_1, .val = 0x03, },
|
||||
+ { .reg = 0x000d, .val = 0x02, },
|
||||
+ { .reg = 0x000e, .val = 0x02, },
|
||||
+ { .reg = LGDT3305_DGTL_AGC_REF_1, .val = 0x32, },
|
||||
+ { .reg = LGDT3305_DGTL_AGC_REF_2, .val = 0xc4, },
|
||||
+ { .reg = LGDT3305_CR_CTR_FREQ_1, .val = 0x00, },
|
||||
+ { .reg = LGDT3305_CR_CTR_FREQ_2, .val = 0x00, },
|
||||
+ { .reg = LGDT3305_CR_CTR_FREQ_3, .val = 0x00, },
|
||||
+ { .reg = LGDT3305_CR_CTR_FREQ_4, .val = 0x00, },
|
||||
+ { .reg = LGDT3305_CR_CTRL_7, .val = 0xf9, },
|
||||
+ { .reg = 0x0112, .val = 0x17, },
|
||||
+ { .reg = 0x0113, .val = 0x15, },
|
||||
+ { .reg = 0x0114, .val = 0x18, },
|
||||
+ { .reg = 0x0115, .val = 0xff, },
|
||||
+ { .reg = 0x0116, .val = 0x3c, },
|
||||
+ { .reg = 0x0214, .val = 0x67, },
|
||||
+ { .reg = 0x0424, .val = 0x8d, },
|
||||
+ { .reg = 0x0427, .val = 0x12, },
|
||||
+ { .reg = 0x0428, .val = 0x4f, },
|
||||
+ { .reg = LGDT3305_IFBW_1, .val = 0x80, },
|
||||
+ { .reg = LGDT3305_IFBW_2, .val = 0x00, },
|
||||
+ { .reg = 0x030a, .val = 0x08, },
|
||||
+ { .reg = 0x030b, .val = 0x9b, },
|
||||
+ { .reg = 0x030d, .val = 0x00, },
|
||||
+ { .reg = 0x030e, .val = 0x1c, },
|
||||
+ { .reg = 0x0314, .val = 0xe1, },
|
||||
+ { .reg = 0x000d, .val = 0x82, },
|
||||
+ { .reg = LGDT3305_TP_CTRL_1, .val = 0x5b, },
|
||||
+ { .reg = LGDT3305_TP_CTRL_1, .val = 0x5b, },
|
||||
+ };
|
||||
+
|
||||
+ lg_dbg("\n");
|
||||
+
|
||||
+ ret = lgdt3305_write_regs(state, lgdt3304_init_data,
|
||||
+ ARRAY_SIZE(lgdt3304_init_data));
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ ret = lgdt3305_soft_reset(state);
|
||||
+fail:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int lgdt3305_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
@@ -639,6 +706,88 @@ fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int lgdt3304_set_parameters(struct dvb_frontend *fe,
|
||||
+ struct dvb_frontend_parameters *param)
|
||||
+{
|
||||
+ struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
+ int ret;
|
||||
+
|
||||
+ lg_dbg("(%d, %d)\n", param->frequency, param->u.vsb.modulation);
|
||||
+
|
||||
+ if (fe->ops.tuner_ops.set_params) {
|
||||
+ ret = fe->ops.tuner_ops.set_params(fe, param);
|
||||
+ if (fe->ops.i2c_gate_ctrl)
|
||||
+ fe->ops.i2c_gate_ctrl(fe, 0);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+ state->current_frequency = param->frequency;
|
||||
+ }
|
||||
+
|
||||
+ ret = lgdt3305_set_modulation(state, param);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ ret = lgdt3305_passband_digital_agc(state, param);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ ret = lgdt3305_agc_setup(state, param);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ /* reg 0x030d is 3304-only... seen in vsb and qam usbsnoops... */
|
||||
+ switch (param->u.vsb.modulation) {
|
||||
+ case VSB_8:
|
||||
+ lgdt3305_write_reg(state, 0x030d, 0x00);
|
||||
+#if 1
|
||||
+ lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_1, 0x4f);
|
||||
+ lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_2, 0x0c);
|
||||
+ lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_3, 0xac);
|
||||
+ lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_4, 0xba);
|
||||
+#endif
|
||||
+ break;
|
||||
+ case QAM_64:
|
||||
+ case QAM_256:
|
||||
+ lgdt3305_write_reg(state, 0x030d, 0x14);
|
||||
+#if 1
|
||||
+ ret = lgdt3305_set_if(state, param);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+#endif
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+#if 0
|
||||
+ /* the set_if vsb formula doesn't work for the 3304, we end up sending
|
||||
+ * 0x40851e07 instead of 0x4f0cacba (which works back to 94050, rather
|
||||
+ * than 3250, in the case of the kworld 340u) */
|
||||
+ ret = lgdt3305_set_if(state, param);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+#endif
|
||||
+
|
||||
+ ret = lgdt3305_spectral_inversion(state, param,
|
||||
+ state->cfg->spectral_inversion
|
||||
+ ? 1 : 0);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ state->current_modulation = param->u.vsb.modulation;
|
||||
+
|
||||
+ ret = lgdt3305_mpeg_mode(state, state->cfg->mpeg_mode);
|
||||
+ if (lg_fail(ret))
|
||||
+ goto fail;
|
||||
+
|
||||
+ /* lgdt3305_mpeg_mode_polarity calls lgdt3305_soft_reset */
|
||||
+ ret = lgdt3305_mpeg_mode_polarity(state,
|
||||
+ state->cfg->tpclk_edge,
|
||||
+ state->cfg->tpvalid_polarity);
|
||||
+fail:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int lgdt3305_set_parameters(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *param)
|
||||
{
|
||||
@@ -847,6 +996,10 @@ static int lgdt3305_read_status(struct dvb_frontend *fe, fe_status_t *status)
|
||||
switch (state->current_modulation) {
|
||||
case QAM_256:
|
||||
case QAM_64:
|
||||
+#if 0 /* needed w/3304 to set FE_HAS_SIGNAL */
|
||||
+ if (cr_lock)
|
||||
+ *status |= FE_HAS_SIGNAL;
|
||||
+#endif
|
||||
ret = lgdt3305_read_fec_lock_status(state, &fec_lock);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
@@ -992,6 +1145,7 @@ static void lgdt3305_release(struct dvb_frontend *fe)
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
+static struct dvb_frontend_ops lgdt3304_ops;
|
||||
static struct dvb_frontend_ops lgdt3305_ops;
|
||||
|
||||
struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
|
||||
@@ -1012,11 +1166,21 @@ struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
|
||||
state->cfg = config;
|
||||
state->i2c_adap = i2c_adap;
|
||||
|
||||
- memcpy(&state->frontend.ops, &lgdt3305_ops,
|
||||
- sizeof(struct dvb_frontend_ops));
|
||||
+ switch (config->demod_chip) {
|
||||
+ case LGDT3304:
|
||||
+ memcpy(&state->frontend.ops, &lgdt3304_ops,
|
||||
+ sizeof(struct dvb_frontend_ops));
|
||||
+ break;
|
||||
+ case LGDT3305:
|
||||
+ memcpy(&state->frontend.ops, &lgdt3305_ops,
|
||||
+ sizeof(struct dvb_frontend_ops));
|
||||
+ break;
|
||||
+ default:
|
||||
+ goto fail;
|
||||
+ }
|
||||
state->frontend.demodulator_priv = state;
|
||||
|
||||
- /* verify that we're talking to a lg dt3305 */
|
||||
+ /* verify that we're talking to a lg dt3304/5 */
|
||||
ret = lgdt3305_read_reg(state, LGDT3305_GEN_CTRL_2, &val);
|
||||
if ((lg_fail(ret)) | (val == 0))
|
||||
goto fail;
|
||||
@@ -1035,12 +1199,36 @@ struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
|
||||
|
||||
return &state->frontend;
|
||||
fail:
|
||||
- lg_warn("unable to detect LGDT3305 hardware\n");
|
||||
+ lg_warn("unable to detect %s hardware\n",
|
||||
+ config->demod_chip ? "LGDT3304" : "LGDT3305");
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(lgdt3305_attach);
|
||||
|
||||
+static struct dvb_frontend_ops lgdt3304_ops = {
|
||||
+ .info = {
|
||||
+ .name = "LG Electronics LGDT3304 VSB/QAM Frontend",
|
||||
+ .type = FE_ATSC,
|
||||
+ .frequency_min = 54000000,
|
||||
+ .frequency_max = 858000000,
|
||||
+ .frequency_stepsize = 62500,
|
||||
+ .caps = FE_CAN_QAM_64 | FE_CAN_QAM_256 | FE_CAN_8VSB
|
||||
+ },
|
||||
+ .i2c_gate_ctrl = lgdt3305_i2c_gate_ctrl,
|
||||
+ .init = lgdt3304_init,
|
||||
+ .sleep = lgdt3304_sleep,
|
||||
+ .set_frontend = lgdt3304_set_parameters,
|
||||
+ .get_frontend = lgdt3305_get_frontend,
|
||||
+ .get_tune_settings = lgdt3305_get_tune_settings,
|
||||
+ .read_status = lgdt3305_read_status,
|
||||
+ .read_ber = lgdt3305_read_ber,
|
||||
+ .read_signal_strength = lgdt3305_read_signal_strength,
|
||||
+ .read_snr = lgdt3305_read_snr,
|
||||
+ .read_ucblocks = lgdt3305_read_ucblocks,
|
||||
+ .release = lgdt3305_release,
|
||||
+};
|
||||
+
|
||||
static struct dvb_frontend_ops lgdt3305_ops = {
|
||||
.info = {
|
||||
.name = "LG Electronics LGDT3305 VSB/QAM Frontend",
|
||||
@@ -1064,7 +1252,7 @@ static struct dvb_frontend_ops lgdt3305_ops = {
|
||||
.release = lgdt3305_release,
|
||||
};
|
||||
|
||||
-MODULE_DESCRIPTION("LG Electronics LGDT3305 ATSC/QAM-B Demodulator Driver");
|
||||
+MODULE_DESCRIPTION("LG Electronics LGDT3304/5 ATSC/QAM-B Demodulator Driver");
|
||||
MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION("0.1");
|
||||
diff --git a/drivers/media/dvb/frontends/lgdt3305.h b/drivers/media/dvb/frontends/lgdt3305.h
|
||||
index 9cb11c9..a7f30c2 100644
|
||||
--- a/drivers/media/dvb/frontends/lgdt3305.h
|
||||
+++ b/drivers/media/dvb/frontends/lgdt3305.h
|
||||
@@ -41,6 +41,11 @@ enum lgdt3305_tp_valid_polarity {
|
||||
LGDT3305_TP_VALID_HIGH = 1,
|
||||
};
|
||||
|
||||
+enum lgdt_demod_chip_type {
|
||||
+ LGDT3305 = 0,
|
||||
+ LGDT3304 = 1,
|
||||
+};
|
||||
+
|
||||
struct lgdt3305_config {
|
||||
u8 i2c_addr;
|
||||
|
||||
@@ -65,6 +70,7 @@ struct lgdt3305_config {
|
||||
enum lgdt3305_mpeg_mode mpeg_mode;
|
||||
enum lgdt3305_tp_clock_edge tpclk_edge;
|
||||
enum lgdt3305_tp_valid_polarity tpvalid_polarity;
|
||||
+ enum lgdt_demod_chip_type demod_chip;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_DVB_LGDT3305) || (defined(CONFIG_DVB_LGDT3305_MODULE) && \
|
||||
--
|
||||
1.6.6
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,362 +0,0 @@
|
|||
From: Martin Rubli <martin_rubli@logitech.com>
|
||||
Date: Wed, 19 May 2010 22:51:56 +0000 (+0200)
|
||||
Subject: uvcvideo: Add support for absolute pan/tilt controls
|
||||
X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=d3c2f664ec76aff14c3841c99e84cd78d7227f79
|
||||
|
||||
uvcvideo: Add support for absolute pan/tilt controls
|
||||
|
||||
Signed-off-by: Martin Rubli <martin_rubli@logitech.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
index aa0720a..5ec2f4a 100644
|
||||
--- a/drivers/media/video/uvc/uvc_ctrl.c
|
||||
+++ b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
@@ -606,6 +606,26 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
|
||||
.set = uvc_ctrl_set_zoom,
|
||||
},
|
||||
{
|
||||
+ .id = V4L2_CID_PAN_ABSOLUTE,
|
||||
+ .name = "Pan (Absolute)",
|
||||
+ .entity = UVC_GUID_UVC_CAMERA,
|
||||
+ .selector = UVC_CT_PANTILT_ABSOLUTE_CONTROL,
|
||||
+ .size = 32,
|
||||
+ .offset = 0,
|
||||
+ .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
|
||||
+ .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
|
||||
+ },
|
||||
+ {
|
||||
+ .id = V4L2_CID_TILT_ABSOLUTE,
|
||||
+ .name = "Tilt (Absolute)",
|
||||
+ .entity = UVC_GUID_UVC_CAMERA,
|
||||
+ .selector = UVC_CT_PANTILT_ABSOLUTE_CONTROL,
|
||||
+ .size = 32,
|
||||
+ .offset = 32,
|
||||
+ .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
|
||||
+ .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
|
||||
+ },
|
||||
+ {
|
||||
.id = V4L2_CID_PRIVACY,
|
||||
.name = "Privacy",
|
||||
.entity = UVC_GUID_UVC_CAMERA,
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 19 May 2010 23:15:00 +0000 (+0200)
|
||||
Subject: uvcvideo: Make button controls work properly
|
||||
X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=2bd47ad4894bfaf1a97660b821cbc46439a614d6
|
||||
|
||||
uvcvideo: Make button controls work properly
|
||||
|
||||
According to the v4l2 spec, writing any value to a button control should
|
||||
result in the action belonging to the button control being triggered.
|
||||
UVC cams however want to see a 1 written, this patch fixes this by
|
||||
overriding whatever value user space passed in with -1 (0xffffffff) when
|
||||
the control is a button control.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
index 5ec2f4a..8bb825d 100644
|
||||
--- a/drivers/media/video/uvc/uvc_ctrl.c
|
||||
+++ b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
@@ -698,6 +698,14 @@ static void uvc_set_le_value(struct uvc_control_mapping *mapping,
|
||||
int offset = mapping->offset;
|
||||
__u8 mask;
|
||||
|
||||
+ /* According to the v4l2 spec, writing any value to a button control
|
||||
+ * should result in the action belonging to the button control being
|
||||
+ * triggered. UVC devices however want to see a 1 written -> override
|
||||
+ * value.
|
||||
+ */
|
||||
+ if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON)
|
||||
+ value = -1;
|
||||
+
|
||||
data += offset / 8;
|
||||
offset &= 7;
|
||||
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Thu, 18 Feb 2010 19:38:52 +0000 (+0100)
|
||||
Subject: uvcvideo: Support menu controls in the control mapping API
|
||||
X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=4930f2662e47d33e5baedac620da401a225bc3a8
|
||||
|
||||
uvcvideo: Support menu controls in the control mapping API
|
||||
|
||||
The UVCIOC_CTRL_MAP ioctl doesn't support menu entries for menu
|
||||
controls. As the uvc_xu_control_mapping structure has no reserved
|
||||
fields, this can't be fixed while keeping ABI compatibility.
|
||||
|
||||
Modify the UVCIOC_CTRL_MAP ioctl to add menu entries support, and define
|
||||
UVCIOC_CTRL_MAP_OLD that supports the old ABI without any ability to add
|
||||
menu controls.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
index 8bb825d..c88d72e 100644
|
||||
--- a/drivers/media/video/uvc/uvc_ctrl.c
|
||||
+++ b/drivers/media/video/uvc/uvc_ctrl.c
|
||||
@@ -1606,6 +1606,28 @@ void uvc_ctrl_cleanup_device(struct uvc_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
+void uvc_ctrl_cleanup(void)
|
||||
+{
|
||||
+ struct uvc_control_info *info;
|
||||
+ struct uvc_control_info *ni;
|
||||
+ struct uvc_control_mapping *mapping;
|
||||
+ struct uvc_control_mapping *nm;
|
||||
+
|
||||
+ list_for_each_entry_safe(info, ni, &uvc_driver.controls, list) {
|
||||
+ if (!(info->flags & UVC_CONTROL_EXTENSION))
|
||||
+ continue;
|
||||
+
|
||||
+ list_for_each_entry_safe(mapping, nm, &info->mappings, list) {
|
||||
+ list_del(&mapping->list);
|
||||
+ kfree(mapping->menu_info);
|
||||
+ kfree(mapping);
|
||||
+ }
|
||||
+
|
||||
+ list_del(&info->list);
|
||||
+ kfree(info);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void uvc_ctrl_init(void)
|
||||
{
|
||||
struct uvc_control_info *ctrl = uvc_ctrls;
|
||||
diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
|
||||
index 838b56f..34818c1 100644
|
||||
--- a/drivers/media/video/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/video/uvc/uvc_driver.c
|
||||
@@ -2261,6 +2261,7 @@ static int __init uvc_init(void)
|
||||
static void __exit uvc_cleanup(void)
|
||||
{
|
||||
usb_deregister(&uvc_driver.driver);
|
||||
+ uvc_ctrl_cleanup();
|
||||
}
|
||||
|
||||
module_init(uvc_init);
|
||||
diff --git a/drivers/media/video/uvc/uvc_v4l2.c b/drivers/media/video/uvc/uvc_v4l2.c
|
||||
index 7c9ab29..485a899 100644
|
||||
--- a/drivers/media/video/uvc/uvc_v4l2.c
|
||||
+++ b/drivers/media/video/uvc/uvc_v4l2.c
|
||||
@@ -29,6 +29,71 @@
|
||||
#include "uvcvideo.h"
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
+ * UVC ioctls
|
||||
+ */
|
||||
+static int uvc_ioctl_ctrl_map(struct uvc_xu_control_mapping *xmap, int old)
|
||||
+{
|
||||
+ struct uvc_control_mapping *map;
|
||||
+ unsigned int size;
|
||||
+ int ret;
|
||||
+
|
||||
+ map = kzalloc(sizeof *map, GFP_KERNEL);
|
||||
+ if (map == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ map->id = xmap->id;
|
||||
+ memcpy(map->name, xmap->name, sizeof map->name);
|
||||
+ memcpy(map->entity, xmap->entity, sizeof map->entity);
|
||||
+ map->selector = xmap->selector;
|
||||
+ map->size = xmap->size;
|
||||
+ map->offset = xmap->offset;
|
||||
+ map->v4l2_type = xmap->v4l2_type;
|
||||
+ map->data_type = xmap->data_type;
|
||||
+
|
||||
+ switch (xmap->v4l2_type) {
|
||||
+ case V4L2_CTRL_TYPE_INTEGER:
|
||||
+ case V4L2_CTRL_TYPE_BOOLEAN:
|
||||
+ case V4L2_CTRL_TYPE_BUTTON:
|
||||
+ break;
|
||||
+
|
||||
+ case V4L2_CTRL_TYPE_MENU:
|
||||
+ if (old) {
|
||||
+ ret = -EINVAL;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ size = xmap->menu_count * sizeof(*map->menu_info);
|
||||
+ map->menu_info = kmalloc(size, GFP_KERNEL);
|
||||
+ if (map->menu_info == NULL) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ if (copy_from_user(map->menu_info, xmap->menu_info, size)) {
|
||||
+ ret = -EFAULT;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ map->menu_count = xmap->menu_count;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ ret = -EINVAL;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ ret = uvc_ctrl_add_mapping(map);
|
||||
+
|
||||
+done:
|
||||
+ if (ret < 0) {
|
||||
+ kfree(map->menu_info);
|
||||
+ kfree(map);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/* ------------------------------------------------------------------------
|
||||
* V4L2 interface
|
||||
*/
|
||||
|
||||
@@ -974,7 +1039,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
info->flags = xinfo->flags;
|
||||
|
||||
info->flags |= UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX |
|
||||
- UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF;
|
||||
+ UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF |
|
||||
+ UVC_CONTROL_EXTENSION;
|
||||
|
||||
ret = uvc_ctrl_add_info(info);
|
||||
if (ret < 0)
|
||||
@@ -982,32 +1048,12 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
break;
|
||||
}
|
||||
|
||||
+ case UVCIOC_CTRL_MAP_OLD:
|
||||
case UVCIOC_CTRL_MAP:
|
||||
- {
|
||||
- struct uvc_xu_control_mapping *xmap = arg;
|
||||
- struct uvc_control_mapping *map;
|
||||
-
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
- map = kzalloc(sizeof *map, GFP_KERNEL);
|
||||
- if (map == NULL)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- map->id = xmap->id;
|
||||
- memcpy(map->name, xmap->name, sizeof map->name);
|
||||
- memcpy(map->entity, xmap->entity, sizeof map->entity);
|
||||
- map->selector = xmap->selector;
|
||||
- map->size = xmap->size;
|
||||
- map->offset = xmap->offset;
|
||||
- map->v4l2_type = xmap->v4l2_type;
|
||||
- map->data_type = xmap->data_type;
|
||||
-
|
||||
- ret = uvc_ctrl_add_mapping(map);
|
||||
- if (ret < 0)
|
||||
- kfree(map);
|
||||
- break;
|
||||
- }
|
||||
+ return uvc_ioctl_ctrl_map(arg, cmd == UVCIOC_CTRL_MAP_OLD);
|
||||
|
||||
case UVCIOC_CTRL_GET:
|
||||
return uvc_xu_ctrl_query(chain, arg, 0);
|
||||
diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h
|
||||
index d1f8840..14f77e4 100644
|
||||
--- a/drivers/media/video/uvc/uvcvideo.h
|
||||
+++ b/drivers/media/video/uvc/uvcvideo.h
|
||||
@@ -27,6 +27,8 @@
|
||||
#define UVC_CONTROL_RESTORE (1 << 6)
|
||||
/* Control can be updated by the camera. */
|
||||
#define UVC_CONTROL_AUTO_UPDATE (1 << 7)
|
||||
+/* Control is an extension unit control. */
|
||||
+#define UVC_CONTROL_EXTENSION (1 << 8)
|
||||
|
||||
#define UVC_CONTROL_GET_RANGE (UVC_CONTROL_GET_CUR | UVC_CONTROL_GET_MIN | \
|
||||
UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \
|
||||
@@ -40,6 +42,15 @@ struct uvc_xu_control_info {
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
+struct uvc_menu_info {
|
||||
+ __u32 value;
|
||||
+ __u8 name[32];
|
||||
+};
|
||||
+
|
||||
+struct uvc_xu_control_mapping_old {
|
||||
+ __u8 reserved[64];
|
||||
+};
|
||||
+
|
||||
struct uvc_xu_control_mapping {
|
||||
__u32 id;
|
||||
__u8 name[32];
|
||||
@@ -50,6 +61,11 @@ struct uvc_xu_control_mapping {
|
||||
__u8 offset;
|
||||
enum v4l2_ctrl_type v4l2_type;
|
||||
__u32 data_type;
|
||||
+
|
||||
+ struct uvc_menu_info __user *menu_info;
|
||||
+ __u32 menu_count;
|
||||
+
|
||||
+ __u32 reserved[4];
|
||||
};
|
||||
|
||||
struct uvc_xu_control {
|
||||
@@ -60,6 +76,7 @@ struct uvc_xu_control {
|
||||
};
|
||||
|
||||
#define UVCIOC_CTRL_ADD _IOW('U', 1, struct uvc_xu_control_info)
|
||||
+#define UVCIOC_CTRL_MAP_OLD _IOWR('U', 2, struct uvc_xu_control_mapping_old)
|
||||
#define UVCIOC_CTRL_MAP _IOWR('U', 2, struct uvc_xu_control_mapping)
|
||||
#define UVCIOC_CTRL_GET _IOWR('U', 3, struct uvc_xu_control)
|
||||
#define UVCIOC_CTRL_SET _IOW('U', 4, struct uvc_xu_control)
|
||||
@@ -198,11 +215,6 @@ struct uvc_streaming_control {
|
||||
__u8 bMaxVersion;
|
||||
};
|
||||
|
||||
-struct uvc_menu_info {
|
||||
- __u32 value;
|
||||
- __u8 name[32];
|
||||
-};
|
||||
-
|
||||
struct uvc_control_info {
|
||||
struct list_head list;
|
||||
struct list_head mappings;
|
||||
@@ -625,6 +637,7 @@ extern int uvc_ctrl_init_device(struct uvc_device *dev);
|
||||
extern void uvc_ctrl_cleanup_device(struct uvc_device *dev);
|
||||
extern int uvc_ctrl_resume_device(struct uvc_device *dev);
|
||||
extern void uvc_ctrl_init(void);
|
||||
+extern void uvc_ctrl_cleanup(void);
|
||||
|
||||
extern int uvc_ctrl_begin(struct uvc_video_chain *chain);
|
||||
extern int __uvc_ctrl_commit(struct uvc_video_chain *chain, int rollback);
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Fri, 25 Jun 2010 07:58:43 +0000 (+0200)
|
||||
Subject: uvcvideo: Add support for Manta MM-353 Plako
|
||||
X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=352e661e1f347390a86cf34bc5e41adbdd1caa41
|
||||
|
||||
uvcvideo: Add support for Manta MM-353 Plako
|
||||
|
||||
The camera requires the PROBE_MINMAX quirk. Add a corresponding entry
|
||||
in the device IDs list
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
|
||||
index 34818c1..1a89384 100644
|
||||
--- a/drivers/media/video/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/video/uvc/uvc_driver.c
|
||||
@@ -2174,6 +2174,15 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_EXTRAFIELDS },
|
||||
+ /* Manta MM-353 Plako */
|
||||
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
+ .idVendor = 0x18ec,
|
||||
+ .idProduct = 0x3188,
|
||||
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
||||
+ .bInterfaceSubClass = 1,
|
||||
+ .bInterfaceProtocol = 0,
|
||||
+ .driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
/* FSC WebCam V30S */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
|
@ -1,66 +0,0 @@
|
|||
commit 885c252ffb059dc493200bdb981bdd21cabe4442
|
||||
Author: Matthew Garrett <mjg@redhat.com>
|
||||
Date: Thu Dec 9 18:31:59 2010 -0500
|
||||
|
||||
PCI: _OSC "supported" field should contain supported features, not enabled ones
|
||||
|
||||
From testing with Windows, the call to the PCI root _OSC method includes
|
||||
the full set of features supported by the operating system even if the
|
||||
hardware has already indicated that it doesn't support ASPM or MSI.
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=638912 is a case where making
|
||||
the _OSC call will incorrectly configure the chipset unless the supported
|
||||
field has bits 1, 2 and 4 set. Rework the functionality to ensure that
|
||||
we match this behaviour.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
|
||||
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
|
||||
index 96668ad..afb5d08 100644
|
||||
--- a/drivers/acpi/pci_root.c
|
||||
+++ b/drivers/acpi/pci_root.c
|
||||
@@ -450,7 +450,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
||||
struct acpi_pci_root *root;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *child;
|
||||
- u32 flags, base_flags;
|
||||
+ u32 flags;
|
||||
|
||||
root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
|
||||
if (!root)
|
||||
@@ -498,10 +498,15 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
||||
device->driver_data = root;
|
||||
|
||||
/*
|
||||
- * All supported architectures that use ACPI have support for
|
||||
- * PCI domains, so we indicate this in _OSC support capabilities.
|
||||
+ * Indicate support for various _OSC capabilities. These match
|
||||
+ * what the operating system supports, not what the hardware supports,
|
||||
+ * so they shouldn't be conditional on functionality that's been
|
||||
+ * blacklisted
|
||||
*/
|
||||
- flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
|
||||
+ flags = OSC_EXT_PCI_CONFIG_SUPPORT | OSC_ACTIVE_STATE_PWR_SUPPORT |
|
||||
+ OSC_CLOCK_PWR_CAPABILITY_SUPPORT |
|
||||
+ OSC_PCI_SEGMENT_GROUPS_SUPPORT | OSC_MSI_SUPPORT;
|
||||
+
|
||||
acpi_pci_osc_support(root, flags);
|
||||
|
||||
/*
|
||||
@@ -555,17 +560,6 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
||||
list_for_each_entry(child, &device->children, node)
|
||||
acpi_pci_bridge_scan(child);
|
||||
|
||||
- /* Indicate support for various _OSC capabilities. */
|
||||
- if (pci_ext_cfg_avail(root->bus->self))
|
||||
- flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
|
||||
- if (pcie_aspm_enabled())
|
||||
- flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
|
||||
- OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
|
||||
- if (pci_msi_enabled())
|
||||
- flags |= OSC_MSI_SUPPORT;
|
||||
- if (flags != base_flags)
|
||||
- acpi_pci_osc_support(root, flags);
|
||||
-
|
||||
pci_acpi_add_bus_pm_notifier(device, root->bus);
|
||||
if (device->wakeup.flags.run_wake)
|
||||
device_set_run_wake(root->bus->bridge, true);
|
|
@ -0,0 +1,29 @@
|
|||
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,227 +0,0 @@
|
|||
From linux-kernel-owner@vger.kernel.org Mon Jan 24 11:13:12 2011
|
||||
Date: Mon, 24 Jan 2011 11:13:04 -0500
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
To: mingo@redhat.com
|
||||
Cc: linux-kernel@vger.kernel.org, acme@redhat.com
|
||||
Subject: [PATCH] perf: fix gcc 4.6.0 issues with tools/perf
|
||||
Message-ID: <20110124161304.GK27353@bombadil.infradead.org>
|
||||
|
||||
Hi Ingo,
|
||||
|
||||
GCC 4.6.0 in Fedora rawhide turned up some compile errors in tools/perf
|
||||
due to the -Werror=unused-but-set-variable flag.
|
||||
|
||||
I've gone through and annotated some of the assignments that had side
|
||||
effects (ie: return value from a function) with the __used annotation,
|
||||
and in some cases, just removed unused code.
|
||||
|
||||
In a few cases, we were assigning something useful, but not using it in
|
||||
later parts of the function.
|
||||
|
||||
regards, Kyle
|
||||
|
||||
kyle@dreadnought:~/src% gcc --version
|
||||
gcc (GCC) 4.6.0 20110122 (Red Hat 4.6.0-0.3)
|
||||
|
||||
---
|
||||
|
||||
bench/sched-pipe.c | 2 +-
|
||||
builtin-sched.c | 12 +++---------
|
||||
builtin-top.c | 5 +----
|
||||
util/header.c | 2 +-
|
||||
util/hist.c | 3 ---
|
||||
util/scripting-engines/trace-event-python.c | 3 +--
|
||||
util/symbol.c | 4 ++--
|
||||
util/trace-event-parse.c | 2 +-
|
||||
util/ui/browsers/map.c | 2 +-
|
||||
9 files changed, 11 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/tools/perf/bench/sched-pipe.c b/tools/perf/bench/sched-pipe.c
|
||||
index d9ab3ce..0c7454f 100644
|
||||
--- a/tools/perf/bench/sched-pipe.c
|
||||
+++ b/tools/perf/bench/sched-pipe.c
|
||||
@@ -55,7 +55,7 @@ int bench_sched_pipe(int argc, const char **argv,
|
||||
* discarding returned value of read(), write()
|
||||
* causes error in building environment for perf
|
||||
*/
|
||||
- int ret, wait_stat;
|
||||
+ int __used ret, wait_stat;
|
||||
pid_t pid, retpid;
|
||||
|
||||
argc = parse_options(argc, argv, options,
|
||||
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
|
||||
index 29e7ffd..f9e304f 100644
|
||||
--- a/tools/perf/builtin-sched.c
|
||||
+++ b/tools/perf/builtin-sched.c
|
||||
@@ -369,11 +369,6 @@ static void
|
||||
process_sched_event(struct task_desc *this_task __used, struct sched_atom *atom)
|
||||
{
|
||||
int ret = 0;
|
||||
- u64 now;
|
||||
- long long delta;
|
||||
-
|
||||
- now = get_nsecs();
|
||||
- delta = start_time + atom->timestamp - now;
|
||||
|
||||
switch (atom->type) {
|
||||
case SCHED_EVENT_RUN:
|
||||
@@ -562,7 +557,7 @@ static void wait_for_tasks(void)
|
||||
|
||||
static void run_one_test(void)
|
||||
{
|
||||
- u64 T0, T1, delta, avg_delta, fluct, std_dev;
|
||||
+ u64 T0, T1, delta, avg_delta, fluct;
|
||||
|
||||
T0 = get_nsecs();
|
||||
wait_for_tasks();
|
||||
@@ -578,7 +573,6 @@ static void run_one_test(void)
|
||||
else
|
||||
fluct = delta - avg_delta;
|
||||
sum_fluct += fluct;
|
||||
- std_dev = sum_fluct / nr_runs / sqrt(nr_runs);
|
||||
if (!run_avg)
|
||||
run_avg = delta;
|
||||
run_avg = (run_avg*9 + delta)/10;
|
||||
@@ -799,7 +793,7 @@ replay_switch_event(struct trace_switch_event *switch_event,
|
||||
u64 timestamp,
|
||||
struct thread *thread __used)
|
||||
{
|
||||
- struct task_desc *prev, *next;
|
||||
+ struct task_desc *prev, __used *next;
|
||||
u64 timestamp0;
|
||||
s64 delta;
|
||||
|
||||
@@ -1404,7 +1398,7 @@ map_switch_event(struct trace_switch_event *switch_event,
|
||||
u64 timestamp,
|
||||
struct thread *thread __used)
|
||||
{
|
||||
- struct thread *sched_out, *sched_in;
|
||||
+ struct thread *sched_out __used, *sched_in;
|
||||
int new_shortname;
|
||||
u64 timestamp0;
|
||||
s64 delta;
|
||||
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
|
||||
index 05344c6..373cfc0 100644
|
||||
--- a/tools/perf/builtin-top.c
|
||||
+++ b/tools/perf/builtin-top.c
|
||||
@@ -182,7 +182,6 @@ static int parse_source(struct sym_entry *syme)
|
||||
FILE *file;
|
||||
char command[PATH_MAX*2];
|
||||
const char *path;
|
||||
- u64 len;
|
||||
|
||||
if (!syme)
|
||||
return -1;
|
||||
@@ -211,8 +210,6 @@ static int parse_source(struct sym_entry *syme)
|
||||
}
|
||||
path = map->dso->long_name;
|
||||
|
||||
- len = sym->end - sym->start;
|
||||
-
|
||||
sprintf(command,
|
||||
"objdump --start-address=%#0*" PRIx64 " --stop-address=%#0*" PRIx64 " -dS %s",
|
||||
BITS_PER_LONG / 4, map__rip_2objdump(map, sym->start),
|
||||
@@ -1295,7 +1292,7 @@ static int __cmd_top(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
struct perf_evsel *counter;
|
||||
- int i, ret;
|
||||
+ int i, ret __used;
|
||||
/*
|
||||
* FIXME: perf_session__new should allow passing a O_MMAP, so that all this
|
||||
* mmap reading, etc is encapsulated in it. Use O_WRONLY for now.
|
||||
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
|
||||
index 989fa2d..c0e5019 100644
|
||||
--- a/tools/perf/util/header.c
|
||||
+++ b/tools/perf/util/header.c
|
||||
@@ -1139,7 +1139,7 @@ int event__synthesize_tracing_data(int fd, struct list_head *pattrs,
|
||||
{
|
||||
event_t ev;
|
||||
ssize_t size = 0, aligned_size = 0, padding;
|
||||
- int err = 0;
|
||||
+ int err __used = 0;
|
||||
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
|
||||
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
|
||||
index c749ba6..a01a33d 100644
|
||||
--- a/tools/perf/util/hist.c
|
||||
+++ b/tools/perf/util/hist.c
|
||||
@@ -1091,7 +1091,6 @@ int hist_entry__annotate(struct hist_entry *self, struct list_head *head,
|
||||
char command[PATH_MAX * 2];
|
||||
FILE *file;
|
||||
int err = 0;
|
||||
- u64 len;
|
||||
char symfs_filename[PATH_MAX];
|
||||
|
||||
if (filename) {
|
||||
@@ -1136,8 +1135,6 @@ fallback:
|
||||
filename, sym->name, map->unmap_ip(map, sym->start),
|
||||
map->unmap_ip(map, sym->end));
|
||||
|
||||
- len = sym->end - sym->start;
|
||||
-
|
||||
pr_debug("annotating [%p] %30s : [%p] %30s\n",
|
||||
dso, dso->long_name, sym, sym->name);
|
||||
|
||||
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
|
||||
index c6d9933..2040b85 100644
|
||||
--- a/tools/perf/util/scripting-engines/trace-event-python.c
|
||||
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
|
||||
@@ -248,8 +248,7 @@ static void python_process_event(int cpu, void *data,
|
||||
context = PyCObject_FromVoidPtr(scripting_context, NULL);
|
||||
|
||||
PyTuple_SetItem(t, n++, PyString_FromString(handler_name));
|
||||
- PyTuple_SetItem(t, n++,
|
||||
- PyCObject_FromVoidPtr(scripting_context, NULL));
|
||||
+ PyTuple_SetItem(t, n++, context);
|
||||
|
||||
if (handler) {
|
||||
PyTuple_SetItem(t, n++, PyInt_FromLong(cpu));
|
||||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
|
||||
index 15ccfba..52e82cf 100644
|
||||
--- a/tools/perf/util/symbol.c
|
||||
+++ b/tools/perf/util/symbol.c
|
||||
@@ -1517,8 +1517,8 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
|
||||
symbol_conf.symfs, self->long_name);
|
||||
break;
|
||||
case DSO__ORIG_GUEST_KMODULE:
|
||||
- if (map->groups && map->groups->machine)
|
||||
- root_dir = map->groups->machine->root_dir;
|
||||
+ if (map->groups && machine)
|
||||
+ root_dir = machine->root_dir;
|
||||
else
|
||||
root_dir = "";
|
||||
snprintf(name, size, "%s%s%s", symbol_conf.symfs,
|
||||
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
|
||||
index 73a0222..d8e622d 100644
|
||||
--- a/tools/perf/util/trace-event-parse.c
|
||||
+++ b/tools/perf/util/trace-event-parse.c
|
||||
@@ -153,7 +153,7 @@ void parse_proc_kallsyms(char *file, unsigned int size __unused)
|
||||
char *next = NULL;
|
||||
char *addr_str;
|
||||
char ch;
|
||||
- int ret;
|
||||
+ int ret __used;
|
||||
int i;
|
||||
|
||||
line = strtok_r(file, "\n", &next);
|
||||
diff --git a/tools/perf/util/ui/browsers/map.c b/tools/perf/util/ui/browsers/map.c
|
||||
index e35437d..3788cad 100644
|
||||
--- a/tools/perf/util/ui/browsers/map.c
|
||||
+++ b/tools/perf/util/ui/browsers/map.c
|
||||
@@ -40,7 +40,7 @@ static int ui_entry__read(const char *title, char *bf, size_t size, int width)
|
||||
out_free_form:
|
||||
newtPopWindow();
|
||||
newtFormDestroy(form);
|
||||
- return 0;
|
||||
+ return err;
|
||||
}
|
||||
|
||||
struct map_browser {
|
||||
--
|
||||
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,74 +0,0 @@
|
|||
Jon Masters correctly points out that conntrack hash sizes
|
||||
(nf_conntrack_htable_size) are global (not per-netns) and
|
||||
modifiable at runtime via /sys/module/nf_conntrack/hashsize .
|
||||
|
||||
Steps to reproduce:
|
||||
clone(CLONE_NEWNET)
|
||||
[grow /sys/module/nf_conntrack/hashsize]
|
||||
exit()
|
||||
|
||||
At netns exit we are going to scan random memory for conntracks to be killed.
|
||||
|
||||
Apparently there is a code which deals with hashtable resize for
|
||||
init_net (and it was there befode netns conntrack code), so prohibit
|
||||
hashsize modification if there is more than one netns exists.
|
||||
|
||||
To change hashtable sizes, you need to reload module.
|
||||
|
||||
Expectation hashtable size was simply glued to a variable with no code
|
||||
to rehash expectations, so it was a bug to allow writing to it.
|
||||
Make "expect_hashsize" readonly.
|
||||
|
||||
This is temporarily until we figure out what to do.
|
||||
|
||||
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
|
||||
Cc: stable@kernel.org
|
||||
---
|
||||
|
||||
net/netfilter/nf_conntrack_core.c | 15 +++++++++++++++
|
||||
net/netfilter/nf_conntrack_expect.c | 2 +-
|
||||
2 files changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/net/netfilter/nf_conntrack_core.c
|
||||
+++ b/net/netfilter/nf_conntrack_core.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/random.h>
|
||||
+#include <linux/rtnetlink.h>
|
||||
#include <linux/jhash.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/percpu.h>
|
||||
@@ -1198,6 +1199,20 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
|
||||
if (!nf_conntrack_htable_size)
|
||||
return param_set_uint(val, kp);
|
||||
|
||||
+ {
|
||||
+ struct net *net;
|
||||
+ unsigned int nr;
|
||||
+
|
||||
+ nr = 0;
|
||||
+ rtnl_lock();
|
||||
+ for_each_net(net)
|
||||
+ nr++;
|
||||
+ rtnl_unlock();
|
||||
+ /* init_net always exists */
|
||||
+ if (nr != 1)
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
hashsize = simple_strtoul(val, NULL, 0);
|
||||
if (!hashsize)
|
||||
return -EINVAL;
|
||||
--- a/net/netfilter/nf_conntrack_expect.c
|
||||
+++ b/net/netfilter/nf_conntrack_expect.c
|
||||
@@ -569,7 +569,7 @@ static void exp_proc_remove(struct net *net)
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
}
|
||||
|
||||
-module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0600);
|
||||
+module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0400);
|
||||
|
||||
int nf_conntrack_expect_init(struct net *net)
|
||||
{
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
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,138 +0,0 @@
|
|||
From 141d0d01ab292d4ea3a6d5e96b4048e10e68c1d3 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Mon, 24 Jan 2011 13:01:57 -0500
|
||||
Subject: [PATCH] runtime_pm_fixups
|
||||
|
||||
---
|
||||
drivers/acpi/bus.c | 3 ++-
|
||||
drivers/acpi/pci_bind.c | 6 ++++++
|
||||
drivers/acpi/power.c | 5 ++++-
|
||||
drivers/acpi/sleep.c | 2 +-
|
||||
drivers/acpi/wakeup.c | 2 +-
|
||||
drivers/pci/pci-acpi.c | 2 +-
|
||||
include/acpi/acpi_bus.h | 2 +-
|
||||
7 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
|
||||
index 7ced61f..e4e0114 100644
|
||||
--- a/drivers/acpi/bus.c
|
||||
+++ b/drivers/acpi/bus.c
|
||||
@@ -256,7 +256,8 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state)
|
||||
* a lower-powered state.
|
||||
*/
|
||||
if (state < device->power.state) {
|
||||
- if (device->power.flags.power_resources) {
|
||||
+ if (device->power.flags.power_resources &&
|
||||
+ !device->wakeup.run_wake_count) {
|
||||
result = acpi_power_transition(device, state);
|
||||
if (result)
|
||||
goto end;
|
||||
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
|
||||
index 2ef0409..4b0bb68 100644
|
||||
--- a/drivers/acpi/pci_bind.c
|
||||
+++ b/drivers/acpi/pci_bind.c
|
||||
@@ -32,6 +32,8 @@
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
|
||||
+#include "internal.h"
|
||||
+
|
||||
#define _COMPONENT ACPI_PCI_COMPONENT
|
||||
ACPI_MODULE_NAME("pci_bind");
|
||||
|
||||
@@ -65,6 +67,7 @@ static int acpi_pci_bind(struct acpi_device *device)
|
||||
acpi_handle handle;
|
||||
struct pci_bus *bus;
|
||||
struct pci_dev *dev;
|
||||
+ int state;
|
||||
|
||||
dev = acpi_get_pci_dev(device->handle);
|
||||
if (!dev)
|
||||
@@ -87,6 +90,9 @@ static int acpi_pci_bind(struct acpi_device *device)
|
||||
device->ops.unbind = acpi_pci_unbind;
|
||||
}
|
||||
|
||||
+ acpi_power_get_inferred_state(device, &state);
|
||||
+ acpi_power_transition(device, state);
|
||||
+
|
||||
/*
|
||||
* Evaluate and parse _PRT, if exists. This code allows parsing of
|
||||
* _PRT objects within the scope of non-bridge devices. Note that
|
||||
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
|
||||
index 9ac2a9f..cd6a8df 100644
|
||||
--- a/drivers/acpi/power.c
|
||||
+++ b/drivers/acpi/power.c
|
||||
@@ -412,7 +412,7 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
|
||||
* State Wake) for the device, if present
|
||||
* 2. Shutdown down the power resources
|
||||
*/
|
||||
-int acpi_disable_wakeup_device_power(struct acpi_device *dev)
|
||||
+int acpi_disable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
|
||||
{
|
||||
int i, err = 0;
|
||||
|
||||
@@ -435,6 +435,9 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev)
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
+ if (sleep_state == ACPI_STATE_S0)
|
||||
+ goto out;
|
||||
+
|
||||
/* Close power resource */
|
||||
for (i = 0; i < dev->wakeup.resources.count; i++) {
|
||||
int ret = acpi_power_off(dev->wakeup.resources.handles[i]);
|
||||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
|
||||
index d6a8cd1..5d68dc0 100644
|
||||
--- a/drivers/acpi/sleep.c
|
||||
+++ b/drivers/acpi/sleep.c
|
||||
@@ -697,7 +697,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
|
||||
|
||||
error = enable ?
|
||||
acpi_enable_wakeup_device_power(adev, acpi_target_sleep_state) :
|
||||
- acpi_disable_wakeup_device_power(adev);
|
||||
+ acpi_disable_wakeup_device_power(adev, acpi_target_sleep_state);
|
||||
if (!error)
|
||||
dev_info(dev, "wake-up capability %s by ACPI\n",
|
||||
enable ? "enabled" : "disabled");
|
||||
diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c
|
||||
index ed65014..a0cabc3 100644
|
||||
--- a/drivers/acpi/wakeup.c
|
||||
+++ b/drivers/acpi/wakeup.c
|
||||
@@ -73,7 +73,7 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
|
||||
ACPI_GPE_DISABLE);
|
||||
|
||||
if (device_may_wakeup(&dev->dev))
|
||||
- acpi_disable_wakeup_device_power(dev);
|
||||
+ acpi_disable_wakeup_device_power(dev, sleep_state);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
|
||||
index 6fe0772..819fa7a 100644
|
||||
--- a/drivers/pci/pci-acpi.c
|
||||
+++ b/drivers/pci/pci-acpi.c
|
||||
@@ -302,7 +302,7 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
|
||||
if (!--dev->wakeup.run_wake_count) {
|
||||
acpi_disable_gpe(dev->wakeup.gpe_device,
|
||||
dev->wakeup.gpe_number);
|
||||
- acpi_disable_wakeup_device_power(dev);
|
||||
+ acpi_disable_wakeup_device_power(dev, ACPI_STATE_S0);
|
||||
}
|
||||
} else {
|
||||
error = -EALREADY;
|
||||
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
|
||||
index 78ca429..92d6e86 100644
|
||||
--- a/include/acpi/acpi_bus.h
|
||||
+++ b/include/acpi/acpi_bus.h
|
||||
@@ -379,7 +379,7 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
|
||||
#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
|
||||
|
||||
int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
|
||||
-int acpi_disable_wakeup_device_power(struct acpi_device *dev);
|
||||
+int acpi_disable_wakeup_device_power(struct acpi_device *dev, int state);
|
||||
|
||||
#ifdef CONFIG_PM_OPS
|
||||
int acpi_pm_device_sleep_state(struct device *, int *);
|
||||
--
|
||||
1.7.3.5
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
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;
|
3
sources
3
sources
|
@ -1 +1,2 @@
|
|||
7d471477bfa67546f902da62227fa976 linux-2.6.38.tar.bz2
|
||||
1aab7a741abe08d42e8eccf20de61e05 linux-2.6.39.tar.bz2
|
||||
06b858e8f81600038129afe7bcd4e162 patch-2.6.39.3.bz2
|
||||
|
|
|
@ -1,305 +0,0 @@
|
|||
From dbb988cf34a62e69c8863f212be212c6841004ba Mon Sep 17 00:00:00 2001
|
||||
From: David S. Miller <davem@davemloft.net>
|
||||
Date: Sat, 26 Feb 2011 23:40:02 -0800
|
||||
Subject: [PATCH] sparc64: Fix build errors with gcc-4.6.0
|
||||
|
||||
Most of the warnings emitted (we fail arch/sparc file
|
||||
builds with -Werror) were legitimate but harmless, however
|
||||
one case (n2_pcr_write) was a genuine bug.
|
||||
|
||||
Based almost entirely upon a patch by Sam Ravnborg.
|
||||
|
||||
Reported-by: Dennis Gilmore <dennis@ausil.us>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
arch/sparc/kernel/iommu.c | 3 ---
|
||||
arch/sparc/kernel/ldc.c | 28 ++++++++++++++++++----------
|
||||
arch/sparc/kernel/pci.c | 1 +
|
||||
arch/sparc/kernel/pci_common.c | 11 +++++++----
|
||||
arch/sparc/kernel/pci_fire.c | 2 --
|
||||
arch/sparc/kernel/pci_schizo.c | 4 +---
|
||||
arch/sparc/kernel/pci_sun4v.c | 3 +--
|
||||
arch/sparc/kernel/pcr.c | 2 +-
|
||||
arch/sparc/kernel/ptrace_64.c | 3 ++-
|
||||
arch/sparc/kernel/smp_64.c | 11 ++++-------
|
||||
arch/sparc/kernel/traps_64.c | 3 +--
|
||||
11 files changed, 36 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
|
||||
index 72509d0..6f01e8c 100644
|
||||
--- a/arch/sparc/kernel/iommu.c
|
||||
+++ b/arch/sparc/kernel/iommu.c
|
||||
@@ -333,13 +333,10 @@ static void dma_4u_free_coherent(struct device *dev, size_t size,
|
||||
void *cpu, dma_addr_t dvma)
|
||||
{
|
||||
struct iommu *iommu;
|
||||
- iopte_t *iopte;
|
||||
unsigned long flags, order, npages;
|
||||
|
||||
npages = IO_PAGE_ALIGN(size) >> IO_PAGE_SHIFT;
|
||||
iommu = dev->archdata.iommu;
|
||||
- iopte = iommu->page_table +
|
||||
- ((dvma - iommu->page_table_map_base) >> IO_PAGE_SHIFT);
|
||||
|
||||
spin_lock_irqsave(&iommu->lock, flags);
|
||||
|
||||
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
|
||||
index df39a0f..732b0bc 100644
|
||||
--- a/arch/sparc/kernel/ldc.c
|
||||
+++ b/arch/sparc/kernel/ldc.c
|
||||
@@ -790,16 +790,20 @@ static void send_events(struct ldc_channel *lp, unsigned int event_mask)
|
||||
static irqreturn_t ldc_rx(int irq, void *dev_id)
|
||||
{
|
||||
struct ldc_channel *lp = dev_id;
|
||||
- unsigned long orig_state, hv_err, flags;
|
||||
+ unsigned long orig_state, flags;
|
||||
unsigned int event_mask;
|
||||
|
||||
spin_lock_irqsave(&lp->lock, flags);
|
||||
|
||||
orig_state = lp->chan_state;
|
||||
- hv_err = sun4v_ldc_rx_get_state(lp->id,
|
||||
- &lp->rx_head,
|
||||
- &lp->rx_tail,
|
||||
- &lp->chan_state);
|
||||
+
|
||||
+ /* We should probably check for hypervisor errors here and
|
||||
+ * reset the LDC channel if we get one.
|
||||
+ */
|
||||
+ sun4v_ldc_rx_get_state(lp->id,
|
||||
+ &lp->rx_head,
|
||||
+ &lp->rx_tail,
|
||||
+ &lp->chan_state);
|
||||
|
||||
ldcdbg(RX, "RX state[0x%02lx:0x%02lx] head[0x%04lx] tail[0x%04lx]\n",
|
||||
orig_state, lp->chan_state, lp->rx_head, lp->rx_tail);
|
||||
@@ -904,16 +908,20 @@ out:
|
||||
static irqreturn_t ldc_tx(int irq, void *dev_id)
|
||||
{
|
||||
struct ldc_channel *lp = dev_id;
|
||||
- unsigned long flags, hv_err, orig_state;
|
||||
+ unsigned long flags, orig_state;
|
||||
unsigned int event_mask = 0;
|
||||
|
||||
spin_lock_irqsave(&lp->lock, flags);
|
||||
|
||||
orig_state = lp->chan_state;
|
||||
- hv_err = sun4v_ldc_tx_get_state(lp->id,
|
||||
- &lp->tx_head,
|
||||
- &lp->tx_tail,
|
||||
- &lp->chan_state);
|
||||
+
|
||||
+ /* We should probably check for hypervisor errors here and
|
||||
+ * reset the LDC channel if we get one.
|
||||
+ */
|
||||
+ sun4v_ldc_tx_get_state(lp->id,
|
||||
+ &lp->tx_head,
|
||||
+ &lp->tx_tail,
|
||||
+ &lp->chan_state);
|
||||
|
||||
ldcdbg(TX, " TX state[0x%02lx:0x%02lx] head[0x%04lx] tail[0x%04lx]\n",
|
||||
orig_state, lp->chan_state, lp->tx_head, lp->tx_tail);
|
||||
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
|
||||
index 4137579..f255382 100644
|
||||
--- a/arch/sparc/kernel/pci.c
|
||||
+++ b/arch/sparc/kernel/pci.c
|
||||
@@ -675,6 +675,7 @@ static void __devinit pci_bus_register_of_sysfs(struct pci_bus *bus)
|
||||
* humanoid.
|
||||
*/
|
||||
err = sysfs_create_file(&dev->dev.kobj, &dev_attr_obppath.attr);
|
||||
+ (void) err;
|
||||
}
|
||||
list_for_each_entry(child_bus, &bus->children, node)
|
||||
pci_bus_register_of_sysfs(child_bus);
|
||||
diff --git a/arch/sparc/kernel/pci_common.c b/arch/sparc/kernel/pci_common.c
|
||||
index 6c7a33a..6e3874b 100644
|
||||
--- a/arch/sparc/kernel/pci_common.c
|
||||
+++ b/arch/sparc/kernel/pci_common.c
|
||||
@@ -295,14 +295,17 @@ static int sun4v_write_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn,
|
||||
unsigned int bus = bus_dev->number;
|
||||
unsigned int device = PCI_SLOT(devfn);
|
||||
unsigned int func = PCI_FUNC(devfn);
|
||||
- unsigned long ret;
|
||||
|
||||
if (config_out_of_range(pbm, bus, devfn, where)) {
|
||||
/* Do nothing. */
|
||||
} else {
|
||||
- ret = pci_sun4v_config_put(devhandle,
|
||||
- HV_PCI_DEVICE_BUILD(bus, device, func),
|
||||
- where, size, value);
|
||||
+ /* We don't check for hypervisor errors here, but perhaps
|
||||
+ * we should and influence our return value depending upon
|
||||
+ * what kind of error is thrown.
|
||||
+ */
|
||||
+ pci_sun4v_config_put(devhandle,
|
||||
+ HV_PCI_DEVICE_BUILD(bus, device, func),
|
||||
+ where, size, value);
|
||||
}
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
|
||||
index efb896d..75dfeb6 100644
|
||||
--- a/arch/sparc/kernel/pci_fire.c
|
||||
+++ b/arch/sparc/kernel/pci_fire.c
|
||||
@@ -214,11 +214,9 @@ static int pci_fire_msi_setup(struct pci_pbm_info *pbm, unsigned long msiqid,
|
||||
|
||||
static int pci_fire_msi_teardown(struct pci_pbm_info *pbm, unsigned long msi)
|
||||
{
|
||||
- unsigned long msiqid;
|
||||
u64 val;
|
||||
|
||||
val = upa_readq(pbm->pbm_regs + MSI_MAP(msi));
|
||||
- msiqid = (val & MSI_MAP_EQNUM);
|
||||
|
||||
val &= ~MSI_MAP_VALID;
|
||||
|
||||
diff --git a/arch/sparc/kernel/pci_schizo.c b/arch/sparc/kernel/pci_schizo.c
|
||||
index 445a47a..4620eb7 100644
|
||||
--- a/arch/sparc/kernel/pci_schizo.c
|
||||
+++ b/arch/sparc/kernel/pci_schizo.c
|
||||
@@ -1313,7 +1313,7 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm,
|
||||
const struct linux_prom64_registers *regs;
|
||||
struct device_node *dp = op->dev.of_node;
|
||||
const char *chipset_name;
|
||||
- int is_pbm_a, err;
|
||||
+ int err;
|
||||
|
||||
switch (chip_type) {
|
||||
case PBM_CHIP_TYPE_TOMATILLO:
|
||||
@@ -1343,8 +1343,6 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm,
|
||||
*/
|
||||
regs = of_get_property(dp, "reg", NULL);
|
||||
|
||||
- is_pbm_a = ((regs[0].phys_addr & 0x00700000) == 0x00600000);
|
||||
-
|
||||
pbm->next = pci_pbm_root;
|
||||
pci_pbm_root = pbm;
|
||||
|
||||
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
|
||||
index 743344a..859abfd 100644
|
||||
--- a/arch/sparc/kernel/pci_sun4v.c
|
||||
+++ b/arch/sparc/kernel/pci_sun4v.c
|
||||
@@ -580,7 +580,7 @@ static int __devinit pci_sun4v_iommu_init(struct pci_pbm_info *pbm)
|
||||
{
|
||||
static const u32 vdma_default[] = { 0x80000000, 0x80000000 };
|
||||
struct iommu *iommu = pbm->iommu;
|
||||
- unsigned long num_tsb_entries, sz, tsbsize;
|
||||
+ unsigned long num_tsb_entries, sz;
|
||||
u32 dma_mask, dma_offset;
|
||||
const u32 *vdma;
|
||||
|
||||
@@ -596,7 +596,6 @@ static int __devinit pci_sun4v_iommu_init(struct pci_pbm_info *pbm)
|
||||
|
||||
dma_mask = (roundup_pow_of_two(vdma[1]) - 1UL);
|
||||
num_tsb_entries = vdma[1] / IO_PAGE_SIZE;
|
||||
- tsbsize = num_tsb_entries * sizeof(iopte_t);
|
||||
|
||||
dma_offset = vdma[0];
|
||||
|
||||
diff --git a/arch/sparc/kernel/pcr.c b/arch/sparc/kernel/pcr.c
|
||||
index 7c2ced6..8ac23e6 100644
|
||||
--- a/arch/sparc/kernel/pcr.c
|
||||
+++ b/arch/sparc/kernel/pcr.c
|
||||
@@ -81,7 +81,7 @@ static void n2_pcr_write(u64 val)
|
||||
unsigned long ret;
|
||||
|
||||
ret = sun4v_niagara2_setperf(HV_N2_PERF_SPARC_CTL, val);
|
||||
- if (val != HV_EOK)
|
||||
+ if (ret != HV_EOK)
|
||||
write_pcr(val);
|
||||
}
|
||||
|
||||
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
|
||||
index 9ccc812..96ee50a 100644
|
||||
--- a/arch/sparc/kernel/ptrace_64.c
|
||||
+++ b/arch/sparc/kernel/ptrace_64.c
|
||||
@@ -1086,6 +1086,7 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)
|
||||
|
||||
asmlinkage void syscall_trace_leave(struct pt_regs *regs)
|
||||
{
|
||||
+#ifdef CONFIG_AUDITSYSCALL
|
||||
if (unlikely(current->audit_context)) {
|
||||
unsigned long tstate = regs->tstate;
|
||||
int result = AUDITSC_SUCCESS;
|
||||
@@ -1095,7 +1096,7 @@ asmlinkage void syscall_trace_leave(struct pt_regs *regs)
|
||||
|
||||
audit_syscall_exit(result, regs->u_regs[UREG_I0]);
|
||||
}
|
||||
-
|
||||
+#endif
|
||||
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
|
||||
trace_sys_exit(regs, regs->u_regs[UREG_G1]);
|
||||
|
||||
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
|
||||
index 555a76d..3e94a8c 100644
|
||||
--- a/arch/sparc/kernel/smp_64.c
|
||||
+++ b/arch/sparc/kernel/smp_64.c
|
||||
@@ -189,7 +189,7 @@ static inline long get_delta (long *rt, long *master)
|
||||
void smp_synchronize_tick_client(void)
|
||||
{
|
||||
long i, delta, adj, adjust_latency = 0, done = 0;
|
||||
- unsigned long flags, rt, master_time_stamp, bound;
|
||||
+ unsigned long flags, rt, master_time_stamp;
|
||||
#if DEBUG_TICK_SYNC
|
||||
struct {
|
||||
long rt; /* roundtrip time */
|
||||
@@ -208,10 +208,8 @@ void smp_synchronize_tick_client(void)
|
||||
{
|
||||
for (i = 0; i < NUM_ROUNDS; i++) {
|
||||
delta = get_delta(&rt, &master_time_stamp);
|
||||
- if (delta == 0) {
|
||||
+ if (delta == 0)
|
||||
done = 1; /* let's lock on to this... */
|
||||
- bound = rt;
|
||||
- }
|
||||
|
||||
if (!done) {
|
||||
if (i > 0) {
|
||||
@@ -933,13 +931,12 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
|
||||
void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
|
||||
{
|
||||
void *pg_addr;
|
||||
- int this_cpu;
|
||||
u64 data0;
|
||||
|
||||
if (tlb_type == hypervisor)
|
||||
return;
|
||||
|
||||
- this_cpu = get_cpu();
|
||||
+ preempt_disable();
|
||||
|
||||
#ifdef CONFIG_DEBUG_DCFLUSH
|
||||
atomic_inc(&dcpage_flushes);
|
||||
@@ -964,7 +961,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
|
||||
}
|
||||
__local_flush_dcache_page(page);
|
||||
|
||||
- put_cpu();
|
||||
+ preempt_enable();
|
||||
}
|
||||
|
||||
void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)
|
||||
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
|
||||
index 42ad2ba..9456472 100644
|
||||
--- a/arch/sparc/kernel/traps_64.c
|
||||
+++ b/arch/sparc/kernel/traps_64.c
|
||||
@@ -2152,7 +2152,7 @@ static void user_instruction_dump(unsigned int __user *pc)
|
||||
|
||||
void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
||||
{
|
||||
- unsigned long fp, thread_base, ksp;
|
||||
+ unsigned long fp, ksp;
|
||||
struct thread_info *tp;
|
||||
int count = 0;
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
@@ -2173,7 +2173,6 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
||||
flushw_all();
|
||||
|
||||
fp = ksp + STACK_BIAS;
|
||||
- thread_base = (unsigned long) tp;
|
||||
|
||||
printk("Call Trace:\n");
|
||||
do {
|
||||
--
|
||||
1.7.4.1
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
diff -up linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c
|
||||
--- linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig 2010-05-17 16:28:13.254200070 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c 2010-05-17 16:29:56.471200083 -0400
|
||||
@@ -3397,7 +3397,7 @@ static int __init hotkey_init(struct ibm
|
||||
/* update bright_acpimode... */
|
||||
tpacpi_check_std_acpi_brightness_support();
|
||||
|
||||
- if (tp_features.bright_acpimode && acpi_video_backlight_support()) {
|
||||
+ if (acpi_video_backlight_support()) {
|
||||
printk(TPACPI_INFO
|
||||
"This ThinkPad has standard ACPI backlight "
|
||||
"brightness control, supported by the ACPI "
|
||||
@@ -6189,26 +6189,24 @@ static int __init brightness_init(struct
|
||||
* going to publish a backlight interface
|
||||
*/
|
||||
b = tpacpi_check_std_acpi_brightness_support();
|
||||
- if (b > 0) {
|
||||
|
||||
- if (acpi_video_backlight_support()) {
|
||||
- if (brightness_enable > 1) {
|
||||
- printk(TPACPI_NOTICE
|
||||
- "Standard ACPI backlight interface "
|
||||
- "available, not loading native one.\n");
|
||||
- return 1;
|
||||
- } else if (brightness_enable == 1) {
|
||||
- printk(TPACPI_NOTICE
|
||||
- "Backlight control force enabled, even if standard "
|
||||
- "ACPI backlight interface is available\n");
|
||||
- }
|
||||
- } else {
|
||||
- if (brightness_enable > 1) {
|
||||
- printk(TPACPI_NOTICE
|
||||
- "Standard ACPI backlight interface not "
|
||||
- "available, thinkpad_acpi native "
|
||||
- "brightness control enabled\n");
|
||||
- }
|
||||
+ if (acpi_video_backlight_support()) {
|
||||
+ if (brightness_enable > 1) {
|
||||
+ printk(TPACPI_NOTICE
|
||||
+ "Standard ACPI backlight interface "
|
||||
+ "available, not loading native one.\n");
|
||||
+ return 1;
|
||||
+ } else if (brightness_enable == 1) {
|
||||
+ printk(TPACPI_NOTICE
|
||||
+ "Backlight control force enabled, even if standard "
|
||||
+ "ACPI backlight interface is available\n");
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (brightness_enable > 1) {
|
||||
+ printk(TPACPI_NOTICE
|
||||
+ "Standard ACPI backlight interface not "
|
||||
+ "available, thinkpad_acpi native "
|
||||
+ "brightness control enabled\n");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
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