aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <benh@debian.org>2012-12-16 15:20:29 +0000
committerBen Hutchings <benh@debian.org>2012-12-16 15:20:29 +0000
commit8123ace851707cad1ea78ea2330e62928f3a7fa1 (patch)
tree042d327637a3d43fa9831285668f746dca71730a
parentef781eb6eec9b61b82a8bafc92718bd49d95ba0f (diff)
downloadkernel_replicant_linux-8123ace851707cad1ea78ea2330e62928f3a7fa1.tar.gz
kernel_replicant_linux-8123ace851707cad1ea78ea2330e62928f3a7fa1.tar.bz2
kernel_replicant_linux-8123ace851707cad1ea78ea2330e62928f3a7fa1.zip
Update to 3.7
Update aufs to aufs3.x-rcN-20121210. Disable rt, probably not available for 3.7. Refresh/drop patches. They apply but the result may not build. svn path=/dists/trunk/linux/; revision=19608
-rw-r--r--debian/changelog9
-rw-r--r--debian/config/defines2
-rw-r--r--debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch8
-rw-r--r--debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch482
-rw-r--r--debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch52
-rw-r--r--debian/patches/bugfix/all/speakup-lower-default-software-speech-rate.patch33
-rw-r--r--debian/patches/bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch58
-rw-r--r--debian/patches/bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch256
-rw-r--r--debian/patches/bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch449
-rw-r--r--debian/patches/bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch34
-rw-r--r--debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch47
-rw-r--r--debian/patches/bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch29
-rw-r--r--debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch17
-rw-r--r--debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch4
-rw-r--r--debian/patches/debian/debugfs-set-default-mode-to-700.patch27
-rw-r--r--debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch24
-rw-r--r--debian/patches/debian/dfsg/vs6624-disable.patch16
-rw-r--r--debian/patches/debian/kernelvariables.patch4
-rw-r--r--debian/patches/debian/radeon-no-modeset-without-firmware.patch8
-rw-r--r--debian/patches/debian/version.patch26
-rw-r--r--debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch39
-rw-r--r--debian/patches/features/all/aufs3/aufs3-add.patch495
-rw-r--r--debian/patches/features/all/aufs3/aufs3-base.patch23
-rw-r--r--debian/patches/features/all/aufs3/aufs3-kbuild.patch18
-rw-r--r--debian/patches/features/all/aufs3/aufs3-standalone.patch46
-rw-r--r--debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch12
-rw-r--r--debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch29
-rw-r--r--debian/patches/series8
28 files changed, 601 insertions, 1654 deletions
diff --git a/debian/changelog b/debian/changelog
index 757acd4810b9..1b70cc173c32 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,14 @@
-linux (3.6.9-1~experimental.2) UNRELEASED; urgency=low
+linux (3.7-1~experimental.1) UNRELEASED; urgency=low
+ * New upstream release: http://kernelnewbies.org/Linux_3.7
+
+ [ maximilian attems ]
* Enable WIZNET_W5100, WIZNET_W5300, AMD_PHY, BCM87XX_PHY.
+ [ Ben Hutchings ]
+ * aufs: Update to aufs3.x-rcN-20121210
+ * [rt] Disable until it is updated for Linux 3.7 or later
+
-- maximilian attems <maks@debian.org> Thu, 06 Dec 2012 18:14:33 +0100
linux (3.6.9-1~experimental.1) experimental; urgency=low
diff --git a/debian/config/defines b/debian/config/defines
index 4f820213913f..518e9c03c76c 100644
--- a/debian/config/defines
+++ b/debian/config/defines
@@ -27,7 +27,7 @@ featuresets:
rt
[featureset-rt_base]
-enabled: true
+enabled: false
[description]
part-long-up: This kernel is not suitable for SMP (multi-processor,
diff --git a/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch b/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
index 8cd490b3936d..51589169173d 100644
--- a/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
+++ b/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
@@ -95,7 +95,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
bprm->file = NULL;
--- a/fs/exec.c
+++ b/fs/exec.c
-@@ -1398,6 +1398,10 @@ int search_binary_handler(struct linux_b
+@@ -1371,6 +1371,10 @@ int search_binary_handler(struct linux_b
struct linux_binfmt *fmt;
pid_t old_pid, old_vpid;
@@ -106,7 +106,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
retval = security_bprm_check(bprm);
if (retval)
return retval;
-@@ -1422,12 +1426,8 @@ int search_binary_handler(struct linux_b
+@@ -1395,12 +1399,8 @@ int search_binary_handler(struct linux_b
if (!try_module_get(fmt->module))
continue;
read_unlock(&binfmt_lock);
@@ -122,7 +122,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
if (depth == 0) {
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
-@@ -68,8 +68,6 @@ struct linux_binprm {
+@@ -54,8 +54,6 @@ struct linux_binprm {
#define BINPRM_FLAGS_EXECFD_BIT 1
#define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
@@ -130,4 +130,4 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-
/* Function parameter for binfmt->coredump */
struct coredump_params {
- long signr;
+ siginfo_t *siginfo;
diff --git a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
index 4c1313d67f2a..f801debde746 100644
--- a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
+++ b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
@@ -52,7 +52,7 @@ upstream submission.
/* disable MPU */
--- a/arch/x86/kernel/microcode_amd.c
+++ b/arch/x86/kernel/microcode_amd.c
-@@ -337,10 +337,8 @@ static enum ucode_state request_microcod
+@@ -429,10 +429,8 @@ static enum ucode_state request_microcod
if (c->x86 >= 0x15)
snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
@@ -95,7 +95,7 @@ upstream submission.
fw_size = firmware->size / sizeof(u32);
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
-@@ -306,10 +306,8 @@ static int ath3k_load_patch(struct usb_d
+@@ -307,10 +307,8 @@ static int ath3k_load_patch(struct usb_d
fw_version.rom_version);
ret = request_firmware(&firmware, filename, &udev->dev);
@@ -107,7 +107,7 @@ upstream submission.
pt_version.rom_version = *(int *)(firmware->data + firmware->size - 8);
pt_version.build_version = *(int *)
-@@ -368,10 +366,8 @@ static int ath3k_load_syscfg(struct usb_
+@@ -369,10 +367,8 @@ static int ath3k_load_syscfg(struct usb_
fw_version.rom_version, clk_value, ".dfu");
ret = request_firmware(&firmware, filename, &udev->dev);
@@ -121,22 +121,22 @@ upstream submission.
release_firmware(firmware);
--- a/drivers/bluetooth/bcm203x.c
+++ b/drivers/bluetooth/bcm203x.c
-@@ -194,7 +194,6 @@ static int bcm203x_probe(struct usb_inte
+@@ -193,7 +193,6 @@ static int bcm203x_probe(struct usb_inte
}
if (request_firmware(&firmware, "BCM2033-MD.hex", &udev->dev) < 0) {
- BT_ERR("Mini driver request failed");
usb_free_urb(data->urb);
- kfree(data);
return -EIO;
-@@ -221,7 +220,6 @@ static int bcm203x_probe(struct usb_inte
+ }
+@@ -218,7 +217,6 @@ static int bcm203x_probe(struct usb_inte
release_firmware(firmware);
if (request_firmware(&firmware, "BCM2033-FW.bin", &udev->dev) < 0) {
- BT_ERR("Firmware request failed");
usb_free_urb(data->urb);
kfree(data->buffer);
- kfree(data);
+ return -EIO;
--- a/drivers/bluetooth/bfusb.c
+++ b/drivers/bluetooth/bfusb.c
@@ -672,10 +672,8 @@ static int bfusb_probe(struct usb_interf
@@ -146,7 +146,7 @@ upstream submission.
- if (request_firmware(&firmware, "bfubase.frm", &udev->dev) < 0) {
- BT_ERR("Firmware request failed");
+ if (request_firmware(&firmware, "bfubase.frm", &udev->dev))
- goto error;
+ goto done;
- }
BT_DBG("firmware data %p size %zu", firmware->data, firmware->size);
@@ -216,7 +216,7 @@ upstream submission.
goto err_firmware;
--- a/drivers/gpu/drm/mga/mga_warp.c
+++ b/drivers/gpu/drm/mga/mga_warp.c
-@@ -80,11 +80,8 @@ int mga_warp_install_microcode(drm_mga_p
+@@ -79,11 +79,8 @@ int mga_warp_install_microcode(drm_mga_p
}
rc = request_ihex_firmware(&fw, firmware_name, &pdev->dev);
platform_device_unregister(pdev);
@@ -229,14 +229,14 @@ upstream submission.
size = 0;
where = 0;
---- a/drivers/gpu/drm/nouveau/nvc0_graph.c
-+++ b/drivers/gpu/drm/nouveau/nvc0_graph.c
-@@ -734,10 +734,8 @@ nvc0_graph_create_fw(struct drm_device *
+--- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
++++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+@@ -497,10 +497,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri
if (ret) {
snprintf(f, sizeof(f), "nouveau/%s", fwname);
- ret = request_firmware(&fw, f, &dev->pdev->dev);
+ ret = request_firmware(&fw, f, &device->pdev->dev);
- if (ret) {
-- NV_ERROR(dev, "failed to load %s\n", fwname);
+- nv_error(priv, "failed to load %s\n", fwname);
+ if (ret)
return ret;
- }
@@ -245,7 +245,7 @@ upstream submission.
fuc->size = fw->size;
--- a/drivers/gpu/drm/r128/r128_cce.c
+++ b/drivers/gpu/drm/r128/r128_cce.c
-@@ -155,11 +155,8 @@ static int r128_cce_load_microcode(drm_r
+@@ -154,11 +154,8 @@ static int r128_cce_load_microcode(drm_r
}
rc = request_firmware(&fw, FIRMWARE_NAME, &pdev->dev);
platform_device_unregister(pdev);
@@ -273,7 +273,7 @@ upstream submission.
release_firmware(rdev->me_fw);
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
-@@ -1033,10 +1033,7 @@ static int r100_cp_init_microcode(struct
+@@ -1015,10 +1015,7 @@ static int r100_cp_init_microcode(struct
err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
platform_device_unregister(pdev);
@@ -300,7 +300,7 @@ upstream submission.
release_firmware(rdev->me_fw);
--- a/drivers/gpu/drm/radeon/r600_cp.c
+++ b/drivers/gpu/drm/radeon/r600_cp.c
-@@ -375,10 +375,6 @@ out:
+@@ -374,10 +374,6 @@ out:
platform_device_unregister(pdev);
if (err) {
@@ -313,7 +313,7 @@ upstream submission.
release_firmware(dev_priv->me_fw);
--- a/drivers/gpu/drm/radeon/radeon_cp.c
+++ b/drivers/gpu/drm/radeon/radeon_cp.c
-@@ -544,10 +544,7 @@ static int radeon_cp_init_microcode(drm_
+@@ -542,10 +542,7 @@ static int radeon_cp_init_microcode(drm_
err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev);
platform_device_unregister(pdev);
@@ -341,7 +341,7 @@ upstream submission.
ret = qib_ibsd_ucode_loaded(dd->pport, fw);
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
-@@ -956,10 +956,8 @@ static int mxt_load_fw(struct device *de
+@@ -954,10 +954,8 @@ static int mxt_load_fw(struct device *de
int ret;
ret = request_firmware(&fw, fn, dev);
@@ -368,9 +368,9 @@ upstream submission.
if (debug & DEBUG_HW)
pr_notice("%s: got firmware %zu bytes\n",
card->name, firmware->size);
---- a/drivers/media/common/tuners/tuner-xc2028.c
-+++ b/drivers/media/common/tuners/tuner-xc2028.c
-@@ -1350,7 +1350,6 @@ static void load_firmware_cb(const struc
+--- a/drivers/media/tuners/tuner-xc2028.c
++++ b/drivers/media/tuners/tuner-xc2028.c
+@@ -1349,7 +1349,6 @@ static void load_firmware_cb(const struc
tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
if (!fw) {
@@ -378,8 +378,8 @@ upstream submission.
priv->state = XC2028_NODEV;
return;
}
---- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
-+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
+--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
++++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
@@ -2108,12 +2108,9 @@ static int stk9090m_frontend_attach(stru
dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, 0x80);
@@ -410,8 +410,8 @@ upstream submission.
nim9090md_config[0].microcode_B_fe_size = state->frontend_firmware->size;
nim9090md_config[0].microcode_B_fe_buffer = state->frontend_firmware->data;
nim9090md_config[1].microcode_B_fe_size = state->frontend_firmware->size;
---- a/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c
-+++ b/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c
+--- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
++++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
@@ -80,14 +80,9 @@ int dvb_usb_download_firmware(struct usb
int ret;
const struct firmware *fw = NULL;
@@ -429,8 +429,8 @@ upstream submission.
switch (props->usb_ctrl) {
case CYPRESS_AN2135:
---- a/drivers/media/dvb/dvb-usb/gp8psk.c
-+++ b/drivers/media/dvb/dvb-usb/gp8psk.c
+--- a/drivers/media/usb/dvb-usb/gp8psk.c
++++ b/drivers/media/usb/dvb-usb/gp8psk.c
@@ -116,20 +116,14 @@ static int gp8psk_load_bcm4500fw(struct
const u8 *ptr;
u8 *buf;
@@ -453,8 +453,8 @@ upstream submission.
ptr = fw->data;
buf = kmalloc(64, GFP_KERNEL | GFP_DMA);
if (!buf) {
---- a/drivers/media/dvb/dvb-usb/opera1.c
-+++ b/drivers/media/dvb/dvb-usb/opera1.c
+--- a/drivers/media/usb/dvb-usb/opera1.c
++++ b/drivers/media/usb/dvb-usb/opera1.c
@@ -452,9 +452,6 @@ static int opera1_xilinx_load_firmware(s
info("start downloading fpga firmware %s",filename);
@@ -465,27 +465,28 @@ upstream submission.
return ret;
} else {
p = kmalloc(fw->size, GFP_KERNEL);
---- a/drivers/media/dvb/frontends/af9013.c
-+++ b/drivers/media/dvb/frontends/af9013.c
-@@ -1348,15 +1348,8 @@ static int af9013_download_firmware(stru
+--- a/drivers/media/dvb-frontends/af9013.c
++++ b/drivers/media/dvb-frontends/af9013.c
+@@ -1363,16 +1363,8 @@ static int af9013_download_firmware(stru
/* request the firmware, this will block and timeout */
ret = request_firmware(&fw, fw_file, state->i2c->dev.parent);
- if (ret) {
-- err("did not find the firmware file. (%s) "
-- "Please see linux/Documentation/dvb/ for more details" \
-- " on firmware-problems. (%d)",
-- fw_file, ret);
+- dev_info(&state->i2c->dev, "%s: did not find the firmware " \
+- "file. (%s) Please see linux/Documentation/dvb/ for " \
+- "more details on firmware-problems. (%d)\n",
+- KBUILD_MODNAME, fw_file, ret);
+ if (ret)
goto err;
- }
-
-- info("downloading firmware from file '%s'", fw_file);
+- dev_info(&state->i2c->dev, "%s: downloading firmware from file '%s'\n",
+- KBUILD_MODNAME, fw_file);
/* calc checksum */
for (i = 0; i < fw->size; i++)
---- a/drivers/media/dvb/frontends/bcm3510.c
-+++ b/drivers/media/dvb/frontends/bcm3510.c
+--- a/drivers/media/dvb-frontends/bcm3510.c
++++ b/drivers/media/dvb-frontends/bcm3510.c
@@ -622,10 +622,9 @@ static int bcm3510_download_firmware(str
int ret,i;
@@ -499,8 +500,8 @@ upstream submission.
deb_info("got firmware: %zd\n",fw->size);
b = fw->data;
---- a/drivers/media/dvb/frontends/cx24116.c
-+++ b/drivers/media/dvb/frontends/cx24116.c
+--- a/drivers/media/dvb-frontends/cx24116.c
++++ b/drivers/media/dvb-frontends/cx24116.c
@@ -493,13 +493,8 @@ static int cx24116_firmware_ondemand(str
__func__, CX24116_DEFAULT_FIRMWARE);
ret = request_firmware(&fw, CX24116_DEFAULT_FIRMWARE,
@@ -516,8 +517,8 @@ upstream submission.
/* Make sure we don't recurse back through here
* during loading */
---- a/drivers/media/dvb/frontends/drxd_hard.c
-+++ b/drivers/media/dvb/frontends/drxd_hard.c
+--- a/drivers/media/dvb-frontends/drxd_hard.c
++++ b/drivers/media/dvb-frontends/drxd_hard.c
@@ -909,10 +909,8 @@ static int load_firmware(struct drxd_sta
{
const struct firmware *fw;
@@ -530,8 +531,8 @@ upstream submission.
state->microcode = kmemdup(fw->data, fw->size, GFP_KERNEL);
if (state->microcode == NULL) {
---- a/drivers/media/dvb/frontends/drxk_hard.c
-+++ b/drivers/media/dvb/frontends/drxk_hard.c
+--- a/drivers/media/dvb-frontends/drxk_hard.c
++++ b/drivers/media/dvb-frontends/drxk_hard.c
@@ -6275,12 +6275,6 @@ static void load_firmware_cb(const struc
dprintk(1, ": %s\n", fw ? "firmware loaded" : "firmware not loaded");
@@ -545,9 +546,9 @@ upstream submission.
state->microcode_name = NULL;
/*
---- a/drivers/media/dvb/frontends/ds3000.c
-+++ b/drivers/media/dvb/frontends/ds3000.c
-@@ -403,12 +403,8 @@ static int ds3000_firmware_ondemand(stru
+--- a/drivers/media/dvb-frontends/ds3000.c
++++ b/drivers/media/dvb-frontends/ds3000.c
+@@ -406,12 +406,8 @@ static int ds3000_firmware_ondemand(stru
DS3000_DEFAULT_FIRMWARE);
ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
state->i2c->dev.parent);
@@ -561,36 +562,38 @@ upstream submission.
/* Make sure we don't recurse back through here during loading */
state->skip_fw_load = 1;
---- a/drivers/media/dvb/frontends/nxt200x.c
-+++ b/drivers/media/dvb/frontends/nxt200x.c
-@@ -881,11 +881,8 @@ static int nxt2002_init(struct dvb_front
- printk("nxt2002: Waiting for firmware upload (%s)...\n", NXT2002_DEFAULT_FIRMWARE);
+--- a/drivers/media/dvb-frontends/nxt200x.c
++++ b/drivers/media/dvb-frontends/nxt200x.c
+@@ -882,12 +882,8 @@ static int nxt2002_init(struct dvb_front
+ __func__, NXT2002_DEFAULT_FIRMWARE);
ret = request_firmware(&fw, NXT2002_DEFAULT_FIRMWARE,
state->i2c->dev.parent);
-- printk("nxt2002: Waiting for firmware upload(2)...\n");
+- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
- if (ret) {
-- printk("nxt2002: No firmware uploaded (timeout or file not found?)\n");
+- pr_err("%s: No firmware uploaded (timeout or file not found?)"
+- "\n", __func__);
+ if (ret)
return ret;
- }
ret = nxt2002_load_firmware(fe, fw);
release_firmware(fw);
-@@ -946,11 +943,8 @@ static int nxt2004_init(struct dvb_front
- printk("nxt2004: Waiting for firmware upload (%s)...\n", NXT2004_DEFAULT_FIRMWARE);
+@@ -949,12 +945,8 @@ static int nxt2004_init(struct dvb_front
+ __func__, NXT2004_DEFAULT_FIRMWARE);
ret = request_firmware(&fw, NXT2004_DEFAULT_FIRMWARE,
state->i2c->dev.parent);
-- printk("nxt2004: Waiting for firmware upload(2)...\n");
+- pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
- if (ret) {
-- printk("nxt2004: No firmware uploaded (timeout or file not found?)\n");
+- pr_err("%s: No firmware uploaded (timeout or file not found?)"
+- "\n", __func__);
+ if (ret)
return ret;
- }
ret = nxt2004_load_firmware(fe, fw);
release_firmware(fw);
---- a/drivers/media/dvb/frontends/or51132.c
-+++ b/drivers/media/dvb/frontends/or51132.c
+--- a/drivers/media/dvb-frontends/or51132.c
++++ b/drivers/media/dvb-frontends/or51132.c
@@ -341,11 +341,8 @@ static int or51132_set_parameters(struct
printk("or51132: Waiting for firmware upload(%s)...\n",
fwname);
@@ -604,8 +607,8 @@ upstream submission.
ret = or51132_load_firmware(fe, fw);
release_firmware(fw);
if (ret) {
---- a/drivers/media/dvb/frontends/or51211.c
-+++ b/drivers/media/dvb/frontends/or51211.c
+--- a/drivers/media/dvb-frontends/or51211.c
++++ b/drivers/media/dvb-frontends/or51211.c
@@ -379,12 +379,8 @@ static int or51211_init(struct dvb_front
"(%s)...\n", OR51211_DEFAULT_FIRMWARE);
ret = config->request_firmware(fe, &fw,
@@ -620,8 +623,8 @@ upstream submission.
ret = or51211_load_firmware(fe, fw);
release_firmware(fw);
---- a/drivers/media/dvb/frontends/sp8870.c
-+++ b/drivers/media/dvb/frontends/sp8870.c
+--- a/drivers/media/dvb-frontends/sp8870.c
++++ b/drivers/media/dvb-frontends/sp8870.c
@@ -315,10 +315,8 @@ static int sp8870_init (struct dvb_front
/* request the firmware, this will block until someone uploads it */
@@ -634,8 +637,8 @@ upstream submission.
if (sp8870_firmware_upload(state, fw)) {
printk("sp8870: writing firmware to device failed\n");
---- a/drivers/media/dvb/frontends/sp887x.c
-+++ b/drivers/media/dvb/frontends/sp887x.c
+--- a/drivers/media/dvb-frontends/sp887x.c
++++ b/drivers/media/dvb-frontends/sp887x.c
@@ -527,10 +527,8 @@ static int sp887x_init(struct dvb_fronte
/* request the firmware, this will block until someone uploads it */
printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
@@ -648,8 +651,8 @@ upstream submission.
ret = sp887x_initial_setup(fe, fw);
release_firmware(fw);
---- a/drivers/media/dvb/frontends/tda10048.c
-+++ b/drivers/media/dvb/frontends/tda10048.c
+--- a/drivers/media/dvb-frontends/tda10048.c
++++ b/drivers/media/dvb-frontends/tda10048.c
@@ -495,8 +495,6 @@ static int tda10048_firmware_upload(stru
ret = request_firmware(&fw, TDA10048_DEFAULT_FIRMWARE,
state->i2c->dev.parent);
@@ -659,9 +662,9 @@ upstream submission.
return -EIO;
} else {
printk(KERN_INFO "%s: firmware read %Zu bytes.\n",
---- a/drivers/media/dvb/frontends/tda1004x.c
-+++ b/drivers/media/dvb/frontends/tda1004x.c
-@@ -397,10 +397,8 @@ static int tda10045_fwupload(struct dvb_
+--- a/drivers/media/dvb-frontends/tda1004x.c
++++ b/drivers/media/dvb-frontends/tda1004x.c
+@@ -401,10 +401,8 @@ static int tda10045_fwupload(struct dvb_
/* request the firmware, this will block until someone uploads it */
printk(KERN_INFO "tda1004x: waiting for firmware upload (%s)...\n", TDA10045_DEFAULT_FIRMWARE);
ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
@@ -673,7 +676,7 @@ upstream submission.
/* reset chip */
tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0);
-@@ -541,7 +539,6 @@ static int tda10046_fwupload(struct dvb_
+@@ -545,7 +543,6 @@ static int tda10046_fwupload(struct dvb_
/* remain compatible to old bug: try to load with tda10045 image name */
ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
if (ret) {
@@ -681,8 +684,8 @@ upstream submission.
return ret;
} else {
printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
---- a/drivers/media/dvb/frontends/tda10071.c
-+++ b/drivers/media/dvb/frontends/tda10071.c
+--- a/drivers/media/dvb-frontends/tda10071.c
++++ b/drivers/media/dvb-frontends/tda10071.c
@@ -939,14 +939,8 @@ static int tda10071_init(struct dvb_fron
/* request the firmware, this will block and timeout */
@@ -699,9 +702,9 @@ upstream submission.
/* init */
for (i = 0; i < ARRAY_SIZE(tab2); i++) {
---- a/drivers/media/dvb/ngene/ngene-core.c
-+++ b/drivers/media/dvb/ngene/ngene-core.c
-@@ -1272,13 +1272,8 @@ static int ngene_load_firm(struct ngene
+--- a/drivers/media/pci/ngene/ngene-core.c
++++ b/drivers/media/pci/ngene/ngene-core.c
+@@ -1266,13 +1266,8 @@ static int ngene_load_firm(struct ngene
break;
}
@@ -716,7 +719,7 @@ upstream submission.
if (size == 0)
size = fw->size;
if (size != fw->size) {
-@@ -1286,8 +1281,6 @@ static int ngene_load_firm(struct ngene
+@@ -1280,8 +1275,6 @@ static int ngene_load_firm(struct ngene
": Firmware %s has invalid size!", fw_name);
err = -1;
} else {
@@ -725,8 +728,8 @@ upstream submission.
ngene_fw = (u8 *) fw->data;
err = ngene_command_load_firmware(dev, ngene_fw, size);
}
---- a/drivers/media/dvb/siano/smscoreapi.c
-+++ b/drivers/media/dvb/siano/smscoreapi.c
+--- a/drivers/media/common/siano/smscoreapi.c
++++ b/drivers/media/common/siano/smscoreapi.c
@@ -639,10 +639,8 @@ static int smscore_load_firmware_from_fi
return -EINVAL;
@@ -739,8 +742,8 @@ upstream submission.
sms_info("read FW %s, size=%zd", filename, fw->size);
fw_buffer = kmalloc(ALIGN(fw->size, SMS_ALLOC_ALIGNMENT),
GFP_KERNEL | GFP_DMA);
---- a/drivers/media/dvb/ttpci/av7110.c
-+++ b/drivers/media/dvb/ttpci/av7110.c
+--- a/drivers/media/pci/ttpci/av7110.c
++++ b/drivers/media/pci/ttpci/av7110.c
@@ -1531,16 +1531,9 @@ static int get_firmware(struct av7110* a
/* request the av7110 firmware, this will block until someone uploads it */
ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
@@ -760,8 +763,8 @@ upstream submission.
return -EINVAL;
}
---- a/drivers/media/dvb/ttpci/av7110_hw.c
-+++ b/drivers/media/dvb/ttpci/av7110_hw.c
+--- a/drivers/media/pci/ttpci/av7110_hw.c
++++ b/drivers/media/pci/ttpci/av7110_hw.c
@@ -243,11 +243,8 @@ int av7110_bootarm(struct av7110 *av7110
//saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
@@ -775,8 +778,8 @@ upstream submission.
mwdebi(av7110, DEBISWAB, DPRAM_BASE, fw->data, fw->size);
release_firmware(fw);
---- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
-+++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+--- a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
++++ b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
@@ -296,10 +296,8 @@ static int ttusb_boot_dsp(struct ttusb *
err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
@@ -789,8 +792,8 @@ upstream submission.
/* BootBlock */
b[0] = 0xaa;
---- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c
-+++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c
+--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
++++ b/drivers/media/usb/ttusb-dec/ttusb_dec.c
@@ -1293,11 +1293,8 @@ static int ttusb_dec_boot_dsp(struct ttu
dprintk("%s\n", __func__);
@@ -833,8 +836,8 @@ upstream submission.
fmdbg("Firmware(%s) length : %d bytes\n", fw_name, fw_entry->size);
fw_data = (void *)fw_entry->data;
---- a/drivers/media/video/bt8xx/bttv-cards.c
-+++ b/drivers/media/video/bt8xx/bttv-cards.c
+--- a/drivers/media/pci/bt8xx/bttv-cards.c
++++ b/drivers/media/pci/bt8xx/bttv-cards.c
@@ -3753,10 +3753,8 @@ static int __devinit pvr_boot(struct btt
int rc;
@@ -847,9 +850,9 @@ upstream submission.
rc = pvr_altera_load(btv, fw_entry->data, fw_entry->size);
pr_info("%d: altera firmware upload %s\n",
btv->c.nr, (rc < 0) ? "failed" : "ok");
---- a/drivers/media/video/cpia2/cpia2_core.c
-+++ b/drivers/media/video/cpia2/cpia2_core.c
-@@ -903,11 +903,8 @@ static int apply_vp_patch(struct camera_
+--- a/drivers/media/usb/cpia2/cpia2_core.c
++++ b/drivers/media/usb/cpia2/cpia2_core.c
+@@ -907,11 +907,8 @@ static int apply_vp_patch(struct camera_
struct cpia2_command cmd;
ret = request_firmware(&fw, fw_name, &cam->dev->dev);
@@ -862,8 +865,8 @@ upstream submission.
cmd.req_mode = CAMERAACCESS_TYPE_REPEAT | CAMERAACCESS_VP;
cmd.direction = TRANSFER_WRITE;
---- a/drivers/media/video/cx18/cx18-av-firmware.c
-+++ b/drivers/media/video/cx18/cx18-av-firmware.c
+--- a/drivers/media/pci/cx18/cx18-av-firmware.c
++++ b/drivers/media/pci/cx18/cx18-av-firmware.c
@@ -85,10 +85,8 @@ int cx18_av_loadfw(struct cx18 *cx)
int i;
int retries1 = 0;
@@ -876,9 +879,9 @@ upstream submission.
/* The firmware load often has byte errors, so allow for several
retries, both at byte level and at the firmware load level. */
---- a/drivers/media/video/cx18/cx18-dvb.c
-+++ b/drivers/media/video/cx18/cx18-dvb.c
-@@ -139,9 +139,7 @@ static int yuan_mpc718_mt352_reqfw(struc
+--- a/drivers/media/pci/cx18/cx18-dvb.c
++++ b/drivers/media/pci/cx18/cx18-dvb.c
+@@ -141,9 +141,7 @@ static int yuan_mpc718_mt352_reqfw(struc
int ret;
ret = request_firmware(fw, fn, &cx->pci_dev->dev);
@@ -889,7 +892,7 @@ upstream submission.
size_t sz = (*fw)->size;
if (sz < 2 || sz > 64 || (sz % 2) != 0) {
CX18_ERR("Firmware %s has a bad size: %lu bytes\n",
-@@ -154,7 +152,7 @@ static int yuan_mpc718_mt352_reqfw(struc
+@@ -156,7 +154,7 @@ static int yuan_mpc718_mt352_reqfw(struc
if (ret) {
CX18_ERR("The MPC718 board variant with the MT352 DVB-T"
@@ -898,8 +901,8 @@ upstream submission.
CX18_ERR("Run 'linux/Documentation/dvb/get_dvb_firmware "
"mpc718' if you need the firmware\n");
}
---- a/drivers/media/video/cx18/cx18-firmware.c
-+++ b/drivers/media/video/cx18/cx18-firmware.c
+--- a/drivers/media/pci/cx18/cx18-firmware.c
++++ b/drivers/media/pci/cx18/cx18-firmware.c
@@ -106,11 +106,8 @@ static int load_cpu_fw_direct(const char
u32 __iomem *dst = (u32 __iomem *)mem;
const u32 *src;
@@ -922,8 +925,8 @@ upstream submission.
cx18_setup_page(cx, 0);
return -ENOMEM;
}
---- a/drivers/media/video/cx231xx/cx231xx-417.c
-+++ b/drivers/media/video/cx231xx/cx231xx-417.c
+--- a/drivers/media/usb/cx231xx/cx231xx-417.c
++++ b/drivers/media/usb/cx231xx/cx231xx-417.c
@@ -979,14 +979,8 @@ static int cx231xx_load_firmware(struct
retval = request_firmware(&firmware, CX231xx_FIRM_IMAGE_NAME,
&dev->udev->dev);
@@ -940,8 +943,8 @@ upstream submission.
if (firmware->size != CX231xx_FIRM_IMAGE_SIZE) {
printk(KERN_ERR "ERROR: Firmware size mismatch "
---- a/drivers/media/video/cx23885/cx23885-417.c
-+++ b/drivers/media/video/cx23885/cx23885-417.c
+--- a/drivers/media/pci/cx23885/cx23885-417.c
++++ b/drivers/media/pci/cx23885/cx23885-417.c
@@ -930,14 +930,8 @@ static int cx23885_load_firmware(struct
retval = request_firmware(&firmware, CX23885_FIRM_IMAGE_NAME,
&dev->pci->dev);
@@ -958,9 +961,9 @@ upstream submission.
if (firmware->size != CX23885_FIRM_IMAGE_SIZE) {
printk(KERN_ERR "ERROR: Firmware size mismatch "
---- a/drivers/media/video/cx23885/cx23885-cards.c
-+++ b/drivers/media/video/cx23885/cx23885-cards.c
-@@ -1664,11 +1664,7 @@ void cx23885_card_setup(struct cx23885_d
+--- a/drivers/media/pci/cx23885/cx23885-cards.c
++++ b/drivers/media/pci/cx23885/cx23885-cards.c
+@@ -1681,11 +1681,7 @@ void cx23885_card_setup(struct cx23885_d
cinfo.rev, filename);
ret = request_firmware(&fw, filename, &dev->pci->dev);
@@ -973,9 +976,9 @@ upstream submission.
altera_init(&netup_config, fw);
release_firmware(fw);
---- a/drivers/media/video/cx25840/cx25840-firmware.c
-+++ b/drivers/media/video/cx25840/cx25840-firmware.c
-@@ -123,10 +123,8 @@ int cx25840_loadfw(struct i2c_client *cl
+--- a/drivers/media/i2c/cx25840/cx25840-firmware.c
++++ b/drivers/media/i2c/cx25840/cx25840-firmware.c
+@@ -127,10 +127,8 @@ int cx25840_loadfw(struct i2c_client *cl
MAX_BUF_SIZE = 16; /* cx231xx cannot accept more than 16 bytes at a time */
}
@@ -987,8 +990,8 @@ upstream submission.
start_fw_load(client);
---- a/drivers/media/video/cx88/cx88-blackbird.c
-+++ b/drivers/media/video/cx88/cx88-blackbird.c
+--- a/drivers/media/pci/cx88/cx88-blackbird.c
++++ b/drivers/media/pci/cx88/cx88-blackbird.c
@@ -447,13 +447,8 @@ static int blackbird_load_firmware(struc
&dev->pci->dev);
@@ -1004,9 +1007,9 @@ upstream submission.
if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) {
dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n",
---- a/drivers/media/video/gspca/vicam.c
-+++ b/drivers/media/video/gspca/vicam.c
-@@ -245,10 +245,8 @@ static int sd_init(struct gspca_dev *gsp
+--- a/drivers/media/usb/gspca/vicam.c
++++ b/drivers/media/usb/gspca/vicam.c
+@@ -244,10 +244,8 @@ static int sd_init(struct gspca_dev *gsp
ret = request_ihex_firmware(&fw, VICAM_FIRMWARE,
&gspca_dev->dev->dev);
@@ -1018,8 +1021,8 @@ upstream submission.
firmware_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (!firmware_buf) {
---- a/drivers/media/video/ivtv/ivtv-firmware.c
-+++ b/drivers/media/video/ivtv/ivtv-firmware.c
+--- a/drivers/media/pci/ivtv/ivtv-firmware.c
++++ b/drivers/media/pci/ivtv/ivtv-firmware.c
@@ -80,8 +80,6 @@ retry:
release_firmware(fw);
return size;
@@ -1029,8 +1032,8 @@ upstream submission.
return -ENOMEM;
}
---- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
-+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
@@ -1382,29 +1382,6 @@ static int pvr2_locate_firmware(struct p
"request_firmware fatal error with code=%d",ret);
return ret;
@@ -1061,9 +1064,9 @@ upstream submission.
return ret;
}
---- a/drivers/media/video/s2255drv.c
-+++ b/drivers/media/video/s2255drv.c
-@@ -2585,10 +2585,8 @@ static int s2255_probe(struct usb_interf
+--- a/drivers/media/usb/s2255/s2255drv.c
++++ b/drivers/media/usb/s2255/s2255drv.c
+@@ -2587,10 +2587,8 @@ static int s2255_probe(struct usb_interf
}
/* load the first chunk */
if (request_firmware(&dev->fw_data->fw,
@@ -1075,24 +1078,24 @@ upstream submission.
/* check the firmware is valid */
fw_size = dev->fw_data->fw->size;
pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8];
---- a/drivers/media/video/s5p-mfc/s5p_mfc_ctrl.c
-+++ b/drivers/media/video/s5p-mfc/s5p_mfc_ctrl.c
-@@ -39,10 +39,8 @@ int s5p_mfc_alloc_and_load_firmware(stru
- mfc_debug_enter();
+--- a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
++++ b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
+@@ -40,10 +40,8 @@ int s5p_mfc_alloc_and_load_firmware(stru
+
err = request_firmware((const struct firmware **)&fw_blob,
- "s5p-mfc.fw", dev->v4l2_dev.dev);
+ dev->variant->fw_name, dev->v4l2_dev.dev);
- if (err != 0) {
- mfc_err("Firmware is not present in the /lib/firmware directory nor compiled in kernel\n");
+ if (err != 0)
return -EINVAL;
- }
- dev->fw_size = ALIGN(fw_blob->size, FIRMWARE_ALIGN);
- if (s5p_mfc_bitproc_buf) {
- mfc_err("Attempting to allocate firmware when it seems that it is already loaded\n");
-@@ -117,10 +115,8 @@ int s5p_mfc_reload_firmware(struct s5p_m
- mfc_debug_enter();
+ dev->fw_size = dev->variant->buf_size->fw;
+ if (fw_blob->size > dev->fw_size) {
+ mfc_err("MFC firmware is too big to be loaded\n");
+@@ -133,10 +131,8 @@ int s5p_mfc_reload_firmware(struct s5p_m
+
err = request_firmware((const struct firmware **)&fw_blob,
- "s5p-mfc.fw", dev->v4l2_dev.dev);
+ dev->variant->fw_name, dev->v4l2_dev.dev);
- if (err != 0) {
- mfc_err("Firmware is not present in the /lib/firmware directory nor compiled in kernel\n");
+ if (err != 0)
@@ -1101,8 +1104,8 @@ upstream submission.
if (fw_blob->size > dev->fw_size) {
mfc_err("MFC firmware is too big to be loaded\n");
release_firmware(fw_blob);
---- a/drivers/media/video/saa7164/saa7164-fw.c
-+++ b/drivers/media/video/saa7164/saa7164-fw.c
+--- a/drivers/media/pci/saa7164/saa7164-fw.c
++++ b/drivers/media/pci/saa7164/saa7164-fw.c
@@ -420,11 +420,8 @@ int saa7164_downloadfirmware(struct saa7
__func__, fwname);
@@ -1116,8 +1119,8 @@ upstream submission.
printk(KERN_INFO "%s() firmware read %Zu bytes.\n",
__func__, fw->size);
---- a/drivers/media/video/tlg2300/pd-main.c
-+++ b/drivers/media/video/tlg2300/pd-main.c
+--- a/drivers/media/usb/tlg2300/pd-main.c
++++ b/drivers/media/usb/tlg2300/pd-main.c
@@ -220,10 +220,8 @@ static int firmware_download(struct usb_
size_t max_packet_size;
@@ -1132,7 +1135,7 @@ upstream submission.
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
-@@ -281,11 +281,8 @@ static long download_firmware(struct kim
+@@ -301,11 +301,8 @@ static long download_firmware(struct kim
request_firmware(&kim_gdata->fw_entry, bts_scr_name,
&kim_gdata->kim_pdev->dev);
if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) ||
@@ -1242,7 +1245,7 @@ upstream submission.
if (bp->mips_firmware->size < sizeof(*mips_fw) ||
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-@@ -11642,11 +11642,8 @@ static int bnx2x_init_firmware(struct bn
+@@ -11645,11 +11645,8 @@ static int bnx2x_init_firmware(struct bn
BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
@@ -1257,7 +1260,7 @@ upstream submission.
if (rc) {
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
-@@ -10105,11 +10105,8 @@ static int tg3_request_firmware(struct t
+@@ -10161,11 +10161,8 @@ static int tg3_request_firmware(struct t
{
const __be32 *fw_data;
@@ -1328,7 +1331,7 @@ upstream submission.
if (ret)
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -834,11 +834,8 @@ static int upgrade_fw(struct adapter *ad
+@@ -918,11 +918,8 @@ static int upgrade_fw(struct adapter *ad
struct device *dev = adap->pdev_dev;
ret = request_firmware(&fw, FW_FNAME, dev);
@@ -1410,7 +1413,7 @@ upstream submission.
fw->size, fw_name[predef]);
--- a/drivers/net/usb/kaweth.c
+++ b/drivers/net/usb/kaweth.c
-@@ -400,10 +400,8 @@ static int kaweth_download_firmware(stru
+@@ -398,10 +398,8 @@ static int kaweth_download_firmware(stru
int ret;
ret = request_firmware(&fw, fwname, &kaweth->dev->dev);
@@ -1448,7 +1451,7 @@ upstream submission.
} else
--- a/drivers/net/wireless/at76c50x-usb.c
+++ b/drivers/net/wireless/at76c50x-usb.c
-@@ -1584,14 +1584,8 @@ static struct fwentry *at76_load_firmwar
+@@ -1554,14 +1554,8 @@ static struct fwentry *at76_load_firmwar
at76_dbg(DBG_FW, "downloading firmware %s", fwe->fwname);
ret = request_firmware(&fwe->fw, fwe->fwname, &udev->dev);
@@ -1466,7 +1469,7 @@ upstream submission.
fwh = (struct at76_fw_header *)(fwe->fw->data);
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
-@@ -1090,12 +1090,8 @@ static void ath9k_hif_usb_firmware_cb(co
+@@ -1092,12 +1092,8 @@ static void ath9k_hif_usb_firmware_cb(co
struct hif_device_usb *hif_dev = context;
int ret;
@@ -1545,7 +1548,7 @@ upstream submission.
hdr = (struct b43legacy_fw_header *)((*fw)->data);
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
-@@ -3480,10 +3480,8 @@ static int brcmf_sdbrcm_download_code_fi
+@@ -3220,10 +3220,8 @@ static int brcmf_sdbrcm_download_code_fi
ret = request_firmware(&bus->firmware, BRCMF_SDIO_FW_NAME,
&bus->sdiodev->func[2]->dev);
@@ -1557,7 +1560,7 @@ upstream submission.
bus->fw_ptr = 0;
memptr = memblock = kmalloc(MEMBLOCK + BRCMF_SDALIGN, GFP_ATOMIC);
-@@ -3599,10 +3597,8 @@ static int brcmf_sdbrcm_download_nvram(s
+@@ -3339,10 +3337,8 @@ static int brcmf_sdbrcm_download_nvram(s
ret = request_firmware(&bus->firmware, BRCMF_SDIO_NV_NAME,
&bus->sdiodev->func[2]->dev);
@@ -1571,7 +1574,7 @@ upstream submission.
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
-@@ -777,19 +777,13 @@ static int brcms_request_fw(struct brcms
+@@ -784,19 +784,13 @@ static int brcms_request_fw(struct brcms
sprintf(fw_name, "%s-%d.fw", brcms_firmwares[i],
UCODE_LOADER_API_VER);
status = request_firmware(&wl->fw.fw_bin[i], fw_name, device);
@@ -1595,7 +1598,7 @@ upstream submission.
}
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
-@@ -8476,12 +8476,8 @@ static int ipw2100_get_firmware(struct i
+@@ -8467,12 +8467,8 @@ static int ipw2100_get_firmware(struct i
rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev);
@@ -1625,7 +1628,7 @@ upstream submission.
IPW_ERROR("%s is too small (%zd)\n", name, (*raw)->size);
--- a/drivers/net/wireless/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
-@@ -1844,7 +1844,6 @@ il3945_read_ucode(struct il_priv *il)
+@@ -1846,7 +1846,6 @@ il3945_read_ucode(struct il_priv *il)
sprintf(buf, "%s%u%s", name_pre, idx, ".ucode");
ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev);
if (ret < 0) {
@@ -1635,7 +1638,7 @@ upstream submission.
else
--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
-@@ -789,13 +789,8 @@ static void iwl_ucode_callback(const str
+@@ -846,13 +846,8 @@ static void iwl_req_fw_callback(const st
memset(&pieces, 0, sizeof(pieces));
@@ -1663,7 +1666,7 @@ upstream submission.
}
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
-@@ -316,11 +316,8 @@ static void mwifiex_fw_dpc(const struct
+@@ -315,11 +315,8 @@ static void mwifiex_fw_dpc(const struct
struct mwifiex_adapter *adapter = context;
struct mwifiex_fw_image fw;
@@ -1678,7 +1681,7 @@ upstream submission.
adapter->firmware = firmware;
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
-@@ -5297,16 +5297,12 @@ static int mwl8k_firmware_load_success(s
+@@ -5300,16 +5300,12 @@ static int mwl8k_firmware_load_success(s
static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
{
struct mwl8k_priv *priv = context;
@@ -1696,7 +1699,7 @@ upstream submission.
priv->fw_helper = fw;
rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode,
true);
-@@ -5341,11 +5337,8 @@ static void mwl8k_fw_state_machine(const
+@@ -5344,11 +5340,8 @@ static void mwl8k_fw_state_machine(const
break;
case FW_STATE_LOADING_ALT:
@@ -1709,7 +1712,7 @@ upstream submission.
priv->fw_ucode = fw;
rc = mwl8k_firmware_load_success(priv);
if (rc)
-@@ -5383,10 +5376,8 @@ retry:
+@@ -5386,10 +5379,8 @@ retry:
/* Ask userland hotplug daemon for the device firmware */
rc = mwl8k_request_firmware(priv, fw_image, nowait);
@@ -1767,14 +1770,14 @@ upstream submission.
--- a/drivers/net/wireless/p54/p54pci.c
+++ b/drivers/net/wireless/p54/p54pci.c
-@@ -564,7 +564,6 @@ static int __devinit p54p_probe(struct p
- err = request_firmware(&priv->firmware, "isl3886pci",
- &priv->pdev->dev);
- if (err) {
+@@ -497,7 +497,6 @@ static void p54p_firmware_step2(const st
+ int err;
+
+ if (!fw) {
- dev_err(&pdev->dev, "Cannot find firmware (isl3886pci)\n");
- err = request_firmware(&priv->firmware, "isl3886",
- &priv->pdev->dev);
- if (err)
+ err = -ENOENT;
+ goto out;
+ }
--- a/drivers/net/wireless/p54/p54spi.c
+++ b/drivers/net/wireless/p54/p54spi.c
@@ -171,10 +171,8 @@ static int p54spi_request_firmware(struc
@@ -1987,7 +1990,7 @@ upstream submission.
if (err) {
--- a/drivers/scsi/bfa/bfad.c
+++ b/drivers/scsi/bfa/bfad.c
-@@ -1579,7 +1579,6 @@ bfad_read_firmware(struct pci_dev *pdev,
+@@ -1803,7 +1803,6 @@ bfad_read_firmware(struct pci_dev *pdev,
const struct firmware *fw;
if (request_firmware(&fw, fw_name, &pdev->dev)) {
@@ -1997,11 +2000,11 @@ upstream submission.
}
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
-@@ -3746,10 +3746,8 @@ static ssize_t ipr_store_update_fw(struc
+@@ -3779,10 +3779,8 @@ static ssize_t ipr_store_update_fw(struc
len = snprintf(fname, 99, "%s", buf);
fname[len-1] = '\0';
-- if(request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
+- if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
- dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
+ if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev))
return -EIO;
@@ -2034,7 +2037,7 @@ upstream submission.
}
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
-@@ -4582,8 +4582,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
+@@ -4993,8 +4993,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
/* Load firmware blob. */
blob = qla2x00_request_firmware(vha);
if (!blob) {
@@ -2043,7 +2046,7 @@ upstream submission.
ql_log(ql_log_info, vha, 0x0084,
"Firmware images can be retrieved from: "QLA_FW_URL ".\n");
return QLA_FUNCTION_FAILED;
-@@ -4684,8 +4682,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
+@@ -5095,8 +5093,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
/* Load firmware blob. */
blob = qla2x00_request_firmware(vha);
if (!blob) {
@@ -2054,7 +2057,7 @@ upstream submission.
QLA_FW_URL ".\n");
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
-@@ -2459,11 +2459,8 @@ try_blob_fw:
+@@ -2463,11 +2463,8 @@ try_blob_fw:
/* Load firmware blob. */
blob = ha->hablob = qla2x00_request_firmware(vha);
@@ -2069,7 +2072,7 @@ upstream submission.
if (qla82xx_validate_firmware_blob(vha,
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
-@@ -4179,8 +4179,6 @@ qla2x00_request_firmware(scsi_qla_host_t
+@@ -4890,8 +4890,6 @@ qla2x00_request_firmware(scsi_qla_host_t
goto out;
if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
@@ -2095,7 +2098,7 @@ upstream submission.
fw->size, fwname);
--- a/drivers/staging/comedi/drivers/usbdux.c
+++ b/drivers/staging/comedi/drivers/usbdux.c
-@@ -2525,11 +2525,8 @@ static void usbdux_firmware_request_comp
+@@ -2428,11 +2428,8 @@ static void usbdux_firmware_request_comp
struct usb_interface *uinterf = usbduxsub_tmp->interface;
int ret;
@@ -2110,7 +2113,7 @@ upstream submission.
* we need to upload the firmware here because fw will be
--- a/drivers/staging/comedi/drivers/usbduxsigma.c
+++ b/drivers/staging/comedi/drivers/usbduxsigma.c
-@@ -2511,11 +2511,8 @@ static void usbdux_firmware_request_comp
+@@ -2409,11 +2409,8 @@ static void usbdux_firmware_request_comp
struct usb_interface *uinterf = usbduxsub_tmp->interface;
int ret;
@@ -2249,7 +2252,7 @@ upstream submission.
if (0 != ret) {
--- a/drivers/staging/media/lirc/lirc_zilog.c
+++ b/drivers/staging/media/lirc/lirc_zilog.c
-@@ -765,8 +765,6 @@ static int fw_load(struct IR_tx *tx)
+@@ -764,8 +764,6 @@ static int fw_load(struct IR_tx *tx)
/* Request codeset data file */
ret = request_firmware(&fw_entry, "haup-ir-blaster.bin", tx->ir->l.dev);
if (ret != 0) {
@@ -2284,7 +2287,7 @@ upstream submission.
usb_set_intfdata(pusb_intf, NULL);
--- a/drivers/staging/slicoss/slicoss.c
+++ b/drivers/staging/slicoss/slicoss.c
-@@ -519,11 +519,8 @@ static int slic_card_download_gbrcv(stru
+@@ -518,11 +518,8 @@ static int slic_card_download_gbrcv(stru
}
ret = request_firmware(&fw, file, &adapter->pcidev->dev);
@@ -2341,7 +2344,7 @@ upstream submission.
positive, skip this board */
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
-@@ -866,13 +866,8 @@ static int moxa_init_board(struct moxa_b
+@@ -867,13 +867,8 @@ static int moxa_init_board(struct moxa_b
}
ret = request_firmware(&fw, file, dev);
@@ -2409,7 +2412,7 @@ upstream submission.
--- a/drivers/usb/atm/ueagle-atm.c
+++ b/drivers/usb/atm/ueagle-atm.c
-@@ -622,10 +622,8 @@ static void uea_upload_pre_firmware(cons
+@@ -650,10 +650,8 @@ static void uea_upload_pre_firmware(cons
int ret, size;
uea_enters(usb);
@@ -2421,7 +2424,7 @@ upstream submission.
pfw = fw_entry->data;
size = fw_entry->size;
-@@ -720,10 +718,6 @@ static int uea_load_firmware(struct usb_
+@@ -748,10 +746,6 @@ static int uea_load_firmware(struct usb_
ret = request_firmware_nowait(THIS_MODULE, 1, fw_name, &usb->dev,
GFP_KERNEL, usb,
uea_upload_pre_firmware);
@@ -2432,7 +2435,7 @@ upstream submission.
uea_leaves(usb);
return ret;
-@@ -885,12 +879,8 @@ static int request_dsp(struct uea_softc
+@@ -913,12 +907,8 @@ static int request_dsp(struct uea_softc
}
ret = request_firmware(&sc->dsp_firm, dsp_name, &sc->usb_dev->dev);
@@ -2446,7 +2449,7 @@ upstream submission.
if (UEA_CHIP_VERSION(sc) == EAGLE_IV)
ret = check_dsp_e4(sc->dsp_firm->data, sc->dsp_firm->size);
-@@ -1603,12 +1593,8 @@ static int request_cmvs_old(struct uea_s
+@@ -1631,12 +1621,8 @@ static int request_cmvs_old(struct uea_s
cmvs_file_name(sc, cmv_name, 1);
ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev);
@@ -2460,7 +2463,7 @@ upstream submission.
data = (u8 *) (*fw)->data;
size = (*fw)->size;
-@@ -1645,9 +1631,6 @@ static int request_cmvs(struct uea_softc
+@@ -1673,9 +1659,6 @@ static int request_cmvs(struct uea_softc
"try to get older cmvs\n", cmv_name);
return request_cmvs_old(sc, cmvs, fw);
}
@@ -2470,7 +2473,7 @@ upstream submission.
return ret;
}
-@@ -1930,11 +1913,8 @@ static int load_XILINX_firmware(struct u
+@@ -1958,11 +1941,8 @@ static int load_XILINX_firmware(struct u
uea_enters(INS_TO_USBDEV(sc));
ret = request_firmware(&fw_entry, fw_name, &sc->usb_dev->dev);
@@ -2510,6 +2513,22 @@ upstream submission.
/* Assert reset (stop the CPU in the EMI) */
err = emi26_set_reset(dev,1);
+--- a/drivers/usb/misc/ezusb.c
++++ b/drivers/usb/misc/ezusb.c
+@@ -91,12 +91,8 @@ static int ezusb_ihex_firmware_download(
+ const struct ihex_binrec *record;
+
+ if (request_ihex_firmware(&firmware, firmware_path,
+- &dev->dev)) {
+- dev_err(&dev->dev,
+- "%s - request \"%s\" failed\n",
+- __func__, firmware_path);
++ &dev->dev))
+ goto out;
+- }
+
+ ret = ezusb_set_reset(dev, fx.cpucs_reg, 0);
+ if (ret < 0)
--- a/drivers/usb/misc/isight_firmware.c
+++ b/drivers/usb/misc/isight_firmware.c
@@ -48,7 +48,6 @@ static int isight_firmware_load(struct u
@@ -2522,12 +2541,12 @@ upstream submission.
}
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
-@@ -312,11 +312,8 @@ static void update_edgeport_E2PROM(struc
+@@ -310,11 +310,8 @@ static void update_edgeport_E2PROM(struc
response = request_ihex_firmware(&fw, fw_name,
&edge_serial->serial->dev->dev);
- if (response) {
-- printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+- dev_err(dev, "Failed to load image \"%s\" err %d\n",
- fw_name, response);
+ if (response)
return;
@@ -2537,56 +2556,27 @@ upstream submission.
BootMajorVersion = rec->data[0];
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
-@@ -855,8 +855,6 @@ static int build_i2c_fw_hdr(__u8 *header
+@@ -845,8 +845,6 @@ static int build_i2c_fw_hdr(__u8 *header
err = request_firmware(&fw, fw_name, dev);
if (err) {
-- printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
-- fw_name, err);
+- dev_err(dev, "Failed to load image \"%s\" err %d\n",
+- fw_name, err);
kfree(buffer);
return err;
}
-@@ -1421,8 +1419,6 @@ static int download_fw(struct edgeport_s
+@@ -1404,8 +1402,6 @@ static int download_fw(struct edgeport_s
err = request_firmware(&fw, fw_name, dev);
if (err) {
-- printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
-- fw_name, err);
+- dev_err(dev, "Failed to load image \"%s\" err %d\n",
+- fw_name, err);
kfree(buffer);
return err;
}
---- a/drivers/usb/serial/keyspan.c
-+++ b/drivers/usb/serial/keyspan.c
-@@ -1233,10 +1233,8 @@ static int keyspan_fake_startup(struct u
- return 1;
- }
-
-- if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
-- dev_err(&serial->dev->dev, "Required keyspan firmware image (%s) unavailable.\n", fw_name);
-+ if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev))
- return 1;
-- }
-
- dbg("Uploading Keyspan %s firmware.", fw_name);
-
---- a/drivers/usb/serial/keyspan_pda.c
-+++ b/drivers/usb/serial/keyspan_pda.c
-@@ -699,11 +699,8 @@ static int keyspan_pda_fake_startup(stru
- __func__);
- return -ENODEV;
- }
-- if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
-- dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
-- fw_name);
-+ if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev))
- return -ENOENT;
-- }
- record = (const struct ihex_binrec *)fw->data;
-
- while (record) {
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -1671,10 +1671,8 @@ static int ti_download_firmware(struct t
+@@ -1659,10 +1659,8 @@ static int ti_download_firmware(struct t
}
status = request_firmware(&fw_p, buf, &dev->dev);
}
@@ -2598,29 +2588,6 @@ upstream submission.
if (fw_p->size > TI_FIRMWARE_BUF_SIZE) {
dev_err(&dev->dev, "%s - firmware too large %zu\n", __func__, fw_p->size);
release_firmware(fw_p);
---- a/drivers/usb/serial/whiteheat.c
-+++ b/drivers/usb/serial/whiteheat.c
-@@ -204,18 +204,11 @@ static int whiteheat_firmware_download(s
- const struct ihex_binrec *record;
-
- if (request_ihex_firmware(&firmware_fw, "whiteheat.fw",
-- &serial->dev->dev)) {
-- dev_err(&serial->dev->dev,
-- "%s - request \"whiteheat.fw\" failed\n", __func__);
-+ &serial->dev->dev))
- goto out;
-- }
- if (request_ihex_firmware(&loader_fw, "whiteheat_loader.fw",
-- &serial->dev->dev)) {
-- dev_err(&serial->dev->dev,
-- "%s - request \"whiteheat_loader.fw\" failed\n",
-- __func__);
-+ &serial->dev->dev))
- goto out;
-- }
- ret = 0;
- response = ezusb_set_reset (serial, 1);
-
--- a/drivers/video/broadsheetfb.c
+++ b/drivers/video/broadsheetfb.c
@@ -741,10 +741,8 @@ static ssize_t broadsheet_loadstore_wave
@@ -2758,7 +2725,7 @@ upstream submission.
err = request_firmware(fw_entry, name, pci_device(chip));
- if (err < 0)
- snd_printk(KERN_ERR "get_firmware(): Firmware not available (%d)\n", err);
- #ifdef CONFIG_PM
+ #ifdef CONFIG_PM_SLEEP
- else
+ if (!err)
chip->fw_cache[fw_index] = *fw_entry;
@@ -2778,21 +2745,20 @@ upstream submission.
snd_printk(KERN_INFO "firmware size = 0x%zx\n", fw_entry->size);
/* The FPGA is a Xilinx Spartan IIE XC2S50E */
---- a/sound/pci/hda/hda_hwdep.c
-+++ b/sound/pci/hda/hda_hwdep.c
-@@ -792,11 +792,8 @@ int snd_hda_load_patch(struct hda_bus *b
- if (snd_BUG_ON(!dev))
- return -ENODEV;
- err = request_firmware(&fw, patch, dev);
-- if (err < 0) {
-- printk(KERN_ERR "hda-codec: Cannot load the patch '%s'\n",
-- patch);
-+ if (!err)
- return err;
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -3280,10 +3280,8 @@ static void azx_firmware_cb(const struct
+ struct azx *chip = card->private_data;
+ struct pci_dev *pci = chip->pci;
+
+- if (!fw) {
+- snd_printk(KERN_ERR SFX "Cannot load firmware, aborting\n");
++ if (!fw)
+ goto error;
- }
- tmp = *fw;
- line_mode = LINE_MODE_NONE;
+ chip->fw = fw;
+ if (!chip->disabled) {
--- a/sound/pci/korg1212/korg1212.c
+++ b/sound/pci/korg1212/korg1212.c
@@ -2346,7 +2346,6 @@ static int __devinit snd_korg1212_create
@@ -2863,14 +2829,14 @@ upstream submission.
(int)fw->size, (int)sizeof(hdsp->firmware_cache));
--- a/sound/soc/codecs/wm2000.c
+++ b/sound/soc/codecs/wm2000.c
-@@ -794,10 +794,8 @@ static int __devinit wm2000_i2c_probe(st
+@@ -834,10 +834,8 @@ static int __devinit wm2000_i2c_probe(st
}
ret = request_firmware(&fw, filename, &i2c->dev);
- if (ret != 0) {
- dev_err(&i2c->dev, "Failed to acquire ANC data: %d\n", ret);
+ if (ret != 0)
- goto out_regmap_exit;
+ goto err_supplies;
- }
/* Pre-cook the concatenation of the register address onto the image */
diff --git a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
index 6b4e515f219f..d72367ba907d 100644
--- a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
+++ b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
@@ -19,17 +19,15 @@ removed in later patches.
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
-@@ -255,7 +255,8 @@ static ssize_t firmware_loading_store(st
- fw_priv->nr_pages,
- 0, PAGE_KERNEL_RO);
- if (!fw_priv->fw->data) {
-- dev_err(dev, "%s: vmap() failed\n", __func__);
+@@ -500,14 +500,23 @@ static ssize_t firmware_loading_store(st
+ * is completed.
+ * */
+ fw_map_pages_buf(fw_buf);
++ if (!fw_buf->data)
+ dev_err(dev->parent, "%s: vmap() failed\n",
+ __func__);
- goto err;
- }
- /* Pages are now owned by 'struct firmware' */
-@@ -270,9 +271,14 @@ static ssize_t firmware_loading_store(st
+ complete_all(&fw_buf->completion);
+ break;
}
/* fallthrough */
default:
@@ -43,10 +41,11 @@ removed in later patches.
+ "firmware: agent aborted loading %s (not found?)\n",
+ fw_priv->fw_id);
+ /* fallthrough */
- err:
++ err:
fw_load_abort(fw_priv);
break;
-@@ -435,6 +441,9 @@ static void firmware_class_timeout(u_lon
+ }
+@@ -671,6 +680,9 @@ static void firmware_class_timeout(u_lon
{
struct firmware_priv *fw_priv = (struct firmware_priv *) data;
@@ -56,7 +55,7 @@ removed in later patches.
fw_load_abort(fw_priv);
}
-@@ -486,7 +495,8 @@ _request_firmware_prepare(const struct f
+@@ -798,7 +810,8 @@ _request_firmware_prepare(const struct f
}
if (fw_get_builtin_firmware(firmware, name)) {
@@ -66,7 +65,7 @@ removed in later patches.
return NULL;
}
-@@ -517,25 +527,29 @@ static int _request_firmware_load(struct
+@@ -874,25 +887,28 @@ static int _request_firmware_load(struct
retval = device_add(f_dev);
if (retval) {
@@ -94,30 +93,29 @@ removed in later patches.
if (uevent) {
dev_set_uevent_suppress(f_dev, false);
-- dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
-+ dev_dbg(f_dev->parent, "firmware: requesting %s\n",
-+ fw_priv->fw_id);
+- dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
++ dev_dbg(f_dev->parent, "firmware: requesting %s\n", buf->fw_id);
if (timeout != MAX_SCHEDULE_TIMEOUT)
mod_timer(&fw_priv->timeout,
round_jiffies_up(jiffies + timeout));
-@@ -549,8 +563,15 @@ static int _request_firmware_load(struct
- del_timer_sync(&fw_priv->timeout);
+@@ -906,8 +922,15 @@ static int _request_firmware_load(struct
+ handle_fw:
mutex_lock(&fw_lock);
-- if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status))
-+ if (test_bit(FW_STATUS_ABORT, &fw_priv->status)) {
+- if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
++ if (test_bit(FW_STATUS_ABORT, &buf->status)) {
+ /* failure has already been logged */
-+ retval = -ENOENT;
-+ } else if (!fw_priv->fw->size) {
+ retval = -ENOENT;
++ } else if (!buf->size) {
+ dev_err(f_dev->parent,
+ "firmware: agent loaded no data for %s (not found?)\n",
+ name);
- retval = -ENOENT;
++ retval = -ENOENT;
+ }
- fw_priv->fw = NULL;
- mutex_unlock(&fw_lock);
-@@ -601,6 +622,9 @@ request_firmware(const struct firmware *
+ /*
+ * add firmware name into devres list so that we can auto cache
+@@ -986,6 +1009,9 @@ request_firmware(const struct firmware *
}
if (ret)
_request_firmware_cleanup(firmware_p);
@@ -127,7 +125,7 @@ removed in later patches.
return ret;
}
-@@ -650,7 +674,7 @@ static void request_firmware_work_func(s
+@@ -1035,7 +1061,7 @@ static void request_firmware_work_func(s
ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
usermodehelper_read_unlock();
} else {
diff --git a/debian/patches/bugfix/all/speakup-lower-default-software-speech-rate.patch b/debian/patches/bugfix/all/speakup-lower-default-software-speech-rate.patch
deleted file mode 100644
index 014ee3daf8ed..000000000000
--- a/debian/patches/bugfix/all/speakup-lower-default-software-speech-rate.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Date: Sun, 26 Aug 2012 23:35:17 +0200
-Subject: speakup: lower default software speech rate
-
-commit cfd757010691eae4e17acc246f74e7622c3a2f05 upstream.
-
-Speech synthesis beginners need a low speech rate, and trained people
-want a high speech rate. A medium speech rate is thus actually not a
-good default for neither. Since trained people will typically know how
-to change the rate, better default for a low speech rate, which
-beginners can grasp and learn how to increase it afterwards
-
-This was agreed with users on the speakup mailing list.
-
-Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/staging/speakup/speakup_soft.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/staging/speakup/speakup_soft.c b/drivers/staging/speakup/speakup_soft.c
-index 42cdafe..2a67610 100644
---- a/drivers/staging/speakup/speakup_soft.c
-+++ b/drivers/staging/speakup/speakup_soft.c
-@@ -46,7 +46,7 @@ static int misc_registered;
- static struct var_t vars[] = {
- { CAPS_START, .u.s = {"\x01+3p" } },
- { CAPS_STOP, .u.s = {"\x01-3p" } },
-- { RATE, .u.n = {"\x01%ds", 5, 0, 9, 0, 0, NULL } },
-+ { RATE, .u.n = {"\x01%ds", 2, 0, 9, 0, 0, NULL } },
- { PITCH, .u.n = {"\x01%dp", 5, 0, 9, 0, 0, NULL } },
- { VOL, .u.n = {"\x01%dv", 5, 0, 9, 0, 0, NULL } },
- { TONE, .u.n = {"\x01%dx", 1, 0, 2, 0, 0, NULL } },
diff --git a/debian/patches/bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch b/debian/patches/bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch
deleted file mode 100644
index 3e5864856a7a..000000000000
--- a/debian/patches/bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From f6bc8c29383456b89ac1b6f1aa768d195670fb53 Mon Sep 17 00:00:00 2001
-From: Roger Quadros <rogerq@ti.com>
-Date: Mon, 29 Oct 2012 16:44:46 +0200
-Subject: [PATCH] usb: otg: Fix build errors if USB_MUSB_OMAP2PLUS is selected
- as module
-
-TWL4030_USB & TWL6030_USB must depend on USB_MUSB_OMAP2PLUS in Kconfig else
-we get build errors with
-
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_USB_MUSB_OMAP2PLUS=m
-CONFIG_TWL4030_USB=y
-CONFIG_TWL6030_USB=y
-
-LD init/built-in.o
-drivers/built-in.o: In function `twl4030_usb_irq':
-drivers/usb/otg/twl4030-usb.c:518: undefined reference to `omap_musb_mailbox'
-drivers/built-in.o: In function `twl4030_usb_phy_init':
-drivers/usb/otg/twl4030-usb.c:540: undefined reference to `omap_musb_mailbox'
-
-drivers/built-in.o: In function `twl6030_usb_irq':
-drivers/usb/otg/twl6030-usb.c:230: undefined reference to `omap_musb_mailbox'
-drivers/usb/otg/twl6030-usb.c:225: undefined reference to `omap_musb_mailbox'
-drivers/built-in.o: In function `twl6030_usbotg_irq':
-drivers/usb/otg/twl6030-usb.c:259: undefined reference to `omap_musb_mailbox'
-
-CC: Peter Meerwald <pmeerw@pmeerw.net>
-Signed-off-by: Roger Quadros <rogerq@ti.com>
-Signed-off-by: Felipe Balbi <balbi@ti.com>
----
- drivers/usb/otg/Kconfig | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
-index d8c8a42..6223062 100644
---- a/drivers/usb/otg/Kconfig
-+++ b/drivers/usb/otg/Kconfig
-@@ -58,7 +58,7 @@ config USB_ULPI_VIEWPORT
-
- config TWL4030_USB
- tristate "TWL4030 USB Transceiver Driver"
-- depends on TWL4030_CORE && REGULATOR_TWL4030
-+ depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
- select USB_OTG_UTILS
- help
- Enable this to support the USB OTG transceiver on TWL4030
-@@ -68,7 +68,7 @@ config TWL4030_USB
-
- config TWL6030_USB
- tristate "TWL6030 USB Transceiver Driver"
-- depends on TWL4030_CORE && OMAP_USB2
-+ depends on TWL4030_CORE && OMAP_USB2 && USB_MUSB_OMAP2PLUS
- select USB_OTG_UTILS
- help
- Enable this to support the USB OTG transceiver on TWL6030
---
-1.7.9.5
-
diff --git a/debian/patches/bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch b/debian/patches/bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch
deleted file mode 100644
index 1480b298c89d..000000000000
--- a/debian/patches/bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch
+++ /dev/null
@@ -1,256 +0,0 @@
-From 0e98de67bacba812b1b465b90a3f940d24401c27 Mon Sep 17 00:00:00 2001
-From: Kishon Vijay Abraham I <kishon@ti.com>
-Date: Thu, 6 Sep 2012 20:27:07 +0530
-Subject: [PATCH] usb: otg: make twl6030_usb as a comparator driver to
- omap_usb2
-
-All the PHY configuration other than VBUS, ID GND and OTG SRP are removed
-from twl6030. The phy configurations are taken care by the dedicated
-usb2 phy driver. So twl6030 is made as comparator driver for VBUS and
-ID detection.
-
-Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
-Signed-off-by: Felipe Balbi <balbi@ti.com>
----
- drivers/usb/otg/Kconfig | 2 +-
- drivers/usb/otg/twl6030-usb.c | 118 +++++++----------------------------------
- 2 files changed, 19 insertions(+), 101 deletions(-)
-
-diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
-index 13fd1ddf..d8c8a42 100644
---- a/drivers/usb/otg/Kconfig
-+++ b/drivers/usb/otg/Kconfig
-@@ -68,7 +68,7 @@ config TWL4030_USB
-
- config TWL6030_USB
- tristate "TWL6030 USB Transceiver Driver"
-- depends on TWL4030_CORE
-+ depends on TWL4030_CORE && OMAP_USB2
- select USB_OTG_UTILS
- help
- Enable this to support the USB OTG transceiver on TWL6030
-diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c
-index 6907d8d..32525bb 100644
---- a/drivers/usb/otg/twl6030-usb.c
-+++ b/drivers/usb/otg/twl6030-usb.c
-@@ -25,8 +25,9 @@
- #include <linux/interrupt.h>
- #include <linux/platform_device.h>
- #include <linux/io.h>
--#include <linux/usb/otg.h>
- #include <linux/usb/musb-omap.h>
-+#include <linux/usb/phy_companion.h>
-+#include <linux/usb/omap_usb.h>
- #include <linux/i2c/twl.h>
- #include <linux/regulator/consumer.h>
- #include <linux/err.h>
-@@ -87,7 +88,7 @@
- #define VBUS_DET BIT(2)
-
- struct twl6030_usb {
-- struct usb_phy phy;
-+ struct phy_companion comparator;
- struct device *dev;
-
- /* for vbus reporting with irqs disabled */
-@@ -107,7 +108,7 @@ struct twl6030_usb {
- unsigned long features;
- };
-
--#define phy_to_twl(x) container_of((x), struct twl6030_usb, phy)
-+#define comparator_to_twl(x) container_of((x), struct twl6030_usb, comparator)
-
- /*-------------------------------------------------------------------------*/
-
-@@ -137,50 +138,9 @@ static inline u8 twl6030_readb(struct twl6030_usb *twl, u8 module, u8 address)
- return ret;
- }
-
--static int twl6030_phy_init(struct usb_phy *x)
-+static int twl6030_start_srp(struct phy_companion *comparator)
- {
-- struct twl6030_usb *twl;
-- struct device *dev;
-- struct twl4030_usb_data *pdata;
--
-- twl = phy_to_twl(x);
-- dev = twl->dev;
-- pdata = dev->platform_data;
--
-- if (twl->linkstat == OMAP_MUSB_ID_GROUND)
-- pdata->phy_power(twl->dev, 1, 1);
-- else
-- pdata->phy_power(twl->dev, 0, 1);
--
-- return 0;
--}
--
--static void twl6030_phy_shutdown(struct usb_phy *x)
--{
-- struct twl6030_usb *twl;
-- struct device *dev;
-- struct twl4030_usb_data *pdata;
--
-- twl = phy_to_twl(x);
-- dev = twl->dev;
-- pdata = dev->platform_data;
-- pdata->phy_power(twl->dev, 0, 0);
--}
--
--static int twl6030_phy_suspend(struct usb_phy *x, int suspend)
--{
-- struct twl6030_usb *twl = phy_to_twl(x);
-- struct device *dev = twl->dev;
-- struct twl4030_usb_data *pdata = dev->platform_data;
--
-- pdata->phy_suspend(dev, suspend);
--
-- return 0;
--}
--
--static int twl6030_start_srp(struct usb_otg *otg)
--{
-- struct twl6030_usb *twl = phy_to_twl(otg->phy);
-+ struct twl6030_usb *twl = comparator_to_twl(comparator);
-
- twl6030_writeb(twl, TWL_MODULE_USB, 0x24, USB_VBUS_CTRL_SET);
- twl6030_writeb(twl, TWL_MODULE_USB, 0x84, USB_VBUS_CTRL_SET);
-@@ -313,23 +273,8 @@ static irqreturn_t twl6030_usbotg_irq(int irq, void *_twl)
- return IRQ_HANDLED;
- }
-
--static int twl6030_set_peripheral(struct usb_otg *otg,
-- struct usb_gadget *gadget)
-+static int twl6030_enable_irq(struct twl6030_usb *twl)
- {
-- if (!otg)
-- return -ENODEV;
--
-- otg->gadget = gadget;
-- if (!gadget)
-- otg->phy->state = OTG_STATE_UNDEFINED;
--
-- return 0;
--}
--
--static int twl6030_enable_irq(struct usb_phy *x)
--{
-- struct twl6030_usb *twl = phy_to_twl(x);
--
- twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET);
- twl6030_interrupt_unmask(0x05, REG_INT_MSK_LINE_C);
- twl6030_interrupt_unmask(0x05, REG_INT_MSK_STS_C);
-@@ -362,9 +307,9 @@ static void otg_set_vbus_work(struct work_struct *data)
- CHARGERUSB_CTRL1);
- }
-
--static int twl6030_set_vbus(struct usb_otg *otg, bool enabled)
-+static int twl6030_set_vbus(struct phy_companion *comparator, bool enabled)
- {
-- struct twl6030_usb *twl = phy_to_twl(otg->phy);
-+ struct twl6030_usb *twl = comparator_to_twl(comparator);
-
- twl->vbus_enable = enabled;
- schedule_work(&twl->set_vbus_work);
-@@ -372,23 +317,12 @@ static int twl6030_set_vbus(struct usb_otg *otg, bool enabled)
- return 0;
- }
-
--static int twl6030_set_host(struct usb_otg *otg, struct usb_bus *host)
--{
-- if (!otg)
-- return -ENODEV;
--
-- otg->host = host;
-- if (!host)
-- otg->phy->state = OTG_STATE_UNDEFINED;
-- return 0;
--}
--
- static int __devinit twl6030_usb_probe(struct platform_device *pdev)
- {
-+ u32 ret;
- struct twl6030_usb *twl;
- int status, err;
- struct twl4030_usb_data *pdata;
-- struct usb_otg *otg;
- struct device *dev = &pdev->dev;
- pdata = dev->platform_data;
-
-@@ -396,28 +330,20 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
- if (!twl)
- return -ENOMEM;
-
-- otg = devm_kzalloc(dev, sizeof *otg, GFP_KERNEL);
-- if (!otg)
-- return -ENOMEM;
--
- twl->dev = &pdev->dev;
- twl->irq1 = platform_get_irq(pdev, 0);
- twl->irq2 = platform_get_irq(pdev, 1);
- twl->features = pdata->features;
- twl->linkstat = OMAP_MUSB_UNKNOWN;
-
-- twl->phy.dev = twl->dev;
-- twl->phy.label = "twl6030";
-- twl->phy.otg = otg;
-- twl->phy.init = twl6030_phy_init;
-- twl->phy.shutdown = twl6030_phy_shutdown;
-- twl->phy.set_suspend = twl6030_phy_suspend;
-+ twl->comparator.set_vbus = twl6030_set_vbus;
-+ twl->comparator.start_srp = twl6030_start_srp;
-
-- otg->phy = &twl->phy;
-- otg->set_host = twl6030_set_host;
-- otg->set_peripheral = twl6030_set_peripheral;
-- otg->set_vbus = twl6030_set_vbus;
-- otg->start_srp = twl6030_start_srp;
-+ ret = omap_usb2_set_comparator(&twl->comparator);
-+ if (ret == -ENODEV) {
-+ dev_info(&pdev->dev, "phy not ready, deferring probe");
-+ return -EPROBE_DEFER;
-+ }
-
- /* init spinlock for workqueue */
- spin_lock_init(&twl->lock);
-@@ -427,7 +353,6 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
- dev_err(&pdev->dev, "ldo init failed\n");
- return err;
- }
-- usb_add_phy(&twl->phy, USB_PHY_TYPE_USB2);
-
- platform_set_drvdata(pdev, twl);
- if (device_create_file(&pdev->dev, &dev_attr_vbus))
-@@ -458,9 +383,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
- }
-
- twl->asleep = 0;
-- pdata->phy_init(dev);
-- twl6030_phy_suspend(&twl->phy, 0);
-- twl6030_enable_irq(&twl->phy);
-+ twl6030_enable_irq(twl);
- dev_info(&pdev->dev, "Initialized TWL6030 USB module\n");
-
- return 0;
-@@ -470,10 +393,6 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
- {
- struct twl6030_usb *twl = platform_get_drvdata(pdev);
-
-- struct twl4030_usb_data *pdata;
-- struct device *dev = &pdev->dev;
-- pdata = dev->platform_data;
--
- twl6030_interrupt_mask(TWL6030_USBOTG_INT_MASK,
- REG_INT_MSK_LINE_C);
- twl6030_interrupt_mask(TWL6030_USBOTG_INT_MASK,
-@@ -481,7 +400,6 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
- free_irq(twl->irq1, twl);
- free_irq(twl->irq2, twl);
- regulator_put(twl->usb3v3);
-- pdata->phy_exit(twl->dev);
- device_remove_file(twl->dev, &dev_attr_vbus);
- cancel_work_sync(&twl->set_vbus_work);
-
---
-1.7.9.5
-
diff --git a/debian/patches/bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch b/debian/patches/bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch
deleted file mode 100644
index b8b9aa613802..000000000000
--- a/debian/patches/bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch
+++ /dev/null
@@ -1,449 +0,0 @@
-From 657b306a7bdfca4ae1514b533a0e7c3c6d26dbc6 Mon Sep 17 00:00:00 2001
-From: Kishon Vijay Abraham I <kishon@ti.com>
-Date: Thu, 6 Sep 2012 20:27:06 +0530
-Subject: [PATCH] usb: phy: add a new driver for omap usb2 phy
-
-All phy related programming like enabling/disabling the clocks, powering
-on/off the phy is taken care of by this driver. It is also used for OTG
-related functionality like srp.
-
-This also includes device tree support for usb2 phy driver and
-the documentation with device tree binding information is updated.
-
-Currently writing to control module register is taken care in this
-driver which will be removed once the control module driver is in place.
-
-Cc: Felipe Balbi <balbi@ti.com>
-Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
-Signed-off-by: Felipe Balbi <balbi@ti.com>
----
- Documentation/devicetree/bindings/usb/usb-phy.txt | 17 ++
- drivers/usb/phy/Kconfig | 9 +
- drivers/usb/phy/Makefile | 1 +
- drivers/usb/phy/omap-usb2.c | 271 +++++++++++++++++++++
- include/linux/usb/omap_usb.h | 46 ++++
- include/linux/usb/phy_companion.h | 34 +++
- 6 files changed, 378 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/usb/usb-phy.txt
- create mode 100644 drivers/usb/phy/omap-usb2.c
- create mode 100644 include/linux/usb/omap_usb.h
- create mode 100644 include/linux/usb/phy_companion.h
-
-Index: experimental/Documentation/devicetree/bindings/usb/usb-phy.txt
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ experimental/Documentation/devicetree/bindings/usb/usb-phy.txt 2012-12-05 11:46:39.767567050 +0100
-@@ -0,0 +1,17 @@
-+USB PHY
-+
-+OMAP USB2 PHY
-+
-+Required properties:
-+ - compatible: Should be "ti,omap-usb2"
-+ - reg : Address and length of the register set for the device. Also
-+add the address of control module dev conf register until a driver for
-+control module is added
-+
-+This is usually a subnode of ocp2scp to which it is connected.
-+
-+usb2phy@4a0ad080 {
-+ compatible = "ti,omap-usb2";
-+ reg = <0x4a0ad080 0x58>,
-+ <0x4a002300 0x4>;
-+};
-Index: experimental/drivers/usb/phy/Kconfig
-===================================================================
---- experimental.orig/drivers/usb/phy/Kconfig 2012-12-03 20:39:49.000000000 +0100
-+++ experimental/drivers/usb/phy/Kconfig 2012-12-05 11:46:39.775567051 +0100
-@@ -4,6 +4,15 @@
- comment "USB Physical Layer drivers"
- depends on USB || USB_GADGET
-
-+config OMAP_USB2
-+ tristate "OMAP USB2 PHY Driver"
-+ select USB_OTG_UTILS
-+ help
-+ Enable this to support the transceiver that is part of SOC. This
-+ driver takes care of all the PHY functionality apart from comparator.
-+ The USB OTG controller communicates with the comparator using this
-+ driver.
-+
- config USB_ISP1301
- tristate "NXP ISP1301 USB transceiver support"
- depends on USB || USB_GADGET
-Index: experimental/drivers/usb/phy/Makefile
-===================================================================
---- experimental.orig/drivers/usb/phy/Makefile 2012-12-03 20:39:49.000000000 +0100
-+++ experimental/drivers/usb/phy/Makefile 2012-12-05 11:46:39.807567048 +0100
-@@ -4,4 +4,5 @@
-
- ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG
-
-+obj-$(CONFIG_OMAP_USB2) += omap-usb2.o
- obj-$(CONFIG_USB_ISP1301) += isp1301.o
-Index: experimental/drivers/usb/phy/omap-usb2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ experimental/drivers/usb/phy/omap-usb2.c 2012-12-05 11:46:39.819567049 +0100
-@@ -0,0 +1,271 @@
-+/*
-+ * omap-usb2.c - USB PHY, talking to musb controller in OMAP.
-+ *
-+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/of.h>
-+#include <linux/io.h>
-+#include <linux/usb/omap_usb.h>
-+#include <linux/usb/phy_companion.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-+#include <linux/pm_runtime.h>
-+#include <linux/delay.h>
-+
-+/**
-+ * omap_usb2_set_comparator - links the comparator present in the sytem with
-+ * this phy
-+ * @comparator - the companion phy(comparator) for this phy
-+ *
-+ * The phy companion driver should call this API passing the phy_companion
-+ * filled with set_vbus and start_srp to be used by usb phy.
-+ *
-+ * For use by phy companion driver
-+ */
-+int omap_usb2_set_comparator(struct phy_companion *comparator)
-+{
-+ struct omap_usb *phy;
-+ struct usb_phy *x = usb_get_phy(USB_PHY_TYPE_USB2);
-+
-+ if (IS_ERR(x))
-+ return -ENODEV;
-+
-+ phy = phy_to_omapusb(x);
-+ phy->comparator = comparator;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(omap_usb2_set_comparator);
-+
-+/**
-+ * omap_usb_phy_power - power on/off the phy using control module reg
-+ * @phy: struct omap_usb *
-+ * @on: 0 or 1, based on powering on or off the PHY
-+ *
-+ * XXX: Remove this function once control module driver gets merged
-+ */
-+static void omap_usb_phy_power(struct omap_usb *phy, int on)
-+{
-+ u32 val;
-+
-+ if (on) {
-+ val = readl(phy->control_dev);
-+ if (val & PHY_PD) {
-+ writel(~PHY_PD, phy->control_dev);
-+ /* XXX: add proper documentation for this delay */
-+ mdelay(200);
-+ }
-+ } else {
-+ writel(PHY_PD, phy->control_dev);
-+ }
-+}
-+
-+static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
-+{
-+ struct omap_usb *phy = phy_to_omapusb(otg->phy);
-+
-+ if (!phy->comparator)
-+ return -ENODEV;
-+
-+ return phy->comparator->set_vbus(phy->comparator, enabled);
-+}
-+
-+static int omap_usb_start_srp(struct usb_otg *otg)
-+{
-+ struct omap_usb *phy = phy_to_omapusb(otg->phy);
-+
-+ if (!phy->comparator)
-+ return -ENODEV;
-+
-+ return phy->comparator->start_srp(phy->comparator);
-+}
-+
-+static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
-+{
-+ struct usb_phy *phy = otg->phy;
-+
-+ otg->host = host;
-+ if (!host)
-+ phy->state = OTG_STATE_UNDEFINED;
-+
-+ return 0;
-+}
-+
-+static int omap_usb_set_peripheral(struct usb_otg *otg,
-+ struct usb_gadget *gadget)
-+{
-+ struct usb_phy *phy = otg->phy;
-+
-+ otg->gadget = gadget;
-+ if (!gadget)
-+ phy->state = OTG_STATE_UNDEFINED;
-+
-+ return 0;
-+}
-+
-+static int omap_usb2_suspend(struct usb_phy *x, int suspend)
-+{
-+ u32 ret;
-+ struct omap_usb *phy = phy_to_omapusb(x);
-+
-+ if (suspend && !phy->is_suspended) {
-+ omap_usb_phy_power(phy, 0);
-+ pm_runtime_put_sync(phy->dev);
-+ phy->is_suspended = 1;
-+ } else if (!suspend && phy->is_suspended) {
-+ ret = pm_runtime_get_sync(phy->dev);
-+ if (ret < 0) {
-+ dev_err(phy->dev, "get_sync failed with err %d\n",
-+ ret);
-+ return ret;
-+ }
-+ omap_usb_phy_power(phy, 1);
-+ phy->is_suspended = 0;
-+ }
-+
-+ return 0;
-+}
-+
-+static int __devinit omap_usb2_probe(struct platform_device *pdev)
-+{
-+ struct omap_usb *phy;
-+ struct usb_otg *otg;
-+ struct resource *res;
-+
-+ phy = devm_kzalloc(&pdev->dev, sizeof(*phy), GFP_KERNEL);
-+ if (!phy) {
-+ dev_err(&pdev->dev, "unable to allocate memory for USB2 PHY\n");
-+ return -ENOMEM;
-+ }
-+
-+ otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL);
-+ if (!otg) {
-+ dev_err(&pdev->dev, "unable to allocate memory for USB OTG\n");
-+ return -ENOMEM;
-+ }
-+
-+ phy->dev = &pdev->dev;
-+
-+ phy->phy.dev = phy->dev;
-+ phy->phy.label = "omap-usb2";
-+ phy->phy.set_suspend = omap_usb2_suspend;
-+ phy->phy.otg = otg;
-+
-+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-+
-+ phy->control_dev = devm_request_and_ioremap(&pdev->dev, res);
-+ if (phy->control_dev == NULL) {
-+ dev_err(&pdev->dev, "Failed to obtain io memory\n");
-+ return -ENXIO;
-+ }
-+
-+ phy->is_suspended = 1;
-+ omap_usb_phy_power(phy, 0);
-+
-+ otg->set_host = omap_usb_set_host;
-+ otg->set_peripheral = omap_usb_set_peripheral;
-+ otg->set_vbus = omap_usb_set_vbus;
-+ otg->start_srp = omap_usb_start_srp;
-+ otg->phy = &phy->phy;
-+
-+ phy->wkupclk = devm_clk_get(phy->dev, "usb_phy_cm_clk32k");
-+ if (IS_ERR(phy->wkupclk)) {
-+ dev_err(&pdev->dev, "unable to get usb_phy_cm_clk32k\n");
-+ return PTR_ERR(phy->wkupclk);
-+ }
-+ clk_prepare(phy->wkupclk);
-+
-+ usb_add_phy(&phy->phy, USB_PHY_TYPE_USB2);
-+
-+ platform_set_drvdata(pdev, phy);
-+
-+ pm_runtime_enable(phy->dev);
-+
-+ return 0;
-+}
-+
-+static int __devexit omap_usb2_remove(struct platform_device *pdev)
-+{
-+ struct omap_usb *phy = platform_get_drvdata(pdev);
-+
-+ clk_unprepare(phy->wkupclk);
-+ usb_remove_phy(&phy->phy);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM_RUNTIME
-+
-+static int omap_usb2_runtime_suspend(struct device *dev)
-+{
-+ struct platform_device *pdev = to_platform_device(dev);
-+ struct omap_usb *phy = platform_get_drvdata(pdev);
-+
-+ clk_disable(phy->wkupclk);
-+
-+ return 0;
-+}
-+
-+static int omap_usb2_runtime_resume(struct device *dev)
-+{
-+ u32 ret = 0;
-+ struct platform_device *pdev = to_platform_device(dev);
-+ struct omap_usb *phy = platform_get_drvdata(pdev);
-+
-+ ret = clk_enable(phy->wkupclk);
-+ if (ret < 0)
-+ dev_err(phy->dev, "Failed to enable wkupclk %d\n", ret);
-+
-+ return ret;
-+}
-+
-+static const struct dev_pm_ops omap_usb2_pm_ops = {
-+ SET_RUNTIME_PM_OPS(omap_usb2_runtime_suspend, omap_usb2_runtime_resume,
-+ NULL)
-+};
-+
-+#define DEV_PM_OPS (&omap_usb2_pm_ops)
-+#else
-+#define DEV_PM_OPS NULL
-+#endif
-+
-+#ifdef CONFIG_OF
-+static const struct of_device_id omap_usb2_id_table[] = {
-+ { .compatible = "ti,omap-usb2" },
-+ {}
-+};
-+MODULE_DEVICE_TABLE(of, omap_usb2_id_table);
-+#endif
-+
-+static struct platform_driver omap_usb2_driver = {
-+ .probe = omap_usb2_probe,
-+ .remove = __devexit_p(omap_usb2_remove),
-+ .driver = {
-+ .name = "omap-usb2",
-+ .owner = THIS_MODULE,
-+ .pm = DEV_PM_OPS,
-+ .of_match_table = of_match_ptr(omap_usb2_id_table),
-+ },
-+};
-+
-+module_platform_driver(omap_usb2_driver);
-+
-+MODULE_ALIAS("platform: omap_usb2");
-+MODULE_AUTHOR("Texas Instruments Inc.");
-+MODULE_DESCRIPTION("OMAP USB2 phy driver");
-+MODULE_LICENSE("GPL v2");
-Index: experimental/include/linux/usb/omap_usb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ experimental/include/linux/usb/omap_usb.h 2012-12-05 11:46:39.827567048 +0100
-@@ -0,0 +1,46 @@
-+/*
-+ * omap_usb.h -- omap usb2 phy header file
-+ *
-+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ */
-+
-+#ifndef __DRIVERS_OMAP_USB2_H
-+#define __DRIVERS_OMAP_USB2_H
-+
-+#include <linux/usb/otg.h>
-+
-+struct omap_usb {
-+ struct usb_phy phy;
-+ struct phy_companion *comparator;
-+ struct device *dev;
-+ u32 __iomem *control_dev;
-+ struct clk *wkupclk;
-+ u8 is_suspended:1;
-+};
-+
-+#define PHY_PD 0x1
-+
-+#define phy_to_omapusb(x) container_of((x), struct omap_usb, phy)
-+
-+#if defined(CONFIG_OMAP_USB2) || defined(CONFIG_OMAP_USB2_MODULE)
-+extern int omap_usb2_set_comparator(struct phy_companion *comparator);
-+#else
-+static inline int omap_usb2_set_comparator(struct phy_companion *comparator)
-+{
-+ return -ENODEV;
-+}
-+#endif
-+
-+#endif /* __DRIVERS_OMAP_USB_H */
-Index: experimental/include/linux/usb/phy_companion.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ experimental/include/linux/usb/phy_companion.h 2012-12-05 11:46:39.839567047 +0100
-@@ -0,0 +1,34 @@
-+/*
-+ * phy-companion.h -- phy companion to indicate the comparator part of PHY
-+ *
-+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ */
-+
-+#ifndef __DRIVERS_PHY_COMPANION_H
-+#define __DRIVERS_PHY_COMPANION_H
-+
-+#include <linux/usb/otg.h>
-+
-+/* phy_companion to take care of VBUS, ID and srp capabilities */
-+struct phy_companion {
-+
-+ /* effective for A-peripheral, ignored for B devices */
-+ int (*set_vbus)(struct phy_companion *x, bool enabled);
-+
-+ /* for B devices only: start session with A-Host */
-+ int (*start_srp)(struct phy_companion *x);
-+};
-+
-+#endif /* __DRIVERS_PHY_COMPANION_H */
diff --git a/debian/patches/bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch b/debian/patches/bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch
deleted file mode 100644
index ce71c979af66..000000000000
--- a/debian/patches/bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From ef1c2096fcf390f2f6a6a835d9d26105e82abda5 Mon Sep 17 00:00:00 2001
-From: Rob Herring <rob.herring@calxeda.com>
-Date: Wed, 15 Aug 2012 16:28:36 +0100
-Subject: [PATCH] ARM: 7492/1: add strstr declaration for decompressors
-
-With the generic unaligned.h, more kernel headers get pulled in including
-dynamic_debug.h which needs strstr. As it is not really used, we only need
-a declaration here.
-
-Signed-off-by: Rob Herring <rob.herring@calxeda.com>
-Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Reviewed-by: Arnd Bergmann <arnd@arndb.de>
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
----
- arch/arm/boot/compressed/decompress.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
-index f41b38c..9deb56a 100644
---- a/arch/arm/boot/compressed/decompress.c
-+++ b/arch/arm/boot/compressed/decompress.c
-@@ -32,6 +32,9 @@ extern void error(char *);
- # define Tracecv(c,x)
- #endif
-
-+/* Not needed, but used in some headers pulled in by decompressors */
-+extern char * strstr(const char * s1, const char *s2);
-+
- #ifdef CONFIG_KERNEL_GZIP
- #include "../../../../lib/decompress_inflate.c"
- #endif
---
-1.8.0
-
diff --git a/debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch b/debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch
index ad5c4dd2a890..036032c7c00d 100644
--- a/debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch
+++ b/debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch
@@ -1,7 +1,8 @@
-From 65cb587d7058441c8c910e8766ee86538c7274d8 Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <arnd@arndb.de>
Date: Fri, 28 Sep 2012 22:36:00 +0100
-Subject: [PATCH] staging/iio/lis3l02dq: fix building without irq_to_gpio
+Subject: staging/iio/lis3l02dq: fix building without irq_to_gpio
+
+commit 65cb587d7058441c8c910e8766ee86538c7274d8 upstream.
The driver has not been building for some time after the
irq_to_gpio function has been removed from the kernel.
@@ -27,10 +28,10 @@ Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
-Index: experimental/drivers/staging/iio/accel/lis3l02dq.h
-===================================================================
---- experimental.orig/drivers/staging/iio/accel/lis3l02dq.h 2012-12-03 20:39:49.000000000 +0100
-+++ experimental/drivers/staging/iio/accel/lis3l02dq.h 2012-12-05 11:32:50.159603549 +0100
+diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
+index f9bcd41..2bac722 100644
+--- a/drivers/staging/iio/accel/lis3l02dq.h
++++ b/drivers/staging/iio/accel/lis3l02dq.h
@@ -158,6 +158,7 @@ struct lis3l02dq_state {
struct spi_device *us;
struct iio_trigger *trig;
@@ -39,10 +40,10 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq.h
bool trigger_on;
u8 tx[LIS3L02DQ_MAX_RX] ____cacheline_aligned;
-Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
-===================================================================
---- experimental.orig/drivers/staging/iio/accel/lis3l02dq_core.c 2012-12-03 20:39:49.000000000 +0100
-+++ experimental/drivers/staging/iio/accel/lis3l02dq_core.c 2012-12-05 11:32:50.159603549 +0100
+diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
+index 21b0469..d13c7e9 100644
+--- a/drivers/staging/iio/accel/lis3l02dq_core.c
++++ b/drivers/staging/iio/accel/lis3l02dq_core.c
@@ -15,6 +15,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
@@ -51,7 +52,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
#include <linux/mutex.h>
#include <linux/device.h>
#include <linux/kernel.h>
-@@ -690,6 +691,7 @@ static int __devinit lis3l02dq_probe(str
+@@ -690,6 +691,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
spi_set_drvdata(spi, indio_dev);
st->us = spi;
@@ -59,7 +60,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
mutex_init(&st->buf_lock);
indio_dev->name = spi->dev.driver->name;
indio_dev->dev.parent = &spi->dev;
-@@ -711,7 +713,7 @@ static int __devinit lis3l02dq_probe(str
+@@ -711,7 +713,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
goto error_unreg_buffer_funcs;
}
@@ -68,7 +69,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
ret = request_threaded_irq(st->us->irq,
&lis3l02dq_th,
&lis3l02dq_event_handler,
-@@ -738,10 +740,10 @@ static int __devinit lis3l02dq_probe(str
+@@ -738,10 +740,10 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
return 0;
error_remove_trigger:
@@ -81,22 +82,22 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
free_irq(st->us->irq, indio_dev);
error_uninitialize_buffer:
iio_buffer_unregister(indio_dev);
-@@ -796,7 +798,7 @@ static int lis3l02dq_remove(struct spi_d
- if (ret)
- goto err_ret;
+@@ -790,7 +792,7 @@ static int __devexit lis3l02dq_remove(struct spi_device *spi)
+ lis3l02dq_disable_all_events(indio_dev);
+ lis3l02dq_stop_device(indio_dev);
- if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
+ if (spi->irq)
free_irq(st->us->irq, indio_dev);
lis3l02dq_remove_trigger(indio_dev);
-Index: experimental/drivers/staging/iio/accel/lis3l02dq_ring.c
-===================================================================
---- experimental.orig/drivers/staging/iio/accel/lis3l02dq_ring.c 2012-12-03 20:39:49.000000000 +0100
-+++ experimental/drivers/staging/iio/accel/lis3l02dq_ring.c 2012-12-05 11:32:50.183603549 +0100
-@@ -264,7 +264,7 @@ static int lis3l02dq_trig_try_reen(struc
- /* If gpio still high (or high again) */
- /* In theory possible we will need to do this several times */
+diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
+index fa4190d..13c0b4b 100644
+--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
++++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
+@@ -263,7 +263,7 @@ static int lis3l02dq_trig_try_reen(struct iio_trigger *trig)
+ /* If gpio still high (or high again)
+ * In theory possible we will need to do this several times */
for (i = 0; i < 5; i++)
- if (gpio_get_value(irq_to_gpio(st->us->irq)))
+ if (gpio_get_value(st->gpio))
diff --git a/debian/patches/bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch b/debian/patches/bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
deleted file mode 100644
index 35dd667ceebf..000000000000
--- a/debian/patches/bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From: Ben Hutchings <ben@decadent.org.uk>
-Date: Thu, 7 Jun 2012 04:40:34 +0100
-Subject: [PATCH] IA64: Export <asm/cmpxchg.h> to userland
-
-Parts of <asm/intrinsics.h> were moved to <asm/cmpxchg.h>, and the
-former now includes the latter. The former is exported to userland
-so the latter must be too.
-
-Cc: stable@vger.kernel.org # v3.4
-Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
----
- arch/ia64/include/asm/Kbuild | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild
-index 241d1c5..c929a53 100644
---- a/arch/ia64/include/asm/Kbuild
-+++ b/arch/ia64/include/asm/Kbuild
-@@ -6,6 +6,7 @@ header-y += gcc_intrin.h
- header-y += ia64regs.h
- header-y += intel_intrin.h
- header-y += intrinsics.h
-+header-y += cmpxchg.h
- header-y += perfmon.h
- header-y += perfmon_default_smpl.h
- header-y += ptrace_offsets.h
---
-1.7.10
-
diff --git a/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch b/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
index a87a45a6057f..80341eee05ad 100644
--- a/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
+++ b/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
@@ -15,7 +15,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
--- a/drivers/gpu/drm/nouveau/Kconfig
+++ b/drivers/gpu/drm/nouveau/Kconfig
-@@ -11,8 +11,8 @@
+@@ -11,8 +11,8 @@ config DRM_NOUVEAU
select FRAMEBUFFER_CONSOLE if !EXPERT
select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT
select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT
@@ -28,21 +28,22 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Choose this option for open-source nVidia support.
--- a/drivers/gpu/drm/nouveau/Makefile
+++ b/drivers/gpu/drm/nouveau/Makefile
-@@ -42,6 +42,8 @@
- nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o
+@@ -186,7 +186,9 @@ nouveau-y += nouveau_mem.o
+
+ # other random bits
nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
- nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
+ifdef CONFIG_X86
nouveau-$(CONFIG_ACPI) += nouveau_acpi.o
+endif
+ nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o
---- a/drivers/gpu/drm/nouveau/nouveau_drv.h
-+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
-@@ -1095,7 +1095,7 @@
+--- a/drivers/gpu/drm/nouveau/nouveau_acpi.h
++++ b/drivers/gpu/drm/nouveau/nouveau_acpi.h
+@@ -3,7 +3,7 @@
- /* nouveau_acpi.c */
#define ROM_BIOS_PAGE 4096
+
-#if defined(CONFIG_ACPI)
+#if defined(CONFIG_ACPI) && defined(CONFIG_X86)
void nouveau_register_dsm_handler(void);
diff --git a/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch b/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch
index 83be8481aa87..24516196da79 100644
--- a/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch
+++ b/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch
@@ -5,8 +5,8 @@ Subject: [PATCH 2/2] cgroups: Document the Debian memory resource controller
---
--- a/Documentation/cgroups/memory.txt
+++ b/Documentation/cgroups/memory.txt
-@@ -47,6 +47,10 @@ Features:
- Kernel memory support is work in progress, and the current version provides
+@@ -46,6 +46,10 @@ Features:
+ Kernel memory support is a work in progress, and the current version provides
basically functionality. (See Section 2.7)
+NOTE: In Debian kernel packages, the memory resource controller is
diff --git a/debian/patches/debian/debugfs-set-default-mode-to-700.patch b/debian/patches/debian/debugfs-set-default-mode-to-700.patch
deleted file mode 100644
index 82bae994713f..000000000000
--- a/debian/patches/debian/debugfs-set-default-mode-to-700.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From: Ben Hutchings <ben@decadent.org.uk>
-Subject: debugfs: Set default mode to 700
-Bug-Debian: http://bugs.debian.org/681418
-
-As discussed here
-<http://lists.linux-foundation.org/pipermail/ksummit-2012-discuss/2012-July/000891.html>.
-
-Mounting of debugfs is a significant security liability, but there are
-applications that depend on some interfaces based on debugfs and they
-(or their packages) will mount it automatically anyway.
-
-Setting the default mode for the debugfs root to 700 (accessible
-to root only) should leave it functional, since most such applications
-will require root anyway, and users can override it to relax
-permissions if they really don't care about the security problems.
-
---- a/fs/debugfs/inode.c
-+++ b/fs/debugfs/inode.c
-@@ -28,7 +28,7 @@
- #include <linux/magic.h>
- #include <linux/slab.h>
-
--#define DEBUGFS_DEFAULT_MODE 0755
-+#define DEBUGFS_DEFAULT_MODE 0700
-
- static struct vfsmount *debugfs_mount;
- static int debugfs_mount_count;
diff --git a/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch b/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
index 4b80ad2eaf82..47bab0b1c605 100644
--- a/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
+++ b/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
@@ -1,24 +1,14 @@
-From 2a7d7ecc9fdcdaa0b82865078fd2a47e3b46da1b Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Mon, 17 Aug 2009 02:45:41 +0100
-Subject: [PATCH 1/2] dvb-usb-af9005: mark as broken
+Subject: dvb-usb-af9005: mark as broken
----
- drivers/media/dvb/dvb-usb/Kconfig | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
-index 496c1a3..868e1cb 100644
---- a/drivers/media/dvb/dvb-usb/Kconfig
-+++ b/drivers/media/dvb/dvb-usb/Kconfig
-@@ -238,6 +238,7 @@ config DVB_USB_OPERA1
+--- a/drivers/media/usb/dvb-usb/Kconfig
++++ b/drivers/media/usb/dvb-usb/Kconfig
+@@ -227,6 +227,7 @@ config DVB_USB_OPERA1
config DVB_USB_AF9005
tristate "Afatech AF9005 DVB-T USB1.1 support"
+ depends on BROKEN
- depends on DVB_USB && EXPERIMENTAL
- select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
- select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
---
-1.6.3.3
-
+ depends on DVB_USB
+ select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
+ select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
diff --git a/debian/patches/debian/dfsg/vs6624-disable.patch b/debian/patches/debian/dfsg/vs6624-disable.patch
index e36b6d127527..08dba87beda4 100644
--- a/debian/patches/debian/dfsg/vs6624-disable.patch
+++ b/debian/patches/debian/dfsg/vs6624-disable.patch
@@ -1,8 +1,14 @@
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index ce1e7ba..4bd5a0c 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -497,2 +497,3 @@ config VIDEO_OV7670
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 27 May 2012 01:56:58 +0100
+Subject: vs6624: mark as broken
+
+--- a/drivers/media/i2c/Kconfig
++++ b/drivers/media/i2c/Kconfig
+@@ -422,6 +422,7 @@ config VIDEO_OV7670
+ controller.
+
config VIDEO_VS6624
+ depends on BROKEN
tristate "ST VS6624 sensor support"
+ depends on VIDEO_V4L2 && I2C
+ depends on MEDIA_CAMERA_SUPPORT
diff --git a/debian/patches/debian/kernelvariables.patch b/debian/patches/debian/kernelvariables.patch
index d5afd5ce5019..18eebe1e467e 100644
--- a/debian/patches/debian/kernelvariables.patch
+++ b/debian/patches/debian/kernelvariables.patch
@@ -99,5 +99,5 @@ use of $(ARCH) needs to be moved after this.
+ hdr-arch := m68k
+endif
- # Use LINUXINCLUDE when you must reference the include/ directory.
- # Needed to be compatible with the O= option
+ # Use USERINCLUDE when you must reference the UAPI directories only.
+ USERINCLUDE := \
diff --git a/debian/patches/debian/radeon-no-modeset-without-firmware.patch b/debian/patches/debian/radeon-no-modeset-without-firmware.patch
index fde0a05b861b..d55d954cfe43 100644
--- a/debian/patches/debian/radeon-no-modeset-without-firmware.patch
+++ b/debian/patches/debian/radeon-no-modeset-without-firmware.patch
@@ -33,8 +33,8 @@ to both DRM and radeon.
---
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
-@@ -37,6 +37,8 @@
- #include "drm_pciids.h"
+@@ -36,6 +36,8 @@
+ #include <drm/drm_pciids.h>
#include <linux/console.h>
#include <linux/module.h>
+#include <linux/namei.h>
@@ -42,7 +42,7 @@ to both DRM and radeon.
/*
-@@ -378,6 +380,24 @@ static struct pci_driver radeon_kms_pci_
+@@ -411,6 +413,24 @@ static struct pci_driver radeon_kms_pci_
.resume = radeon_pci_resume,
};
@@ -67,7 +67,7 @@ to both DRM and radeon.
static int __init radeon_init(void)
{
driver = &driver_old;
-@@ -402,6 +422,13 @@ static int __init radeon_init(void)
+@@ -435,6 +455,13 @@ static int __init radeon_init(void)
radeon_modeset = 0;
#endif
}
diff --git a/debian/patches/debian/version.patch b/debian/patches/debian/version.patch
index 3c350dd22038..bdd2f2ad8880 100644
--- a/debian/patches/debian/version.patch
+++ b/debian/patches/debian/version.patch
@@ -8,16 +8,16 @@ are set.
--- a/Makefile
+++ b/Makefile
-@@ -806,7 +806,7 @@ endif
+@@ -822,7 +822,7 @@ endif
prepare2: prepare3 outputmakefile asm-generic
- prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
+ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
- include/config/auto.conf
+ include/config/auto.conf include/generated/package.h
$(cmd_crmodverdir)
archprepare: archheaders archscripts prepare1 scripts_basic
-@@ -838,12 +838,25 @@ define filechk_version.h
+@@ -854,12 +854,25 @@ define filechk_version.h
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
endef
@@ -31,7 +31,7 @@ are set.
+endef
+endif
+
- include/linux/version.h: $(srctree)/Makefile FORCE
+ $(version_h): $(srctree)/Makefile FORCE
$(call filechk,version.h)
include/generated/utsrelease.h: include/config/kernel.release FORCE
@@ -53,7 +53,7 @@ are set.
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/atomic.h>
-@@ -164,11 +165,12 @@ static void show_last_breaking_event(str
+@@ -181,11 +182,12 @@ static void show_last_breaking_event(str
*/
void dump_stack(void)
{
@@ -68,10 +68,10 @@ are set.
printk("Process %s (pid: %d, task: %p, ksp: %p)\n",
current->comm, current->pid, current,
(void *) current->thread.ksp);
-@@ -215,11 +217,12 @@ void show_registers(struct pt_regs *regs
+@@ -231,11 +233,12 @@ void show_registers(struct pt_regs *regs
+
void show_regs(struct pt_regs *regs)
{
- print_modules();
- printk("CPU: %d %s %s %.*s\n",
+ printk("CPU: %d %s %s %.*s%s\n",
task_thread_info(current)->cpu, print_tainted(),
@@ -92,7 +92,7 @@ are set.
+#include <generated/package.h>
#include <asm/current.h>
#include <asm/ptrace.h>
- #include "sysrq.h"
+ #include <asm/sysrq.h>
@@ -16,8 +17,9 @@ void __show_regs(struct pt_regs *regs)
{
printk("\n");
@@ -115,7 +115,7 @@ are set.
#include <asm/cpu.h>
#include <asm/apic.h>
#include <asm/syscalls.h>
-@@ -147,11 +148,12 @@ void show_regs_common(void)
+@@ -135,11 +136,12 @@ void show_regs_common(void)
/* Board Name is optional */
board = dmi_get_system_info(DMI_BOARD_NAME);
@@ -178,14 +178,14 @@ are set.
regs->ar_unat, regs->ar_pfs, regs->ar_rsc);
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
-@@ -31,6 +31,7 @@
- #include <linux/random.h>
+@@ -32,6 +32,7 @@
#include <linux/hw_breakpoint.h>
#include <linux/cpuidle.h>
+ #include <linux/leds.h>
+#include <generated/package.h>
#include <asm/cacheflush.h>
- #include <asm/leds.h>
+ #include <asm/processor.h>
@@ -278,11 +279,12 @@ void __show_regs(struct pt_regs *regs)
unsigned long flags;
char buf[64];
@@ -211,7 +211,7 @@ are set.
#include <asm/pgtable.h>
#include <asm/uaccess.h>
-@@ -644,8 +645,9 @@ void show_regs(struct pt_regs * regs)
+@@ -643,8 +644,9 @@ void show_regs(struct pt_regs * regs)
printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
regs->nip, regs->link, regs->ctr);
diff --git a/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch b/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch
index 8e59da2f9cf4..3bce0c009a60 100644
--- a/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch
+++ b/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch
@@ -18,8 +18,6 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
scripts/kconfig/lkc_proto.h | 1 +
4 files changed, 44 insertions(+), 10 deletions(-)
-diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
-index f208f90..ffaa787 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -364,7 +364,6 @@ static void conf(struct menu *menu)
@@ -27,10 +25,10 @@ index f208f90..ffaa787 100644
case P_MENU:
if ((input_mode == silentoldconfig ||
- input_mode == listnewconfig ||
- input_mode == oldnoconfig) &&
+ input_mode == olddefconfig) &&
rootEntry != menu) {
check_conf(menu);
-@@ -425,11 +424,7 @@ static void check_conf(struct menu *menu)
+@@ -425,11 +424,7 @@ static void check_conf(struct menu *menu
if (sym && !sym_has_value(sym)) {
if (sym_is_changable(sym) ||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
@@ -38,12 +36,12 @@ index f208f90..ffaa787 100644
- if (sym->name && !sym_is_choice_value(sym)) {
- printf("%s%s\n", CONFIG_, sym->name);
- }
-- } else if (input_mode != oldnoconfig) {
-+ if (input_mode != oldnoconfig) {
+- } else if (input_mode != olddefconfig) {
++ if (input_mode != olddefconfig) {
if (!conf_cnt++)
printf(_("*\n* Restart config...\n*\n"));
rootEntry = menu_get_parent_menu(menu);
-@@ -442,6 +437,30 @@ static void check_conf(struct menu *menu)
+@@ -442,6 +437,30 @@ static void check_conf(struct menu *menu
check_conf(child);
}
@@ -74,7 +72,7 @@ index f208f90..ffaa787 100644
static struct option long_opts[] = {
{"oldaskconfig", no_argument, NULL, oldaskconfig},
{"oldconfig", no_argument, NULL, oldconfig},
-@@ -482,6 +501,7 @@ int main(int ac, char **av)
+@@ -489,6 +508,7 @@ int main(int ac, char **av)
const char *progname = av[0];
int opt;
const char *name, *defconfig_file = NULL /* gcc uninit */;
@@ -82,12 +80,12 @@ index f208f90..ffaa787 100644
struct stat tmpstat;
setlocale(LC_ALL, "");
-@@ -634,16 +654,18 @@ int main(int ac, char **av)
+@@ -651,16 +671,18 @@ int main(int ac, char **av)
input_mode = silentoldconfig;
/* fall through */
case oldconfig:
- case listnewconfig:
- case oldnoconfig:
+ case olddefconfig:
case silentoldconfig:
/* Update until a loop caused no more changes */
do {
@@ -95,8 +93,8 @@ index f208f90..ffaa787 100644
check_conf(&rootmenu);
- } while (conf_cnt &&
- (input_mode != listnewconfig &&
-- input_mode != oldnoconfig));
-+ } while (conf_cnt && input_mode != oldnoconfig);
+- input_mode != olddefconfig));
++ } while (conf_cnt && input_mode != olddefconfig);
+ break;
+ case listnewconfig:
+ conf_set_all_new_symbols(def_default);
@@ -105,11 +103,9 @@ index f208f90..ffaa787 100644
break;
}
-diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
-index 59b667c..d2be252 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
-@@ -695,6 +695,14 @@ next_menu:
+@@ -727,6 +727,14 @@ next_menu:
return 0;
}
@@ -124,7 +120,7 @@ index 59b667c..d2be252 100644
int conf_write(const char *name)
{
FILE *out;
-@@ -1079,6 +1087,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
+@@ -1111,6 +1119,7 @@ void conf_set_all_new_symbols(enum conf_
for_all_symbols(i, sym) {
if (sym_has_value(sym))
continue;
@@ -132,11 +128,9 @@ index 59b667c..d2be252 100644
switch (sym_get_type(sym)) {
case S_BOOLEAN:
case S_TRISTATE:
-diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
-index 80fce57..0db77f3 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
-@@ -104,6 +104,8 @@ struct symbol {
+@@ -106,6 +106,8 @@ struct symbol {
#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
@@ -145,11 +139,9 @@ index 80fce57..0db77f3 100644
#define SYMBOL_MAXLENGTH 256
#define SYMBOL_HASHSIZE 9973
-diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
-index 47fe9c3..dd0024a 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
-@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name, int));
+@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name
P(conf_write_defconfig,int,(const char *name));
P(conf_write,int,(const char *name));
P(conf_write_autoconf,int,(void));
@@ -157,6 +149,3 @@ index 47fe9c3..dd0024a 100644
P(conf_get_changed,bool,(void));
P(conf_set_changed_callback, void,(void (*fn)(void)));
P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
---
-1.7.5.4
-
diff --git a/debian/patches/features/all/aufs3/aufs3-add.patch b/debian/patches/features/all/aufs3/aufs3-add.patch
index 2b19a957cd4b..1e9879b56a52 100644
--- a/debian/patches/features/all/aufs3/aufs3-add.patch
+++ b/debian/patches/features/all/aufs3/aufs3-add.patch
@@ -313,8 +313,8 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_H__ */
--- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/branch.c 2012-10-29 03:30:14.227048051 +0000
-@@ -0,0 +1,1169 @@
++++ b/fs/aufs/branch.c 2012-12-16 14:11:13.354479811 +0000
+@@ -0,0 +1,1172 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -373,7 +373,10 @@
+ else
+ break;
+
++ /* recursive lock, s_umount of branch's */
++ lockdep_off();
+ mntput(br->br_mnt);
++ lockdep_on();
+ kfree(wbr);
+ kfree(br);
+}
@@ -949,7 +952,7 @@
+ continue;
+
+ /* AuDbgInode(i); */
-+ if (au_iigen(i) == sigen)
++ if (au_iigen(i, NULL) == sigen)
+ ii_read_lock_child(i);
+ else {
+ ii_write_lock_child(i);
@@ -1759,7 +1762,7 @@
+
+-include ${srctree}/${src}/conf_priv.mk
--- a/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/cpup.c 2012-10-29 03:30:14.227048051 +0000
++++ b/fs/aufs/cpup.c 2012-12-16 14:11:13.358479829 +0000
@@ -0,0 +1,1085 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -2185,7 +2188,7 @@
+ goto out;
+
+ err = -ENOMEM;
-+ sym.k = __getname_gfp(GFP_NOFS);
++ sym.k = (void *)__get_free_page(GFP_NOFS);
+ if (unlikely(!sym.k))
+ goto out;
+
@@ -2200,7 +2203,7 @@
+ sym.k[symlen] = 0;
+ err = vfsub_symlink(h_dir, h_path, sym.k);
+ }
-+ __putname(sym.k);
++ free_page((unsigned long)sym.k);
+
+out:
+ return err;
@@ -3663,7 +3666,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DCSUB_H__ */
--- a/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/debug.c 2012-10-29 03:30:14.227048051 +0000
++++ b/fs/aufs/debug.c 2012-12-16 14:11:13.358479829 +0000
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -3791,7 +3794,7 @@
+ if (!iinfo)
+ return;
+ dpri("i-1: bstart %d, bend %d, gen %d\n",
-+ iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode));
++ iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode, NULL));
+ if (iinfo->ii_bstart < 0)
+ return;
+ hn = 0;
@@ -4401,8 +4404,8 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DEBUG_H__ */
--- a/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dentry.c 2012-10-29 03:30:14.231048075 +0000
-@@ -0,0 +1,1063 @@
++++ b/fs/aufs/dentry.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,1060 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -4438,7 +4441,6 @@
+struct au_do_lookup_args {
+ unsigned int flags;
+ mode_t type;
-+ unsigned int nd_flags;
+};
+
+/*
@@ -4529,8 +4531,7 @@
+ * otherwise an error.
+ * can be called at unlinking with @type is zero.
+ */
-+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
-+ unsigned int flags)
++int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type)
+{
+ int npositive, err;
+ aufs_bindex_t bindex, btail, bdiropq;
@@ -4538,8 +4539,7 @@
+ struct qstr whname;
+ struct au_do_lookup_args args = {
+ .flags = 0,
-+ .type = type,
-+ .nd_flags = flags
++ .type = type
+ };
+ const struct qstr *name = &dentry->d_name;
+ struct dentry *parent;
@@ -5137,7 +5137,7 @@
+ * if current working dir is removed, it returns an error.
+ * but the dentry is legal.
+ */
-+ err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0, /*flags*/0);
++ err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0);
+ AuDbgDentry(dentry);
+ au_di_swap(tmp, dinfo);
+ if (err == -ENOENT)
@@ -5467,8 +5467,8 @@
+ .d_release = aufs_d_release
+};
--- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dentry.h 2012-10-29 03:30:14.231048075 +0000
-@@ -0,0 +1,235 @@
++++ b/fs/aufs/dentry.h 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -5522,8 +5522,7 @@
+int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir,
+ struct dentry *h_parent, struct au_branch *br);
+
-+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
-+ unsigned int flags);
++int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type);
+int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex);
+int au_refresh_dentry(struct dentry *dentry, struct dentry *parent);
+int au_reval_dpath(struct dentry *dentry, unsigned int sigen);
@@ -7488,7 +7487,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DYNOP_H__ */
--- a/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/export.c 2012-10-29 03:30:14.235048090 +0000
++++ b/fs/aufs/export.c 2012-12-16 14:11:13.358479829 +0000
@@ -0,0 +1,811 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -7714,7 +7713,7 @@
+ sigen = au_sigen(sb);
+ if (unlikely(is_bad_inode(inode)
+ || IS_DEADDIR(inode)
-+ || sigen != au_iigen(inode)))
++ || sigen != au_iigen(inode, NULL)))
+ goto out_iput;
+
+ dentry = NULL;
@@ -7859,7 +7858,7 @@
+ goto out;
+
+ dentry = ERR_PTR(-ENOMEM);
-+ arg.name = __getname_gfp(GFP_NOFS);
++ arg.name = (void *)__get_free_page(GFP_NOFS);
+ if (unlikely(!arg.name))
+ goto out_file;
+ arg.ino = ino;
@@ -7891,7 +7890,7 @@
+ }
+
+out_name:
-+ __putname(arg.name);
++ free_page((unsigned long)arg.name);
+out_file:
+ fput(file);
+out:
@@ -8302,8 +8301,8 @@
+ atomic_set(&sbinfo->si_xigen_next, u);
+}
--- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/f_op.c 2012-10-29 03:30:14.235048090 +0000
-@@ -0,0 +1,724 @@
++++ b/fs/aufs/f_op.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,723 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -8779,7 +8778,6 @@
+{
+ return AuConv_VM_MAP(flags, GROWSDOWN)
+ | AuConv_VM_MAP(flags, DENYWRITE)
-+ | AuConv_VM_MAP(flags, EXECUTABLE)
+ | AuConv_VM_MAP(flags, LOCKED);
+}
+
@@ -11993,8 +11991,8 @@
+ au_hn_destroy_cache();
+}
--- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op.c 2012-10-29 03:30:14.239048114 +0000
-@@ -0,0 +1,1009 @@
++++ b/fs/aufs/i_op.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,1026 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -12160,15 +12158,21 @@
+
+ IMustLock(dir);
+
++ /* todo: support rcu-walk? */
++ ret = ERR_PTR(-ECHILD);
++ if (flags & LOOKUP_RCU)
++ goto out;
++
++ ret = ERR_PTR(-ENAMETOOLONG);
++ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN))
++ goto out;
++
+ sb = dir->i_sb;
+ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM);
+ ret = ERR_PTR(err);
+ if (unlikely(err))
+ goto out;
+
-+ ret = ERR_PTR(-ENAMETOOLONG);
-+ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN))
-+ goto out_si;
+ err = au_di_init(dentry);
+ ret = ERR_PTR(err);
+ if (unlikely(err))
@@ -12183,7 +12187,7 @@
+ err = au_digen_test(parent, au_sigen(sb));
+ if (!err) {
+ npositive = au_lkup_dentry(dentry, au_dbstart(parent),
-+ /*type*/0, flags);
++ /*type*/0);
+ err = npositive;
+ }
+ di_read_unlock(parent, AuLock_IR);
@@ -12201,6 +12205,13 @@
+ }
+
+ ret = d_splice_alias(inode, dentry);
++#if 0
++ if (unlikely(d_need_lookup(dentry))) {
++ spin_lock(&dentry->d_lock);
++ dentry->d_flags &= ~DCACHE_NEED_LOOKUP;
++ spin_unlock(&dentry->d_lock);
++ } else
++#endif
+ if (unlikely(IS_ERR(ret) && inode)) {
+ ii_write_unlock(inode);
+ iput(inode);
@@ -12904,7 +12915,7 @@
+ } buf;
+
+ err = -ENOMEM;
-+ buf.k = __getname_gfp(GFP_NOFS);
++ buf.k = (void *)__get_free_page(GFP_NOFS);
+ if (unlikely(!buf.k))
+ goto out;
+
@@ -12929,7 +12940,7 @@
+ }
+
+out_name:
-+ __putname(buf.k);
++ free_page((unsigned long)buf.k);
+out:
+ AuTraceErr(err);
+ return ERR_PTR(err);
@@ -12938,7 +12949,11 @@
+static void aufs_put_link(struct dentry *dentry __maybe_unused,
+ struct nameidata *nd, void *cookie __maybe_unused)
+{
-+ __putname(nd_get_link(nd));
++ char *p;
++
++ p = nd_get_link(nd);
++ if (!IS_ERR_OR_NULL(p))
++ free_page((unsigned long)p);
+}
+
+/* ---------------------------------------------------------------------- */
@@ -13005,8 +13020,8 @@
+ .update_time = aufs_update_time
+};
--- a/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op_add.c 2012-10-29 03:30:14.239048114 +0000
-@@ -0,0 +1,712 @@
++++ b/fs/aufs/i_op_add.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,713 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -13276,7 +13291,8 @@
+ h_dir = au_pinned_h_dir(&pin);
+ switch (arg->type) {
+ case Creat:
-+ err = vfsub_create(h_dir, &h_path, arg->u.c.mode, arg->u.c.want_excl);
++ err = vfsub_create(h_dir, &h_path, arg->u.c.mode,
++ arg->u.c.want_excl);
+ break;
+ case Symlink:
+ err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname);
@@ -13720,8 +13736,8 @@
+ return err;
+}
--- a/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op_del.c 2012-10-29 03:30:14.239048114 +0000
-@@ -0,0 +1,478 @@
++++ b/fs/aufs/i_op_del.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,477 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -13792,8 +13808,7 @@
+ au_di_cp(tmp, dinfo);
+ au_di_swap(tmp, dinfo);
+ /* returns the number of positive dentries */
-+ need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0,
-+ /*flags*/0);
++ need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0);
+ au_di_swap(tmp, dinfo);
+ au_rw_write_unlock(&tmp->di_rwsem);
+ au_di_free(tmp);
@@ -15230,8 +15245,8 @@
+ return err;
+}
--- a/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/iinfo.c 2012-01-10 02:15:56.000000000 +0000
-@@ -0,0 +1,264 @@
++++ b/fs/aufs/iinfo.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,276 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -15344,10 +15359,22 @@
+ hinode->hi_whdentry = h_wh;
+}
+
-+void au_update_iigen(struct inode *inode)
++void au_update_iigen(struct inode *inode, int half)
+{
-+ atomic_set(&au_ii(inode)->ii_generation, au_sigen(inode->i_sb));
-+ /* smp_mb(); */ /* atomic_set */
++ struct au_iinfo *iinfo;
++ struct au_iigen *iigen;
++ unsigned int sigen;
++
++ sigen = au_sigen(inode->i_sb);
++ iinfo = au_ii(inode);
++ iigen = &iinfo->ii_generation;
++ spin_lock(&iinfo->ii_genspin);
++ iigen->ig_generation = sigen;
++ if (half)
++ au_ig_fset(iigen->ig_flags, HALF_REFRESHED);
++ else
++ au_ig_fclr(iigen->ig_flags, HALF_REFRESHED);
++ spin_unlock(&iinfo->ii_genspin);
+}
+
+/* it may be called at remount time, too */
@@ -15398,6 +15425,7 @@
+ struct au_iinfo *iinfo = &c->iinfo;
+ static struct lock_class_key aufs_ii;
+
++ spin_lock_init(&iinfo->ii_genspin);
+ au_rw_init(&iinfo->ii_rwsem);
+ au_rw_class(&iinfo->ii_rwsem, &aufs_ii);
+ inode_init_once(&c->vfs_inode);
@@ -15420,8 +15448,7 @@
+ for (i = 0; i < nbr; i++)
+ iinfo->ii_hinode[i].hi_id = -1;
+
-+ atomic_set(&iinfo->ii_generation, au_sigen(sb));
-+ /* smp_mb(); */ /* atomic_set */
++ iinfo->ii_generation.ig_generation = au_sigen(sb);
+ iinfo->ii_bstart = -1;
+ iinfo->ii_bend = -1;
+ iinfo->ii_vdir = NULL;
@@ -15497,8 +15524,8 @@
+ AuRwDestroy(&iinfo->ii_rwsem);
+}
--- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/inode.c 2012-10-29 03:30:14.239048114 +0000
-@@ -0,0 +1,478 @@
++++ b/fs/aufs/inode.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,488 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -15535,7 +15562,7 @@
+static void au_refresh_hinode_attr(struct inode *inode, int do_version)
+{
+ au_cpup_attr_all(inode, /*force*/0);
-+ au_update_iigen(inode);
++ au_update_iigen(inode, /*half*/1);
+ if (do_version)
+ inode->i_version++;
+}
@@ -15754,6 +15781,8 @@
+static int reval_inode(struct inode *inode, struct dentry *dentry)
+{
+ int err;
++ unsigned int gen;
++ struct au_iigen iigen;
+ aufs_bindex_t bindex, bend;
+ struct inode *h_inode, *h_dinode;
+
@@ -15772,12 +15801,20 @@
+ bend = au_ibend(inode);
+ for (bindex = au_ibstart(inode); bindex <= bend; bindex++) {
+ h_inode = au_h_iptr(inode, bindex);
-+ if (h_inode && h_inode == h_dinode) {
-+ err = 0;
-+ if (au_iigen_test(inode, au_digen(dentry)))
-+ err = au_refresh_hinode(inode, dentry);
++ if (!h_inode || h_inode != h_dinode)
++ continue;
++
++ err = 0;
++ gen = au_iigen(inode, &iigen);
++ if (gen == au_digen(dentry)
++ && !au_ig_ftest(iigen.ig_flags, HALF_REFRESHED))
+ break;
-+ }
++
++ /* fully refresh inode using dentry */
++ err = au_refresh_hinode(inode, dentry);
++ if (!err)
++ au_update_iigen(inode, /*half*/0);
++ break;
+ }
+
+ if (unlikely(err))
@@ -15978,8 +16015,8 @@
+ return au_test_h_perm(h_inode, mask);
+}
--- a/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/inode.h 2012-10-29 03:30:14.243048129 +0000
-@@ -0,0 +1,560 @@
++++ b/fs/aufs/inode.h 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,588 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -16033,9 +16070,22 @@
+ struct dentry *hi_whdentry;
+};
+
++/* ig_flags */
++#define AuIG_HALF_REFRESHED 1
++#define au_ig_ftest(flags, name) ((flags) & AuIG_##name)
++#define au_ig_fset(flags, name) \
++ do { (flags) |= AuIG_##name; } while (0)
++#define au_ig_fclr(flags, name) \
++ do { (flags) &= ~AuIG_##name; } while (0)
++
++struct au_iigen {
++ __u32 ig_generation, ig_flags;
++};
++
+struct au_vdir;
+struct au_iinfo {
-+ atomic_t ii_generation;
++ spinlock_t ii_genspin;
++ struct au_iigen ii_generation;
+ struct super_block *ii_hsb1; /* no get/put */
+
+ struct au_rwsem ii_rwsem;
@@ -16184,7 +16234,7 @@
+void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex,
+ struct inode *h_inode, unsigned int flags);
+
-+void au_update_iigen(struct inode *inode);
++void au_update_iigen(struct inode *inode, int half);
+void au_update_ibrange(struct inode *inode, int do_put_zero);
+
+void au_icntnr_init_once(void *_c);
@@ -16292,9 +16342,19 @@
+#endif
+}
+
-+static inline unsigned int au_iigen(struct inode *inode)
++static inline unsigned int au_iigen(struct inode *inode, struct au_iigen *iigen)
+{
-+ return atomic_read(&au_ii(inode)->ii_generation);
++ unsigned int gen;
++ struct au_iinfo *iinfo;
++
++ iinfo = au_ii(inode);
++ spin_lock(&iinfo->ii_genspin);
++ if (iigen)
++ *iigen = iinfo->ii_generation;
++ gen = iinfo->ii_generation.ig_generation;
++ spin_unlock(&iinfo->ii_genspin);
++
++ return gen;
+}
+
+/* tiny test for inode number */
@@ -16311,7 +16371,12 @@
+
+static inline void au_iigen_dec(struct inode *inode)
+{
-+ atomic_dec(&au_ii(inode)->ii_generation);
++ struct au_iinfo *iinfo;
++
++ iinfo = au_ii(inode);
++ spin_lock(&iinfo->ii_genspin);
++ iinfo->ii_generation.ig_generation--;
++ spin_unlock(&iinfo->ii_genspin);
+}
+
+static inline int au_iigen_test(struct inode *inode, unsigned int sigen)
@@ -16319,7 +16384,7 @@
+ int err;
+
+ err = 0;
-+ if (unlikely(inode && au_iigen(inode) != sigen))
++ if (unlikely(inode && au_iigen(inode, NULL) != sigen))
+ err = -EIO;
+
+ return err;
@@ -16986,8 +17051,8 @@
+ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b
+endif
--- a/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/module.c 2012-03-11 05:01:22.000000000 +0000
-@@ -0,0 +1,196 @@
++++ b/fs/aufs/module.c 2012-12-16 14:11:13.358479829 +0000
+@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -17055,6 +17120,12 @@
+{
+ int i;
+
++ /*
++ * Make sure all delayed rcu free inodes are flushed before we
++ * destroy cache.
++ */
++ rcu_barrier();
++
+ /* excluding AuCache_HNOTIFY */
+ BUILD_BUG_ON(AuCache_HNOTIFY + 1 != AuCache_Last);
+ for (i = 0; i < AuCache_HNOTIFY; i++)
@@ -20509,7 +20580,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_RWSEM_H__ */
--- a/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sbinfo.c 2012-01-10 02:15:56.000000000 +0000
++++ b/fs/aufs/sbinfo.c 2012-12-16 14:11:13.362479850 +0000
@@ -0,0 +1,343 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -20670,7 +20741,7 @@
+
+ gen = ++au_sbi(sb)->si_generation;
+ au_update_digen(sb->s_root);
-+ au_update_iigen(sb->s_root->d_inode);
++ au_update_iigen(sb->s_root->d_inode, /*half*/0);
+ sb->s_root->d_inode->i_version++;
+ return gen;
+}
@@ -20920,8 +20991,8 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_SPL_H__ */
--- a/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/super.c 2012-10-29 03:30:14.243048129 +0000
-@@ -0,0 +1,962 @@
++++ b/fs/aufs/super.c 2012-12-16 14:11:13.362479850 +0000
+@@ -0,0 +1,993 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -21341,6 +21412,36 @@
+
+/* ---------------------------------------------------------------------- */
+
++static int aufs_sync_fs(struct super_block *sb, int wait)
++{
++ int err, e;
++ aufs_bindex_t bend, bindex;
++ struct au_branch *br;
++ struct super_block *h_sb;
++
++ err = 0;
++ si_noflush_read_lock(sb);
++ bend = au_sbend(sb);
++ for (bindex = 0; bindex <= bend; bindex++) {
++ br = au_sbr(sb, bindex);
++ if (!au_br_writable(br->br_perm))
++ continue;
++
++ h_sb = au_sbr_sb(sb, bindex);
++ if (h_sb->s_op->sync_fs) {
++ e = h_sb->s_op->sync_fs(h_sb, wait);
++ if (unlikely(e && !err))
++ err = e;
++ /* go on even if an error happens */
++ }
++ }
++ si_read_unlock(sb);
++
++ return err;
++}
++
++/* ---------------------------------------------------------------------- */
++
+/* final actions when unmounting a file system */
+static void aufs_put_super(struct super_block *sb)
+{
@@ -21551,7 +21652,7 @@
+ sigen = au_sigen(sb);
+ for (ull = 0; ull < max; ull++) {
+ inode = array[ull];
-+ if (au_iigen(inode) != sigen) {
++ if (au_iigen(inode, NULL) != sigen) {
+ ii_write_lock_child(inode);
+ e = au_refresh_hinode_self(inode);
+ ii_write_unlock(inode);
@@ -21704,6 +21805,7 @@
+ .show_options = aufs_show_options,
+ .statfs = aufs_statfs,
+ .put_super = aufs_put_super,
++ .sync_fs = aufs_sync_fs,
+ .remount_fs = aufs_remount_fs
+};
+
@@ -23060,7 +23162,7 @@
+ pr_err("err %d (ignored)\n", err);
+}
--- a/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/vdir.c 2012-01-10 02:15:56.000000000 +0000
++++ b/fs/aufs/vdir.c 2012-12-16 14:11:13.362479850 +0000
@@ -0,0 +1,885 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -23586,7 +23688,7 @@
+ AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH));
+
+ err = -ENOMEM;
-+ o = p = __getname_gfp(GFP_NOFS);
++ o = p = (void *)__get_free_page(GFP_NOFS);
+ if (unlikely(!p))
+ goto out;
+
@@ -23606,7 +23708,7 @@
+ }
+ }
+
-+ __putname(o);
++ free_page((unsigned long)o);
+
+out:
+ AuTraceErr(err);
@@ -24728,8 +24830,8 @@
+ return err;
+}
--- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/vfsub.h 2012-10-29 03:30:14.243048129 +0000
-@@ -0,0 +1,283 @@
++++ b/fs/aufs/vfsub.h 2012-12-16 14:11:13.362479850 +0000
+@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@@ -24895,7 +24997,8 @@
+void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1,
+ struct dentry *d2, struct au_hinode *hdir2);
+
-+int vfsub_create(struct inode *dir, struct path *path, int mode, bool want_excl);
++int vfsub_create(struct inode *dir, struct path *path, int mode,
++ bool want_excl);
+int vfsub_symlink(struct inode *dir, struct path *path,
+ const char *symname);
+int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev);
@@ -25717,7 +25820,7 @@
+ }
+};
--- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/whout.c 2012-10-29 03:30:14.247048152 +0000
++++ b/fs/aufs/whout.c 2012-12-16 14:11:13.362479850 +0000
@@ -0,0 +1,1042 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -26536,7 +26639,7 @@
+ struct au_vdir_destr *str;
+
+ err = -ENOMEM;
-+ p = __getname_gfp(GFP_NOFS);
++ p = (void *)__get_free_page(GFP_NOFS);
+ wh_name.name = p;
+ if (unlikely(!wh_name.name))
+ goto out;
@@ -26566,7 +26669,7 @@
+ break;
+ }
+ }
-+ __putname(wh_name.name);
++ free_page((unsigned long)wh_name.name);
+
+out:
+ return err;
@@ -27165,7 +27268,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_WKQ_H__ */
--- a/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/xino.c 2012-07-22 01:31:00.000000000 +0100
++++ b/fs/aufs/xino.c 2012-12-16 14:11:13.362479850 +0000
@@ -0,0 +1,1264 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -28377,7 +28480,7 @@
+
+ if (bwr >= 0) {
+ file = ERR_PTR(-ENOMEM);
-+ page = __getname_gfp(GFP_NOFS);
++ page = (void *)__get_free_page(GFP_NOFS);
+ if (unlikely(!page))
+ goto out;
+ path.mnt = br->br_mnt;
@@ -28391,7 +28494,7 @@
+ if (!IS_ERR(file))
+ au_xino_brid_set(sb, br->br_id);
+ }
-+ __putname(page);
++ free_page((unsigned long)page);
+ } else {
+ file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0);
+ if (IS_ERR(file))
@@ -28432,10 +28535,10 @@
+ return err;
+}
--- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/include/linux/aufs_type.h 2012-10-29 03:30:14.247048152 +0000
-@@ -0,0 +1,233 @@
++++ b/include/linux/aufs_type.h 2012-12-16 14:11:13.362479850 +0000
+@@ -0,0 +1,19 @@
+/*
-+ * Copyright (C) 2005-2012 Junjiro R. Okajima
++ * Copyright (C) 2012 Junjiro R. Okajima
+ *
+ * This program, aufs is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
@@ -28452,218 +28555,4 @@
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
-+#ifndef __AUFS_TYPE_H__
-+#define __AUFS_TYPE_H__
-+
-+#define AUFS_NAME "aufs"
-+
-+#ifdef __KERNEL__
-+/*
-+ * define it before including all other headers.
-+ * sched.h may use pr_* macros before defining "current", so define the
-+ * no-current version first, and re-define later.
-+ */
-+#define pr_fmt(fmt) AUFS_NAME " %s:%d: " fmt, __func__, __LINE__
-+#include <linux/sched.h>
-+#undef pr_fmt
-+#define pr_fmt(fmt) AUFS_NAME " %s:%d:%s[%d]: " fmt, \
-+ __func__, __LINE__, current->comm, current->pid
-+#else
-+#include <stdint.h>
-+#include <sys/types.h>
-+#endif /* __KERNEL__ */
-+
-+#include <linux/limits.h>
-+
-+#define AUFS_VERSION "3.6-20121015"
-+
-+/* todo? move this to linux-2.6.19/include/magic.h */
-+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#ifdef CONFIG_AUFS_BRANCH_MAX_127
-+typedef int8_t aufs_bindex_t;
-+#define AUFS_BRANCH_MAX 127
-+#else
-+typedef int16_t aufs_bindex_t;
-+#ifdef CONFIG_AUFS_BRANCH_MAX_511
-+#define AUFS_BRANCH_MAX 511
-+#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
-+#define AUFS_BRANCH_MAX 1023
-+#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
-+#define AUFS_BRANCH_MAX 32767
-+#endif
-+#endif
-+
-+#ifdef __KERNEL__
-+#ifndef AUFS_BRANCH_MAX
-+#error unknown CONFIG_AUFS_BRANCH_MAX value
-+#endif
-+#endif /* __KERNEL__ */
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#define AUFS_FSTYPE AUFS_NAME
-+
-+#define AUFS_ROOT_INO 2
-+#define AUFS_FIRST_INO 11
-+
-+#define AUFS_WH_PFX ".wh."
-+#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1)
-+#define AUFS_WH_TMP_LEN 4
-+/* a limit for rmdir/rename a dir */
-+#define AUFS_MAX_NAMELEN (NAME_MAX \
-+ - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\
-+ - 1 /* dot */\
-+ - AUFS_WH_TMP_LEN) /* hex */
-+#define AUFS_XINO_FNAME "." AUFS_NAME ".xino"
-+#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME
-+#define AUFS_XINO_TRUNC_INIT 64 /* blocks */
-+#define AUFS_XINO_TRUNC_STEP 4 /* blocks */
-+#define AUFS_DIRWH_DEF 3
-+#define AUFS_RDCACHE_DEF 10 /* seconds */
-+#define AUFS_RDCACHE_MAX 3600 /* seconds */
-+#define AUFS_RDBLK_DEF 512 /* bytes */
-+#define AUFS_RDHASH_DEF 32
-+#define AUFS_WKQ_NAME AUFS_NAME "d"
-+#define AUFS_MFS_DEF_SEC 30 /* seconds */
-+#define AUFS_MFS_MAX_SEC 3600 /* seconds */
-+#define AUFS_PLINK_WARN 100 /* number of plinks */
-+
-+/* pseudo-link maintenace under /proc */
-+#define AUFS_PLINK_MAINT_NAME "plink_maint"
-+#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME
-+#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
-+
-+#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */
-+#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME
-+
-+#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME
-+#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk"
-+#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph"
-+
-+/* doubly whiteouted */
-+#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME
-+#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME
-+#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME
-+
-+/* branch permissions and attributes */
-+#define AUFS_BRPERM_RW "rw"
-+#define AUFS_BRPERM_RO "ro"
-+#define AUFS_BRPERM_RR "rr"
-+#define AUFS_BRRATTR_WH "wh"
-+#define AUFS_BRWATTR_NLWH "nolwh"
-+
-+/* ---------------------------------------------------------------------- */
-+
-+/* ioctl */
-+enum {
-+ /* readdir in userspace */
-+ AuCtl_RDU,
-+ AuCtl_RDU_INO,
-+
-+ /* pathconf wrapper */
-+ AuCtl_WBR_FD,
-+
-+ /* busy inode */
-+ AuCtl_IBUSY
-+};
-+
-+/* borrowed from linux/include/linux/kernel.h */
-+#ifndef ALIGN
-+#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
-+#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
-+#endif
-+
-+/* borrowed from linux/include/linux/compiler-gcc3.h */
-+#ifndef __aligned
-+#define __aligned(x) __attribute__((aligned(x)))
-+#endif
-+
-+#ifdef __KERNEL__
-+#ifndef __packed
-+#define __packed __attribute__((packed))
-+#endif
-+#endif
-+
-+struct au_rdu_cookie {
-+ uint64_t h_pos;
-+ int16_t bindex;
-+ uint8_t flags;
-+ uint8_t pad;
-+ uint32_t generation;
-+} __aligned(8);
-+
-+struct au_rdu_ent {
-+ uint64_t ino;
-+ int16_t bindex;
-+ uint8_t type;
-+ uint8_t nlen;
-+ uint8_t wh;
-+ char name[0];
-+} __aligned(8);
-+
-+static inline int au_rdu_len(int nlen)
-+{
-+ /* include the terminating NULL */
-+ return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
-+ sizeof(uint64_t));
-+}
-+
-+union au_rdu_ent_ul {
-+ struct au_rdu_ent __user *e;
-+ uint64_t ul;
-+};
-+
-+enum {
-+ AufsCtlRduV_SZ,
-+ AufsCtlRduV_End
-+};
-+
-+struct aufs_rdu {
-+ /* input */
-+ union {
-+ uint64_t sz; /* AuCtl_RDU */
-+ uint64_t nent; /* AuCtl_RDU_INO */
-+ };
-+ union au_rdu_ent_ul ent;
-+ uint16_t verify[AufsCtlRduV_End];
-+
-+ /* input/output */
-+ uint32_t blk;
-+
-+ /* output */
-+ union au_rdu_ent_ul tail;
-+ /* number of entries which were added in a single call */
-+ uint64_t rent;
-+ uint8_t full;
-+ uint8_t shwh;
-+
-+ struct au_rdu_cookie cookie;
-+} __aligned(8);
-+
-+/* ---------------------------------------------------------------------- */
-+
-+struct aufs_wbr_fd {
-+ uint32_t oflags;
-+ int16_t brid;
-+} __aligned(8);
-+
-+/* ---------------------------------------------------------------------- */
-+
-+struct aufs_ibusy {
-+ uint64_t ino, h_ino;
-+ int16_t bindex;
-+} __aligned(8);
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#define AuCtlType 'A'
-+#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
-+#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
-+#define AUFS_CTL_WBR_FD _IOW(AuCtlType, AuCtl_WBR_FD, \
-+ struct aufs_wbr_fd)
-+#define AUFS_CTL_IBUSY _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
-+
-+#endif /* __AUFS_TYPE_H__ */
++#include <uapi/linux/aufs_type.h>
diff --git a/debian/patches/features/all/aufs3/aufs3-base.patch b/debian/patches/features/all/aufs3/aufs3-base.patch
index adb9ab7ccfdb..4514a59ec444 100644
--- a/debian/patches/features/all/aufs3/aufs3-base.patch
+++ b/debian/patches/features/all/aufs3/aufs3-base.patch
@@ -1,7 +1,20 @@
-aufs3.6 base patch
+aufs3.x-rcN base patch
+diff --git a/fs/file_table.c b/fs/file_table.c
+index a72bf9d..dac6792 100644
+--- a/fs/file_table.c
++++ b/fs/file_table.c
+@@ -36,7 +36,7 @@ struct files_stat_struct files_stat = {
+ .max_files = NR_FILE
+ };
+
+-DEFINE_STATIC_LGLOCK(files_lglock);
++DEFINE_LGLOCK(files_lglock);
+
+ /* SLAB cache for file structures */
+ static struct kmem_cache *filp_cachep __read_mostly;
diff --git a/fs/inode.c b/fs/inode.c
-index ac8d904..7b2c8fa 100644
+index b03c719..ee497f9 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1491,7 +1491,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
@@ -14,7 +27,7 @@ index ac8d904..7b2c8fa 100644
if (inode->i_op->update_time)
return inode->i_op->update_time(inode, time, flags);
diff --git a/fs/splice.c b/fs/splice.c
-index 41514dd..663b402 100644
+index 13e5b47..f185c6c 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
@@ -42,10 +55,10 @@ index 41514dd..663b402 100644
ssize_t (*splice_read)(struct file *, loff_t *,
struct pipe_inode_info *, size_t, unsigned int);
diff --git a/include/linux/fs.h b/include/linux/fs.h
-index aa11047..9116d2e 100644
+index b33cfc9..963a61b 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -2741,6 +2741,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
+@@ -2558,6 +2558,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
extern int inode_newsize_ok(const struct inode *, loff_t offset);
extern void setattr_copy(struct inode *inode, const struct iattr *attr);
diff --git a/debian/patches/features/all/aufs3/aufs3-kbuild.patch b/debian/patches/features/all/aufs3/aufs3-kbuild.patch
index d9ba9ab81fe3..1301695e4fa0 100644
--- a/debian/patches/features/all/aufs3/aufs3-kbuild.patch
+++ b/debian/patches/features/all/aufs3/aufs3-kbuild.patch
@@ -1,4 +1,4 @@
-aufs3.6 kbuild patch
+aufs3.x-rcN kbuild patch
diff --git a/fs/Kconfig b/fs/Kconfig
index f95ae3a..6d8a9a5 100644
@@ -13,23 +13,11 @@ index f95ae3a..6d8a9a5 100644
endif # MISC_FILESYSTEMS
diff --git a/fs/Makefile b/fs/Makefile
-index 2fb9779..abefac5 100644
+index 1d7af79..06db6eb 100644
--- a/fs/Makefile
+++ b/fs/Makefile
-@@ -125,3 +125,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/
+@@ -126,3 +126,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/
obj-y += exofs/ # Multiple modules
obj-$(CONFIG_CEPH_FS) += ceph/
obj-$(CONFIG_PSTORE) += pstore/
+obj-$(CONFIG_AUFS_FS) += aufs/
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index fa21760..ee029e3 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -66,6 +66,7 @@ header-y += atmppp.h
- header-y += atmsap.h
- header-y += atmsvc.h
- header-y += audit.h
-+header-y += aufs_type.h
- header-y += auto_fs.h
- header-y += auto_fs4.h
- header-y += auxvec.h
diff --git a/debian/patches/features/all/aufs3/aufs3-standalone.patch b/debian/patches/features/all/aufs3/aufs3-standalone.patch
index d02980b418ce..7736840eacda 100644
--- a/debian/patches/features/all/aufs3/aufs3-standalone.patch
+++ b/debian/patches/features/all/aufs3/aufs3-standalone.patch
@@ -1,7 +1,7 @@
-aufs3.6 standalone patch
+aufs3.x-rcN standalone patch
diff --git a/fs/file_table.c b/fs/file_table.c
-index 701985e..a9fe741 100644
+index dac6792..e3f2c15 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -37,6 +37,7 @@ struct files_stat_struct files_stat = {
@@ -12,7 +12,7 @@ index 701985e..a9fe741 100644
/* SLAB cache for file structures */
static struct kmem_cache *filp_cachep __read_mostly;
-@@ -509,6 +510,8 @@ void file_sb_list_del(struct file *file)
+@@ -403,6 +404,8 @@ void file_sb_list_del(struct file *file)
}
}
@@ -22,7 +22,7 @@ index 701985e..a9fe741 100644
/*
diff --git a/fs/inode.c b/fs/inode.c
-index 7b2c8fa..0c4318d 100644
+index ee497f9..5e7eee7 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -56,6 +56,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
@@ -42,7 +42,7 @@ index 7b2c8fa..0c4318d 100644
/**
* touch_atime - update the access time
diff --git a/fs/namespace.c b/fs/namespace.c
-index 7bdf790..5b85c4c 100644
+index 2496062..3e66a90 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -50,6 +50,7 @@ EXPORT_SYMBOL_GPL(fs_kobj);
@@ -123,7 +123,7 @@ index f104d56..54f36db 100644
static int fsnotify_mark_destroy(void *ignored)
{
diff --git a/fs/open.c b/fs/open.c
-index e1f2cdb..2804cd6 100644
+index 59071f5..7e4c856 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
@@ -135,7 +135,7 @@ index e1f2cdb..2804cd6 100644
static long do_sys_truncate(const char __user *pathname, loff_t length)
{
diff --git a/fs/splice.c b/fs/splice.c
-index 663b402..51e1deb 100644
+index f185c6c..f3d89da 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1117,6 +1117,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
@@ -171,7 +171,7 @@ index 6dbae46..9f4f29a 100644
}
+EXPORT_SYMBOL_GPL(cap_mmap_file);
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
-index 442204c..e644a1c 100644
+index b08d20c..a90420b 100644
--- a/security/device_cgroup.c
+++ b/security/device_cgroup.c
@@ -7,6 +7,7 @@
@@ -182,19 +182,19 @@ index 442204c..e644a1c 100644
#include <linux/list.h>
#include <linux/uaccess.h>
#include <linux/seq_file.h>
-@@ -493,6 +494,7 @@ found:
-
- return -EPERM;
+@@ -617,6 +618,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
+ return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
+ access);
}
+EXPORT_SYMBOL_GPL(__devcgroup_inode_permission);
int devcgroup_inode_mknod(int mode, dev_t dev)
{
diff --git a/security/security.c b/security/security.c
-index 860aeb3..ffb57bf 100644
+index 8dcd4ae..6efe561 100644
--- a/security/security.c
+++ b/security/security.c
-@@ -384,6 +384,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
+@@ -396,6 +396,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
return 0;
return security_ops->path_rmdir(dir, dentry);
}
@@ -202,7 +202,7 @@ index 860aeb3..ffb57bf 100644
int security_path_unlink(struct path *dir, struct dentry *dentry)
{
-@@ -400,6 +401,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
+@@ -412,6 +413,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
return 0;
return security_ops->path_symlink(dir, dentry, old_name);
}
@@ -210,7 +210,7 @@ index 860aeb3..ffb57bf 100644
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
struct dentry *new_dentry)
-@@ -408,6 +410,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
+@@ -420,6 +422,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
return 0;
return security_ops->path_link(old_dentry, new_dir, new_dentry);
}
@@ -218,7 +218,7 @@ index 860aeb3..ffb57bf 100644
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
struct path *new_dir, struct dentry *new_dentry)
-@@ -426,6 +429,7 @@ int security_path_truncate(struct path *path)
+@@ -438,6 +441,7 @@ int security_path_truncate(struct path *path)
return 0;
return security_ops->path_truncate(path);
}
@@ -226,15 +226,15 @@ index 860aeb3..ffb57bf 100644
int security_path_chmod(struct path *path, umode_t mode)
{
-@@ -433,6 +437,7 @@ int security_path_chmod(struct path *path, umode_t mode)
+@@ -445,6 +449,7 @@ int security_path_chmod(struct path *path, umode_t mode)
return 0;
return security_ops->path_chmod(path, mode);
}
+EXPORT_SYMBOL_GPL(security_path_chmod);
- int security_path_chown(struct path *path, uid_t uid, gid_t gid)
+ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
{
-@@ -440,6 +445,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
+@@ -452,6 +457,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
return 0;
return security_ops->path_chown(path, uid, gid);
}
@@ -242,7 +242,7 @@ index 860aeb3..ffb57bf 100644
int security_path_chroot(struct path *path)
{
-@@ -516,6 +522,7 @@ int security_inode_readlink(struct dentry *dentry)
+@@ -528,6 +534,7 @@ int security_inode_readlink(struct dentry *dentry)
return 0;
return security_ops->inode_readlink(dentry);
}
@@ -250,7 +250,7 @@ index 860aeb3..ffb57bf 100644
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
{
-@@ -530,6 +537,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -542,6 +549,7 @@ int security_inode_permission(struct inode *inode, int mask)
return 0;
return security_ops->inode_permission(inode, mask);
}
@@ -258,7 +258,7 @@ index 860aeb3..ffb57bf 100644
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
{
-@@ -645,6 +653,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -663,6 +671,7 @@ int security_file_permission(struct file *file, int mask)
return fsnotify_perm(file, mask);
}
@@ -266,7 +266,7 @@ index 860aeb3..ffb57bf 100644
int security_file_alloc(struct file *file)
{
-@@ -705,6 +714,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+@@ -723,6 +732,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
return ret;
return ima_file_mmap(file, prot);
}
diff --git a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch
index fe7041ba856c..71c3dc62faeb 100644
--- a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch
+++ b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch
@@ -19,7 +19,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -455,8 +455,8 @@
+@@ -455,8 +455,8 @@ bytes respectively. Such letter suffixes
ccw_timeout_log [S390]
See Documentation/s390/CommonIO for details.
@@ -32,7 +32,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
checkreqprot [SELINUX] Set initial checkreqprot flag value.
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -709,6 +709,14 @@
+@@ -784,6 +784,14 @@ config MEMCG
This config option also selects MM_OWNER config option, which
could in turn add some fork/exit overhead.
@@ -49,7 +49,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
depends on MEMCG && SWAP
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
-@@ -5029,7 +5029,7 @@
+@@ -5132,7 +5132,7 @@ static void cgroup_release_agent(struct
mutex_unlock(&cgroup_mutex);
}
@@ -58,8 +58,8 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
{
int i;
char *token;
-@@ -5045,17 +5045,29 @@
- struct cgroup_subsys *ss = subsys[i];
+@@ -5152,17 +5152,29 @@ static int __init cgroup_disable(char *s
+ continue;
if (!strcmp(token, ss->name)) {
- ss->disabled = 1;
@@ -93,7 +93,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
*/
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
-@@ -5596,6 +5596,9 @@
+@@ -5630,6 +5630,9 @@ static void mem_cgroup_move_task(struct
struct cgroup_subsys mem_cgroup_subsys = {
.name = "memory",
diff --git a/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch b/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
index 91c4a1f52485..194b7312be3c 100644
--- a/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
+++ b/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
@@ -11,26 +11,22 @@ a version of the script which is directly derived from the driver.
drivers/media/dvb/dvb-usb/af9005-fe.c | 66 ++++++++++++++++++++++++++------
2 files changed, 54 insertions(+), 14 deletions(-)
-diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
-index 868e1cb..1c3d56d 100644
---- a/drivers/media/dvb/dvb-usb/Kconfig
-+++ b/drivers/media/dvb/dvb-usb/Kconfig
-@@ -238,10 +238,10 @@ config DVB_USB_OPERA1
+--- a/drivers/media/usb/dvb-usb/Kconfig
++++ b/drivers/media/usb/dvb-usb/Kconfig
+@@ -227,10 +227,10 @@ config DVB_USB_OPERA1
config DVB_USB_AF9005
tristate "Afatech AF9005 DVB-T USB1.1 support"
- depends on BROKEN
- depends on DVB_USB && EXPERIMENTAL
- select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
- select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
+ depends on DVB_USB
+ select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
+ select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
+ select FW_LOADER
help
Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver
and the TerraTec Cinergy T USB XE (Rev.1)
-diff --git a/drivers/media/dvb/dvb-usb/af9005-fe.c b/drivers/media/dvb/dvb-usb/af9005-fe.c
-index 199ece0..bcc26c8 100644
---- a/drivers/media/dvb/dvb-usb/af9005-fe.c
-+++ b/drivers/media/dvb/dvb-usb/af9005-fe.c
+--- a/drivers/media/usb/dvb-usb/af9005-fe.c
++++ b/drivers/media/usb/dvb-usb/af9005-fe.c
@@ -22,10 +22,26 @@
* see Documentation/dvb/README.dvb-usb for more information
*/
@@ -59,7 +55,7 @@ index 199ece0..bcc26c8 100644
struct af9005_fe_state {
struct dvb_usb_device *d;
-@@ -818,6 +834,8 @@ static int af9005_fe_init(struct dvb_frontend *fe)
+@@ -816,6 +832,8 @@ static int af9005_fe_init(struct dvb_fro
{
struct af9005_fe_state *state = fe->demodulator_priv;
struct dvb_usb_adapter *adap = fe->dvb->priv;
@@ -68,7 +64,7 @@ index 199ece0..bcc26c8 100644
int ret, i, scriptlen;
u8 temp, temp0 = 0, temp1 = 0, temp2 = 0;
u8 buf[2];
-@@ -969,37 +987,55 @@ static int af9005_fe_init(struct dvb_frontend *fe)
+@@ -968,37 +986,55 @@ static int af9005_fe_init(struct dvb_fro
if ((ret = af9005_write_ofdm_register(state->d, 0xaefb, 0x01)))
return ret;
@@ -136,7 +132,7 @@ index 199ece0..bcc26c8 100644
/* save original TOPs */
deb_info("save original TOPs\n");
-@@ -1079,6 +1115,10 @@ static int af9005_fe_init(struct dvb_frontend *fe)
+@@ -1078,6 +1114,10 @@ static int af9005_fe_init(struct dvb_fro
deb_info("profit!\n");
return 0;
@@ -147,6 +143,3 @@ index 199ece0..bcc26c8 100644
}
static int af9005_fe_sleep(struct dvb_frontend *fe)
---
-1.6.3.3
-
diff --git a/debian/patches/series b/debian/patches/series
index 1a0825d77616..79b9e08fecd9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -38,22 +38,14 @@ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
bugfix/arm/ixp4xx_iobe.patch
debian/x86-memtest-WARN-if-bad-RAM-found.patch
-bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch
-debian/debugfs-set-default-mode-to-700.patch
-
bugfix/alpha/alpha-use-large-data-model.diff
-bugfix/all/speakup-lower-default-software-speech-rate.patch
debian/iwlwifi-do-not-request-unreleased-firmware.patch
debian/cirrus-disable-modeset-by-default.patch
debian/fs-enable-link-security-restrictions-by-default.patch
bugfix/all/hid-add-apple-wireless-keyboard-2011-ansi-to-special-driver-list.patch
-bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch
bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch
-bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch
-bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch
-bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch
bugfix/arm/omap-musb-choice.patch
bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch