diff options
author | Ben Hutchings <benh@debian.org> | 2012-12-16 15:20:29 +0000 |
---|---|---|
committer | Ben Hutchings <benh@debian.org> | 2012-12-16 15:20:29 +0000 |
commit | 8123ace851707cad1ea78ea2330e62928f3a7fa1 (patch) | |
tree | 042d327637a3d43fa9831285668f746dca71730a | |
parent | ef781eb6eec9b61b82a8bafc92718bd49d95ba0f (diff) | |
download | kernel_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
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 |