diff --git a/debian/changelog b/debian/changelog index 00e31458c..c87fdd062 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +linux (3.8-1~experimental.1) UNRELEASED; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_3.8 + + [ Ben Hutchings ] + * aufs: Update to aufs3.x-rcN-20130204 + + -- Ben Hutchings Tue, 19 Feb 2013 05:46:20 +0000 + linux (3.7.8-1~experimental.1) experimental; urgency=low * New upstream stable update: 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 deleted file mode 100644 index 515891691..000000000 --- a/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch +++ /dev/null @@ -1,133 +0,0 @@ -From: Kees Cook -Date: Thu, 6 Dec 2012 17:00:21 +1100 -Subject: [2/2] exec: use -ELOOP for max recursion depth - -commit a4706fd3dc5d23f58da814d03f3ef92fd9a4fc16 upstream. - -To avoid an explosion of request_module calls on a chain of abusive -scripts, fail maximum recursion with -ELOOP instead of -ENOEXEC. As soon -as maximum recursion depth is hit, the error will fail all the way back -up the chain, aborting immediately. - -This also has the side-effect of stopping the user's shell from attempting -to reexecute the top-level file as a shell script. As seen in the -dash source: - - if (cmd != path_bshell && errno == ENOEXEC) { - *argv-- = cmd; - *argv = cmd = path_bshell; - goto repeat; - } - -The above logic was designed for running scripts automatically that lacked -the "#!" header, not to re-try failed recursion. On a legitimate -ENOEXEC, -things continue to behave as the shell expects. - -Additionally, when tracking recursion, the binfmt handlers should not be -involved. The recursion being tracked is the depth of calls through -search_binary_handler(), so that function should be exclusively responsible -for tracking the depth. - -Signed-off-by: Kees Cook -Cc: halfdog -Cc: P J P -Cc: Alexander Viro -Signed-off-by: Andrew Morton -[bwh: Backported to 3.6: adjust context] ---- - fs/binfmt_em86.c | 1 - - fs/binfmt_misc.c | 6 ------ - fs/binfmt_script.c | 4 +--- - fs/exec.c | 10 +++++----- - include/linux/binfmts.h | 2 -- - 5 files changed, 6 insertions(+), 17 deletions(-) - ---- a/fs/binfmt_em86.c -+++ b/fs/binfmt_em86.c -@@ -42,7 +42,6 @@ static int load_em86(struct linux_binprm - return -ENOEXEC; - } - -- bprm->recursion_depth++; /* Well, the bang-shell is implicit... */ - allow_write_access(bprm->file); - fput(bprm->file); - bprm->file = NULL; ---- a/fs/binfmt_misc.c -+++ b/fs/binfmt_misc.c -@@ -117,10 +117,6 @@ static int load_misc_binary(struct linux - if (!enabled) - goto _ret; - -- retval = -ENOEXEC; -- if (bprm->recursion_depth > BINPRM_MAX_RECURSION) -- goto _ret; -- - /* to keep locking time low, we copy the interpreter string */ - read_lock(&entries_lock); - fmt = check_file(bprm); -@@ -200,8 +196,6 @@ static int load_misc_binary(struct linux - if (retval < 0) - goto _error; - -- bprm->recursion_depth++; -- - retval = search_binary_handler (bprm, regs); - if (retval < 0) - goto _error; ---- a/fs/binfmt_script.c -+++ b/fs/binfmt_script.c -@@ -22,15 +22,13 @@ static int load_script(struct linux_binp - char interp[BINPRM_BUF_SIZE]; - int retval; - -- if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || -- (bprm->recursion_depth > BINPRM_MAX_RECURSION)) -+ if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!')) - return -ENOEXEC; - /* - * This section does the #! interpretation. - * Sorta complicated, but hopefully it will work. -TYT - */ - -- bprm->recursion_depth++; - allow_write_access(bprm->file); - fput(bprm->file); - bprm->file = NULL; ---- a/fs/exec.c -+++ b/fs/exec.c -@@ -1371,6 +1371,10 @@ int search_binary_handler(struct linux_b - struct linux_binfmt *fmt; - pid_t old_pid, old_vpid; - -+ /* This allows 4 levels of binfmt rewrites before failing hard. */ -+ if (depth > 5) -+ return -ELOOP; -+ - retval = security_bprm_check(bprm); - if (retval) - return retval; -@@ -1395,12 +1399,8 @@ int search_binary_handler(struct linux_b - if (!try_module_get(fmt->module)) - continue; - read_unlock(&binfmt_lock); -+ bprm->recursion_depth = depth + 1; - retval = fn(bprm, regs); -- /* -- * Restore the depth counter to its starting value -- * in this call, so we don't have to rely on every -- * load_binary function to restore it on return. -- */ - bprm->recursion_depth = depth; - if (retval >= 0) { - if (depth == 0) { ---- a/include/linux/binfmts.h -+++ b/include/linux/binfmts.h -@@ -54,8 +54,6 @@ struct linux_binprm { - #define BINPRM_FLAGS_EXECFD_BIT 1 - #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT) - --#define BINPRM_MAX_RECURSION 4 -- - /* Function parameter for binfmt->coredump */ - struct coredump_params { - 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 d8d68be4b..290954c07 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 @@ -66,7 +66,7 @@ upstream submission. if (*(u32 *)fw->data != UCODE_MAGIC) { --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c -@@ -1926,10 +1926,8 @@ static int __devinit ucode_init (loader_ +@@ -1929,10 +1929,8 @@ static int ucode_init(loader_block *lb, int res; res = request_ihex_firmware(&fw, "atmsar11.fw", &dev->pci_dev->dev); @@ -80,7 +80,7 @@ upstream submission. rec = (const struct ihex_binrec *)fw->data; --- a/drivers/atm/fore200e.c +++ b/drivers/atm/fore200e.c -@@ -2519,10 +2519,9 @@ fore200e_load_and_start_fw(struct fore20 +@@ -2505,10 +2505,9 @@ static int fore200e_load_and_start_fw(st return err; sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT); @@ -95,7 +95,7 @@ upstream submission. fw_size = firmware->size / sizeof(u32); --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c -@@ -307,10 +307,8 @@ static int ath3k_load_patch(struct usb_d +@@ -317,10 +317,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 *) -@@ -369,10 +367,8 @@ static int ath3k_load_syscfg(struct usb_ +@@ -379,10 +377,8 @@ static int ath3k_load_syscfg(struct usb_ fw_version.rom_version, clk_value, ".dfu"); ret = request_firmware(&firmware, filename, &udev->dev); @@ -202,7 +202,7 @@ upstream submission. fw->size, fw_name); --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c -@@ -1164,10 +1164,8 @@ static void sdma_load_firmware(const str +@@ -1163,10 +1163,8 @@ static void sdma_load_firmware(const str const struct sdma_script_start_addrs *addr; unsigned short *ram_code; @@ -287,7 +287,7 @@ upstream submission. rdev->me_fw->size, fw_name); --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c -@@ -2020,10 +2020,6 @@ out: +@@ -2099,10 +2099,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 -@@ -542,10 +542,7 @@ static int radeon_cp_init_microcode(drm_ +@@ -528,10 +528,7 @@ static int radeon_cp_init_microcode(drm_ err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev); platform_device_unregister(pdev); @@ -533,7 +533,7 @@ upstream submission. if (state->microcode == NULL) { --- 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 +@@ -6261,12 +6261,6 @@ static void load_firmware_cb(const struc dprintk(1, ": %s\n", fw ? "firmware loaded" : "firmware not loaded"); if (!fw) { @@ -548,7 +548,7 @@ upstream submission. /* --- a/drivers/media/dvb-frontends/ds3000.c +++ b/drivers/media/dvb-frontends/ds3000.c -@@ -406,12 +406,8 @@ static int ds3000_firmware_ondemand(stru +@@ -401,12 +401,8 @@ static int ds3000_firmware_ondemand(stru DS3000_DEFAULT_FIRMWARE); ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE, state->i2c->dev.parent); @@ -560,8 +560,8 @@ upstream submission. return ret; - } - /* Make sure we don't recurse back through here during loading */ - state->skip_fw_load = 1; + ret = ds3000_load_firmware(fe, fw); + if (ret) --- 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 @@ -686,7 +686,7 @@ upstream submission. 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 -@@ -939,14 +939,8 @@ static int tda10071_init(struct dvb_fron +@@ -941,14 +941,8 @@ static int tda10071_init(struct dvb_fron /* request the firmware, this will block and timeout */ ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent); @@ -838,7 +838,7 @@ upstream submission. fw_data = (void *)fw_entry->data; --- 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 +@@ -3752,10 +3752,8 @@ static int pvr_boot(struct bttv *btv) int rc; rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev); @@ -992,7 +992,7 @@ upstream submission. --- 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 +@@ -448,13 +448,8 @@ static int blackbird_load_firmware(struc &dev->pci->dev); @@ -1208,7 +1208,7 @@ upstream submission. fw_tx->size, FIRMWARE_TX); --- a/drivers/net/ethernet/alteon/acenic.c +++ b/drivers/net/ethernet/alteon/acenic.c -@@ -2902,11 +2902,8 @@ static int __devinit ace_load_firmware(s +@@ -2902,11 +2902,8 @@ static int ace_load_firmware(struct net_ fw_name = "acenic/tg1.bin"; ret = request_firmware(&fw, fw_name, &ap->pdev->dev); @@ -1223,7 +1223,7 @@ upstream submission. --- a/drivers/net/ethernet/broadcom/bnx2.c +++ b/drivers/net/ethernet/broadcom/bnx2.c -@@ -3676,16 +3676,13 @@ static int bnx2_request_uncached_firmwar +@@ -3680,16 +3680,13 @@ static int bnx2_request_uncached_firmwar } rc = request_firmware(&bp->mips_firmware, mips_fw_file, &bp->pdev->dev); @@ -1245,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 -@@ -11645,11 +11645,8 @@ static int bnx2x_init_firmware(struct bn +@@ -11939,11 +11939,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); @@ -1260,7 +1260,7 @@ upstream submission. if (rc) { --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c -@@ -10161,11 +10161,8 @@ static int tg3_request_firmware(struct t +@@ -10449,11 +10449,8 @@ static int tg3_request_firmware(struct t { const __be32 *fw_data; @@ -1331,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 -@@ -918,11 +918,8 @@ static int upgrade_fw(struct adapter *ad +@@ -1008,11 +1008,8 @@ static int upgrade_fw(struct adapter *ad struct device *dev = adap->pdev_dev; ret = request_firmware(&fw, FW_FNAME, dev); @@ -1358,7 +1358,7 @@ upstream submission. netif_info(nic, probe, nic->netdev, --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c -@@ -594,8 +594,6 @@ static int myri10ge_load_hotplug_firmwar +@@ -584,8 +584,6 @@ static int myri10ge_load_hotplug_firmwar unsigned i; if ((status = request_firmware(&fw, mgp->fw_name, dev)) < 0) { @@ -1451,16 +1451,15 @@ upstream submission. } else --- a/drivers/net/wireless/at76c50x-usb.c +++ b/drivers/net/wireless/at76c50x-usb.c -@@ -1554,14 +1554,8 @@ static struct fwentry *at76_load_firmwar +@@ -1553,13 +1553,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); - if (ret < 0) { -- dev_printk(KERN_ERR, &udev->dev, "firmware %s not found!\n", -- fwe->fwname); -- dev_printk(KERN_ERR, &udev->dev, -- "you may need to download the firmware from " -- "http://developer.berlios.de/projects/at76c503a/\n"); +- dev_err(&udev->dev, "firmware %s not found!\n", +- fwe->fwname); +- dev_err(&udev->dev, +- "you may need to download the firmware from http://developer.berlios.de/projects/at76c503a/\n"); + if (ret) goto exit; - } @@ -1485,7 +1484,7 @@ upstream submission. &hif_dev->udev->dev); --- a/drivers/net/wireless/ath/carl9170/usb.c +++ b/drivers/net/wireless/ath/carl9170/usb.c -@@ -1018,7 +1018,6 @@ static void carl9170_usb_firmware_step2( +@@ -1025,7 +1025,6 @@ static void carl9170_usb_firmware_step2( return; } @@ -1549,24 +1548,24 @@ 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 -@@ -3220,10 +3220,8 @@ static int brcmf_sdbrcm_download_code_fi +@@ -3208,10 +3208,8 @@ static int brcmf_sdbrcm_download_code_fi ret = request_firmware(&bus->firmware, BRCMF_SDIO_FW_NAME, &bus->sdiodev->func[2]->dev); - if (ret) { -- brcmf_dbg(ERROR, "Fail to request firmware %d\n", ret); +- brcmf_err("Fail to request firmware %d\n", ret); + if (ret) return ret; - } bus->fw_ptr = 0; memptr = memblock = kmalloc(MEMBLOCK + BRCMF_SDALIGN, GFP_ATOMIC); -@@ -3339,10 +3337,8 @@ static int brcmf_sdbrcm_download_nvram(s +@@ -3327,10 +3325,8 @@ static int brcmf_sdbrcm_download_nvram(s ret = request_firmware(&bus->firmware, BRCMF_SDIO_NV_NAME, &bus->sdiodev->func[2]->dev); - if (ret) { -- brcmf_dbg(ERROR, "Fail to request nvram %d\n", ret); +- brcmf_err("Fail to request nvram %d\n", ret); + if (ret) return ret; - } @@ -1575,7 +1574,7 @@ upstream submission. --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c -@@ -784,19 +784,13 @@ static int brcms_request_fw(struct brcms +@@ -807,19 +807,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); @@ -1599,7 +1598,7 @@ upstream submission. } --- a/drivers/net/wireless/ipw2x00/ipw2100.c +++ b/drivers/net/wireless/ipw2x00/ipw2100.c -@@ -8467,12 +8467,8 @@ static int ipw2100_get_firmware(struct i +@@ -8464,12 +8464,8 @@ static int ipw2100_get_firmware(struct i rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev); @@ -1667,7 +1666,7 @@ upstream submission. } --- a/drivers/net/wireless/mwifiex/main.c +++ b/drivers/net/wireless/mwifiex/main.c -@@ -315,11 +315,8 @@ static void mwifiex_fw_dpc(const struct +@@ -316,11 +316,8 @@ static void mwifiex_fw_dpc(const struct struct mwifiex_adapter *adapter = context; struct mwifiex_fw_image fw; @@ -1682,7 +1681,7 @@ upstream submission. adapter->firmware = firmware; --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c -@@ -5300,16 +5300,12 @@ static int mwl8k_firmware_load_success(s +@@ -5320,16 +5320,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; @@ -1700,7 +1699,7 @@ upstream submission. priv->fw_helper = fw; rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode, true); -@@ -5344,11 +5340,8 @@ static void mwl8k_fw_state_machine(const +@@ -5364,11 +5360,8 @@ static void mwl8k_fw_state_machine(const break; case FW_STATE_LOADING_ALT: @@ -1713,7 +1712,7 @@ upstream submission. priv->fw_ucode = fw; rc = mwl8k_firmware_load_success(priv); if (rc) -@@ -5386,10 +5379,8 @@ retry: +@@ -5406,10 +5399,8 @@ retry: /* Ask userland hotplug daemon for the device firmware */ rc = mwl8k_request_firmware(priv, fw_image, nowait); @@ -1761,7 +1760,7 @@ upstream submission. --- a/drivers/net/wireless/orinoco/orinoco_usb.c +++ b/drivers/net/wireless/orinoco/orinoco_usb.c -@@ -1684,7 +1684,6 @@ static int ezusb_probe(struct usb_interf +@@ -1683,7 +1683,6 @@ static int ezusb_probe(struct usb_interf if (firmware.size && firmware.code) { ezusb_firmware_download(upriv, &firmware); } else { @@ -1846,7 +1845,7 @@ upstream submission. } --- a/drivers/net/wireless/rtlwifi/rtl8192se/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/sw.c -@@ -100,7 +100,6 @@ static void rtl92se_fw_cb(const struct f +@@ -97,7 +97,6 @@ static void rtl92se_fw_cb(const struct f "Firmware callback routine entered!\n"); complete(&rtlpriv->firmware_loading_complete); if (!firmware) { @@ -2038,7 +2037,7 @@ upstream submission. } --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c -@@ -4993,8 +4993,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha, +@@ -5020,8 +5020,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha, /* Load firmware blob. */ blob = qla2x00_request_firmware(vha); if (!blob) { @@ -2047,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; -@@ -5095,8 +5093,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t * +@@ -5122,8 +5120,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t * /* Load firmware blob. */ blob = qla2x00_request_firmware(vha); if (!blob) { @@ -2058,7 +2057,7 @@ upstream submission. QLA_FW_URL ".\n"); --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c -@@ -2463,11 +2463,8 @@ try_blob_fw: +@@ -2440,11 +2440,8 @@ try_blob_fw: /* Load firmware blob. */ blob = ha->hablob = qla2x00_request_firmware(vha); @@ -2073,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 -@@ -4889,8 +4889,6 @@ qla2x00_request_firmware(scsi_qla_host_t +@@ -4902,8 +4902,6 @@ qla2x00_request_firmware(scsi_qla_host_t goto out; if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) { @@ -2084,7 +2083,7 @@ upstream submission. goto out; --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c -@@ -475,11 +475,8 @@ static int __devinit qlogicpti_load_firm +@@ -475,11 +475,8 @@ static int qlogicpti_load_firmware(struc int i, timeout; err = request_firmware(&fw, fwname, &qpti->op->dev); @@ -2099,7 +2098,7 @@ upstream submission. fw->size, fwname); --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c -@@ -2428,11 +2428,8 @@ static void usbdux_firmware_request_comp +@@ -2371,11 +2371,8 @@ static void usbdux_firmware_request_comp struct usb_interface *uinterf = usbduxsub_tmp->interface; int ret; @@ -2114,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 -@@ -2409,11 +2409,8 @@ static void usbdux_firmware_request_comp +@@ -2357,11 +2357,8 @@ static void usbdux_firmware_request_comp struct usb_interface *uinterf = usbduxsub_tmp->interface; int ret; @@ -2207,20 +2206,20 @@ upstream submission. "go7007 firmware\n", fw_name); --- a/drivers/staging/media/go7007/go7007-fw.c +++ b/drivers/staging/media/go7007/go7007-fw.c -@@ -1576,12 +1576,8 @@ int go7007_construct_fw_image(struct go7 +@@ -1575,12 +1575,8 @@ int go7007_construct_fw_image(struct go7 default: return -1; } - if (request_firmware(&fw_entry, go->board_info->firmware, go->dev)) { -- printk(KERN_ERR -- "go7007: unable to load firmware from file \"%s\"\n", +- dev_err(go->dev, +- "unable to load firmware from file \"%s\"\n", - go->board_info->firmware); + if (request_firmware(&fw_entry, go->board_info->firmware, go->dev)) return -1; - } code = kzalloc(codespace * 2, GFP_KERNEL); if (code == NULL) { - printk(KERN_ERR "go7007: unable to allocate %d bytes for " + dev_err(go->dev, --- a/drivers/staging/media/go7007/s2250-loader.c +++ b/drivers/staging/media/go7007/s2250-loader.c @@ -98,12 +98,8 @@ static int s2250loader_probe(struct usb_ @@ -2288,7 +2287,7 @@ upstream submission. usb_set_intfdata(pusb_intf, NULL); --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c -@@ -518,11 +518,8 @@ static int slic_card_download_gbrcv(stru +@@ -485,11 +485,8 @@ static int slic_card_download_gbrcv(stru } ret = request_firmware(&fw, file, &adapter->pcidev->dev); @@ -2301,8 +2300,8 @@ upstream submission. rcvucodelen = *(u32 *)(fw->data + index); index += 4; -@@ -597,11 +594,8 @@ static int slic_card_download(struct ada - break; +@@ -563,11 +560,8 @@ static int slic_card_download(struct ada + return -ENOENT; } ret = request_firmware(&fw, file, &adapter->pcidev->dev); - if (ret) { @@ -2313,25 +2312,26 @@ upstream submission. - } numsects = *(u32 *)(fw->data + index); index += 4; - ASSERT(numsects <= 3); + for (i = 0; i < numsects; i++) { --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c -@@ -76,11 +76,8 @@ FIRMWAREbDownload( - int rc; +@@ -74,11 +74,8 @@ FIRMWAREbDownload( + spin_unlock_irq(&pDevice->lock); - rc = request_firmware(&pDevice->firmware, FIRMWARE_NAME, dev); -- if (rc) { -- dev_err(dev, "firmware file %s request failed (%d)\n", -- FIRMWARE_NAME, rc); -+ if (rc) - goto out; -- } - } - fw = pDevice->firmware; + rc = request_firmware(&fw, FIRMWARE_NAME, dev); +- if (rc) { +- dev_err(dev, "firmware file %s request failed (%d)\n", +- FIRMWARE_NAME, rc); +- goto out; +- } ++ if (rc) ++ goto out; + pBuffer = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL); + if (!pBuffer) --- a/drivers/tty/cyclades.c +++ b/drivers/tty/cyclades.c -@@ -3539,10 +3539,8 @@ static int __devinit cyz_load_fw(struct +@@ -3539,10 +3539,8 @@ static int cyz_load_fw(struct pci_dev *p int retval; retval = request_firmware(&fw, "cyzfirm.bin", &pdev->dev); @@ -2516,7 +2516,7 @@ upstream submission. 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( +@@ -80,12 +80,8 @@ static int ezusb_ihex_firmware_download( const struct ihex_binrec *record; if (request_ihex_firmware(&firmware, firmware_path, @@ -2542,7 +2542,7 @@ upstream submission. } --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c -@@ -310,11 +310,8 @@ static void update_edgeport_E2PROM(struc +@@ -306,11 +306,8 @@ static void update_edgeport_E2PROM(struc response = request_ihex_firmware(&fw, fw_name, &edge_serial->serial->dev->dev); @@ -2557,7 +2557,7 @@ upstream submission. BootMajorVersion = rec->data[0]; --- a/drivers/usb/serial/io_ti.c +++ b/drivers/usb/serial/io_ti.c -@@ -845,8 +845,6 @@ static int build_i2c_fw_hdr(__u8 *header +@@ -844,8 +844,6 @@ static int build_i2c_fw_hdr(__u8 *header err = request_firmware(&fw, fw_name, dev); if (err) { @@ -2566,7 +2566,7 @@ upstream submission. kfree(buffer); return err; } -@@ -1404,8 +1402,6 @@ static int download_fw(struct edgeport_s +@@ -1403,8 +1401,6 @@ static int download_fw(struct edgeport_s err = request_firmware(&fw, fw_name, dev); if (err) { @@ -2605,7 +2605,7 @@ upstream submission. if ((fw_entry->size < 8*1024) || (fw_entry->size > 64*1024)) { --- a/drivers/video/metronomefb.c +++ b/drivers/video/metronomefb.c -@@ -677,10 +677,8 @@ static int __devinit metronomefb_probe(s +@@ -677,10 +677,8 @@ static int metronomefb_probe(struct plat a) request the waveform file from userspace b) process waveform and decode into metromem */ retval = request_firmware(&fw_entry, "metronome.wbf", &dev->dev); @@ -2619,7 +2619,7 @@ upstream submission. par); --- a/sound/drivers/vx/vx_hwdep.c +++ b/sound/drivers/vx/vx_hwdep.c -@@ -73,10 +73,8 @@ int snd_vx_setup_firmware(struct vx_core +@@ -71,10 +71,8 @@ int snd_vx_setup_firmware(struct vx_core if (! fw_files[chip->type][i]) continue; sprintf(path, "vx/%s", fw_files[chip->type][i]); @@ -2694,13 +2694,12 @@ upstream submission. buf = firmware->data; --- a/sound/pci/asihpi/hpidspcd.c +++ b/sound/pci/asihpi/hpidspcd.c -@@ -49,9 +49,6 @@ short hpi_dsp_code_open(u32 adapter, voi +@@ -49,8 +49,6 @@ short hpi_dsp_code_open(u32 adapter, voi err = request_firmware(&firmware, fw_name, &dev->dev); if (err || !firmware) { -- dev_printk(KERN_ERR, &dev->dev, -- "%d, request_firmware failed for %s\n", err, -- fw_name); +- dev_err(&dev->dev, "%d, request_firmware failed for %s\n", +- err, fw_name); goto error1; } if (firmware->size < sizeof(header)) { @@ -2734,26 +2733,27 @@ upstream submission. return err; --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c -@@ -668,10 +668,8 @@ static int snd_emu1010_load_firmware(str - const struct firmware *fw_entry; +@@ -854,10 +854,8 @@ static int snd_emu10k1_emu1010_init(stru + } - err = request_firmware(&fw_entry, filename, &emu->pci->dev); -- if (err != 0) { -- snd_printk(KERN_ERR "firmware: %s not found. Err = %d\n", filename, err); -+ if (err != 0) - return err; -- } - snd_printk(KERN_INFO "firmware size = 0x%zx\n", fw_entry->size); - - /* The FPGA is a Xilinx Spartan IIE XC2S50E */ + err = request_firmware(&emu->firmware, filename, &emu->pci->dev); +- if (err != 0) { +- snd_printk(KERN_ERR "emu1010: firmware: %s not found. Err = %d\n", filename, err); ++ if (err != 0) + return err; +- } + snd_printk(KERN_INFO "emu1010: firmware file = %s, size = 0x%zx\n", + filename, emu->firmware->size); + } --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c -@@ -3292,10 +3292,8 @@ static void azx_firmware_cb(const struct +@@ -3424,11 +3424,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"); +- snd_printk(KERN_ERR SFX "%s: Cannot load firmware, aborting\n", +- pci_name(chip->pci)); + if (!fw) goto error; - } @@ -2762,7 +2762,7 @@ upstream submission. 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 +@@ -2346,7 +2346,6 @@ static int snd_korg1212_create(struct sn err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev); if (err < 0) { release_firmware(dsp_code); @@ -2772,7 +2772,7 @@ upstream submission. } --- a/sound/pci/mixart/mixart_hwdep.c +++ b/sound/pci/mixart/mixart_hwdep.c -@@ -566,10 +566,8 @@ int snd_mixart_setup_firmware(struct mix +@@ -558,10 +558,8 @@ int snd_mixart_setup_firmware(struct mix for (i = 0; i < 3; i++) { sprintf(path, "mixart/%s", fw_files[i]); @@ -2786,7 +2786,7 @@ upstream submission. release_firmware(fw_entry); --- a/sound/pci/pcxhr/pcxhr_hwdep.c +++ b/sound/pci/pcxhr/pcxhr_hwdep.c -@@ -390,11 +390,8 @@ int pcxhr_setup_firmware(struct pcxhr_mg +@@ -381,11 +381,8 @@ int pcxhr_setup_firmware(struct pcxhr_mg if (!fw_files[fw_set][i]) continue; sprintf(path, "pcxhr/%s", fw_files[fw_set][i]); @@ -2816,7 +2816,7 @@ upstream submission. if (err) { --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c -@@ -5369,10 +5369,8 @@ static int hdsp_request_fw_loader(struct +@@ -5378,10 +5378,8 @@ static int hdsp_request_fw_loader(struct return -EINVAL; } @@ -2825,12 +2825,12 @@ upstream submission. + if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) return -ENOENT; - } - if (fw->size < sizeof(hdsp->firmware_cache)) { + if (fw->size < HDSP_FIRMWARE_SIZE) { snd_printk(KERN_ERR "Hammerfall-DSP: too short firmware size %d (expected %d)\n", - (int)fw->size, (int)sizeof(hdsp->firmware_cache)); + (int)fw->size, HDSP_FIRMWARE_SIZE); --- a/sound/soc/codecs/wm2000.c +++ b/sound/soc/codecs/wm2000.c -@@ -834,10 +834,8 @@ static int __devinit wm2000_i2c_probe(st +@@ -834,10 +834,8 @@ static int wm2000_i2c_probe(struct i2c_c } ret = request_firmware(&fw, filename, &i2c->dev); diff --git a/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch b/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch deleted file mode 100644 index e18a9ca6a..000000000 --- a/debian/patches/bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch +++ /dev/null @@ -1,48 +0,0 @@ -From: Ben Hutchings -Date: Fri, 16 Nov 2012 15:43:59 +0000 -Subject: [5/5] pch_gbe, ptp_pch: Fix the dependency direction between these - drivers - -commit 18d359ceb04485df0e387e04b0e52a761c4c58a0 upstream. - -In commit a24006ed12616bde1bbdb26868495906a212d8dc ('ptp: Enable clock -drivers along with associated net/PHY drivers') I wrongly made -PTP_1588_CLOCK_PCH depend on PCH_GBE. The dependency is really the -other way around. Therefore make PCH_GBE select PTP_1588_CLOCK_PCH -and remove the 'default y' from the latter. - -Reported-by: Randy Dunlap -Signed-off-by: Ben Hutchings -Acked-by: Randy Dunlap -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 + - drivers/ptp/Kconfig | 2 -- - 2 files changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -index 00bc4fc..34d05bf 100644 ---- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -@@ -7,6 +7,7 @@ config PCH_GBE - depends on PCI - select NET_CORE - select MII -+ select PTP_1588_CLOCK_PCH - ---help--- - This is a gigabit ethernet driver for EG20T PCH. - EG20T PCH is the platform controller hub that is used in Intel's -diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig -index 70c5836..1ea6f1d 100644 ---- a/drivers/ptp/Kconfig -+++ b/drivers/ptp/Kconfig -@@ -72,9 +72,7 @@ config DP83640_PHY - - config PTP_1588_CLOCK_PCH - tristate "Intel PCH EG20T as PTP clock" -- depends on PCH_GBE - select PTP_1588_CLOCK -- default y - help - This driver adds support for using the PCH EG20T as a PTP - clock. The hardware supports time stamping of PTP packets diff --git a/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch b/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch deleted file mode 100644 index 73ab4b9b9..000000000 --- a/debian/patches/bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch +++ /dev/null @@ -1,77 +0,0 @@ -From: Ben Hutchings -Date: Wed, 31 Oct 2012 15:31:29 +0000 -Subject: [1/5] pps, ptp: Remove dependencies on EXPERIMENTAL - -commit c56283034ce28f99de494b69896528ae90cd9730 upstream. - -These are now established subsystems, and we want drivers to be able -to select PPS and PTP_1588_CLOCK without depending on EXPERIMENTAL. -Further, the use of EXPERIMENTAL is now deprecated in general. - -Signed-off-by: Ben Hutchings -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/intel/Kconfig | 4 ++-- - drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 - - drivers/pps/Kconfig | 1 - - drivers/ptp/Kconfig | 1 - - 4 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig -index 0cafe4f..9e49217 100644 ---- a/drivers/net/ethernet/intel/Kconfig -+++ b/drivers/net/ethernet/intel/Kconfig -@@ -123,7 +123,7 @@ config IGB_DCA - config IGB_PTP - bool "PTP Hardware Clock (PHC)" - default n -- depends on IGB && EXPERIMENTAL -+ depends on IGB - select PPS - select PTP_1588_CLOCK - ---help--- -@@ -225,7 +225,7 @@ config IXGBE_DCB - config IXGBE_PTP - bool "PTP Clock Support" - default n -- depends on IXGBE && EXPERIMENTAL -+ depends on IXGBE - select PPS - select PTP_1588_CLOCK - ---help--- -diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -index 5296cc8..9867bc6 100644 ---- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -@@ -26,7 +26,6 @@ if PCH_GBE - config PCH_PTP - bool "PCH PTP clock support" - default n -- depends on EXPERIMENTAL - select PPS - select PTP_1588_CLOCK - select PTP_1588_CLOCK_PCH -diff --git a/drivers/pps/Kconfig b/drivers/pps/Kconfig -index 258ca59..982d16b 100644 ---- a/drivers/pps/Kconfig -+++ b/drivers/pps/Kconfig -@@ -6,7 +6,6 @@ menu "PPS support" - - config PPS - tristate "PPS support" -- depends on EXPERIMENTAL - ---help--- - PPS (Pulse Per Second) is a special pulse provided by some GPS - antennae. Userland can use it to get a high-precision time -diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig -index ffdf712..a6e4b7c 100644 ---- a/drivers/ptp/Kconfig -+++ b/drivers/ptp/Kconfig -@@ -9,7 +9,6 @@ comment "Enable Device Drivers -> PPS to see the PTP clock options." - - config PTP_1588_CLOCK - tristate "PTP clock support" -- depends on EXPERIMENTAL - depends on PPS - help - The IEEE 1588 standard defines a method to precisely diff --git a/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch b/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch deleted file mode 100644 index ff5834972..000000000 --- a/debian/patches/bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch +++ /dev/null @@ -1,784 +0,0 @@ -From: Ben Hutchings -Date: Wed, 31 Oct 2012 15:33:52 +0000 -Subject: [3/5] ptp: Enable clock drivers along with associated net/PHY - drivers - -commit a24006ed12616bde1bbdb26868495906a212d8dc upstream. - -Where a PTP clock driver is associated with a net or PHY driver, it -should be enabled automatically whenever that driver is enabled. -Therefore: - -- Make PTP clock drivers select rather than depending on PTP_1588_CLOCK -- Remove separate boolean options for PTP clock drivers that are built - as part of net driver modules. (This also fixes cases where the PTP - subsystem is wrongly forced to be built-in.) -- Set 'default y' for PTP clock drivers that depend on specific net - drivers but are built separately - -Signed-off-by: Ben Hutchings -Signed-off-by: David S. Miller -[bwh: Backported to 3.7: adjust context; drop removal of #ifdefs that - aren't present] ---- ---- a/drivers/net/ethernet/intel/Kconfig -+++ b/drivers/net/ethernet/intel/Kconfig -@@ -93,6 +93,7 @@ config E1000E - config IGB - tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support" - depends on PCI -+ select PTP_1588_CLOCK - ---help--- - This driver supports Intel(R) 82575/82576 gigabit ethernet family of - adapters. For more information on how to identify your adapter, go -@@ -120,18 +121,6 @@ config IGB_DCA - driver. DCA is a method for warming the CPU cache before data - is used, with the intent of lessening the impact of cache misses. - --config IGB_PTP -- bool "PTP Hardware Clock (PHC)" -- default n -- depends on IGB -- select PTP_1588_CLOCK -- ---help--- -- Say Y here if you want to use PTP Hardware Clock (PHC) in the -- driver. Only the basic clock operations have been implemented. -- -- Every timestamp and clock read operations must consult the -- overflow counter to form a correct time value. -- - config IGBVF - tristate "Intel(R) 82576 Virtual Function Ethernet support" - depends on PCI -@@ -179,6 +168,7 @@ config IXGBE - tristate "Intel(R) 10GbE PCI Express adapters support" - depends on PCI && INET - select MDIO -+ select PTP_1588_CLOCK - ---help--- - This driver supports Intel(R) 10GbE PCI Express family of - adapters. For more information on how to identify your adapter, go -@@ -221,18 +211,6 @@ config IXGBE_DCB - - If unsure, say N. - --config IXGBE_PTP -- bool "PTP Clock Support" -- default n -- depends on IXGBE -- select PTP_1588_CLOCK -- ---help--- -- Say Y here if you want support for 1588 Timestamping with a -- PHC device, using the PTP 1588 Clock support. This is -- required to enable timestamping support for the device. -- -- If unsure, say N. -- - config IXGBEVF - tristate "Intel(R) 82599 Virtual Function Ethernet support" - depends on PCI_MSI ---- a/drivers/net/ethernet/intel/igb/Makefile -+++ b/drivers/net/ethernet/intel/igb/Makefile -@@ -34,6 +34,4 @@ obj-$(CONFIG_IGB) += igb.o - - igb-objs := igb_main.o igb_ethtool.o e1000_82575.o \ - e1000_mac.o e1000_nvm.o e1000_phy.o e1000_mbx.o \ -- e1000_i210.o -- --igb-$(CONFIG_IGB_PTP) += igb_ptp.o -+ e1000_i210.o igb_ptp.o ---- a/drivers/net/ethernet/intel/igb/igb.h -+++ b/drivers/net/ethernet/intel/igb/igb.h -@@ -34,11 +34,9 @@ - #include "e1000_mac.h" - #include "e1000_82575.h" - --#ifdef CONFIG_IGB_PTP - #include - #include - #include --#endif /* CONFIG_IGB_PTP */ - #include - #include - -@@ -373,7 +371,6 @@ struct igb_adapter { - u32 wvbr; - u32 *shadow_vfta; - --#ifdef CONFIG_IGB_PTP - struct ptp_clock *ptp_clock; - struct ptp_clock_info ptp_caps; - struct delayed_work ptp_overflow_work; -@@ -382,7 +379,6 @@ struct igb_adapter { - spinlock_t tmreg_lock; - struct cyclecounter cc; - struct timecounter tc; --#endif /* CONFIG_IGB_PTP */ - - char fw_version[32]; - }; -@@ -436,7 +432,6 @@ extern bool igb_has_link(struct igb_adap - extern void igb_set_ethtool_ops(struct net_device *); - extern void igb_power_up_link(struct igb_adapter *); - extern void igb_set_fw_version(struct igb_adapter *); --#ifdef CONFIG_IGB_PTP - extern void igb_ptp_init(struct igb_adapter *adapter); - extern void igb_ptp_stop(struct igb_adapter *adapter); - extern void igb_ptp_reset(struct igb_adapter *adapter); -@@ -447,7 +442,6 @@ extern void igb_ptp_rx_hwtstamp(struct i - struct sk_buff *skb); - extern int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, - struct ifreq *ifr, int cmd); --#endif /* CONFIG_IGB_PTP */ - - static inline s32 igb_reset_phy(struct e1000_hw *hw) - { ---- a/drivers/net/ethernet/intel/igb/igb_ethtool.c -+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c -@@ -2301,7 +2301,6 @@ static int igb_get_ts_info(struct net_de - struct igb_adapter *adapter = netdev_priv(dev); - - switch (adapter->hw.mac.type) { --#ifdef CONFIG_IGB_PTP - case e1000_82576: - case e1000_82580: - case e1000_i350: -@@ -2337,7 +2336,6 @@ static int igb_get_ts_info(struct net_de - (1 << HWTSTAMP_FILTER_PTP_V2_EVENT); - - return 0; --#endif /* CONFIG_IGB_PTP */ - default: - return -EOPNOTSUPP; - } ---- a/drivers/net/ethernet/intel/igb/igb_main.c -+++ b/drivers/net/ethernet/intel/igb/igb_main.c -@@ -1706,10 +1706,8 @@ void igb_reset(struct igb_adapter *adapt - /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */ - wr32(E1000_VET, ETHERNET_IEEE_VLAN_TYPE); - --#ifdef CONFIG_IGB_PTP - /* Re-enable PTP, where applicable. */ - igb_ptp_reset(adapter); --#endif /* CONFIG_IGB_PTP */ - - igb_get_phy_info(hw); - } -@@ -2141,10 +2139,8 @@ static int __devinit igb_probe(struct pc - - #endif - --#ifdef CONFIG_IGB_PTP - /* do hw tstamp init after resetting */ - igb_ptp_init(adapter); --#endif /* CONFIG_IGB_PTP */ - - dev_info(&pdev->dev, "Intel(R) Gigabit Ethernet Network Connection\n"); - /* print bus type/speed/width info */ -@@ -2219,9 +2215,7 @@ static void __devexit igb_remove(struct - struct e1000_hw *hw = &adapter->hw; - - pm_runtime_get_noresume(&pdev->dev); --#ifdef CONFIG_IGB_PTP - igb_ptp_stop(adapter); --#endif /* CONFIG_IGB_PTP */ - - /* - * The watchdog timer may be rescheduled, so explicitly -@@ -3112,10 +3106,8 @@ void igb_configure_rx_ring(struct igb_ad - srrctl |= (PAGE_SIZE / 2) >> E1000_SRRCTL_BSIZEPKT_SHIFT; - #endif - srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; --#ifdef CONFIG_IGB_PTP - if (hw->mac.type >= e1000_82580) - srrctl |= E1000_SRRCTL_TIMESTAMP; --#endif /* CONFIG_IGB_PTP */ - /* Only set Drop Enable if we are supporting multiple queues */ - if (adapter->vfs_allocated_count || adapter->num_rx_queues > 1) - srrctl |= E1000_SRRCTL_DROP_EN; -@@ -4159,11 +4151,9 @@ static __le32 igb_tx_cmd_type(u32 tx_fla - if (tx_flags & IGB_TX_FLAGS_VLAN) - cmd_type |= cpu_to_le32(E1000_ADVTXD_DCMD_VLE); - --#ifdef CONFIG_IGB_PTP - /* set timestamp bit if present */ - if (unlikely(tx_flags & IGB_TX_FLAGS_TSTAMP)) - cmd_type |= cpu_to_le32(E1000_ADVTXD_MAC_TSTAMP); --#endif /* CONFIG_IGB_PTP */ - - /* set segmentation bits for TSO */ - if (tx_flags & IGB_TX_FLAGS_TSO) -@@ -4372,9 +4362,7 @@ static inline int igb_maybe_stop_tx(stru - netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb, - struct igb_ring *tx_ring) - { --#ifdef CONFIG_IGB_PTP - struct igb_adapter *adapter = netdev_priv(tx_ring->netdev); --#endif /* CONFIG_IGB_PTP */ - struct igb_tx_buffer *first; - int tso; - u32 tx_flags = 0; -@@ -4397,7 +4385,6 @@ netdev_tx_t igb_xmit_frame_ring(struct s - first->bytecount = skb->len; - first->gso_segs = 1; - --#ifdef CONFIG_IGB_PTP - if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && - !(adapter->ptp_tx_skb))) { - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; -@@ -4407,7 +4394,6 @@ netdev_tx_t igb_xmit_frame_ring(struct s - if (adapter->hw.mac.type == e1000_82576) - schedule_work(&adapter->ptp_tx_work); - } --#endif /* CONFIG_IGB_PTP */ - - if (vlan_tx_tag_present(skb)) { - tx_flags |= IGB_TX_FLAGS_VLAN; -@@ -4800,7 +4786,6 @@ static irqreturn_t igb_msix_other(int ir - mod_timer(&adapter->watchdog_timer, jiffies + 1); - } - --#ifdef CONFIG_IGB_PTP - if (icr & E1000_ICR_TS) { - u32 tsicr = rd32(E1000_TSICR); - -@@ -4811,7 +4796,6 @@ static irqreturn_t igb_msix_other(int ir - schedule_work(&adapter->ptp_tx_work); - } - } --#endif /* CONFIG_IGB_PTP */ - - wr32(E1000_EIMS, adapter->eims_other); - -@@ -5545,7 +5529,6 @@ static irqreturn_t igb_intr_msi(int irq, - mod_timer(&adapter->watchdog_timer, jiffies + 1); - } - --#ifdef CONFIG_IGB_PTP - if (icr & E1000_ICR_TS) { - u32 tsicr = rd32(E1000_TSICR); - -@@ -5556,7 +5539,6 @@ static irqreturn_t igb_intr_msi(int irq, - schedule_work(&adapter->ptp_tx_work); - } - } --#endif /* CONFIG_IGB_PTP */ - - napi_schedule(&q_vector->napi); - -@@ -5599,7 +5581,6 @@ static irqreturn_t igb_intr(int irq, voi - mod_timer(&adapter->watchdog_timer, jiffies + 1); - } - --#ifdef CONFIG_IGB_PTP - if (icr & E1000_ICR_TS) { - u32 tsicr = rd32(E1000_TSICR); - -@@ -5610,7 +5591,6 @@ static irqreturn_t igb_intr(int irq, voi - schedule_work(&adapter->ptp_tx_work); - } - } --#endif /* CONFIG_IGB_PTP */ - - napi_schedule(&q_vector->napi); - -@@ -5999,9 +5979,7 @@ static bool igb_clean_rx_irq(struct igb_ - goto next_desc; - } - --#ifdef CONFIG_IGB_PTP - igb_ptp_rx_hwtstamp(q_vector, rx_desc, skb); --#endif /* CONFIG_IGB_PTP */ - igb_rx_hash(rx_ring, rx_desc, skb); - igb_rx_checksum(rx_ring, rx_desc, skb); - igb_rx_vlan(rx_ring, rx_desc, skb); -@@ -6207,10 +6185,8 @@ static int igb_ioctl(struct net_device * - case SIOCGMIIREG: - case SIOCSMIIREG: - return igb_mii_ioctl(netdev, ifr, cmd); --#ifdef CONFIG_IGB_PTP - case SIOCSHWTSTAMP: - return igb_ptp_hwtstamp_ioctl(netdev, ifr, cmd); --#endif /* CONFIG_IGB_PTP */ - default: - return -EOPNOTSUPP; - } ---- a/drivers/net/ethernet/intel/ixgbe/Makefile -+++ b/drivers/net/ethernet/intel/ixgbe/Makefile -@@ -34,11 +34,10 @@ obj-$(CONFIG_IXGBE) += ixgbe.o - - ixgbe-objs := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o ixgbe_debugfs.o\ - ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o \ -- ixgbe_mbx.o ixgbe_x540.o ixgbe_lib.o -+ ixgbe_mbx.o ixgbe_x540.o ixgbe_lib.o ixgbe_ptp.o - - ixgbe-$(CONFIG_IXGBE_DCB) += ixgbe_dcb.o ixgbe_dcb_82598.o \ - ixgbe_dcb_82599.o ixgbe_dcb_nl.o - --ixgbe-$(CONFIG_IXGBE_PTP) += ixgbe_ptp.o - ixgbe-$(CONFIG_IXGBE_HWMON) += ixgbe_sysfs.o - ixgbe-$(CONFIG_FCOE:m=y) += ixgbe_fcoe.o ---- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h -+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h -@@ -36,11 +36,9 @@ - #include - #include - --#ifdef CONFIG_IXGBE_PTP - #include - #include - #include --#endif /* CONFIG_IXGBE_PTP */ - - #include "ixgbe_type.h" - #include "ixgbe_common.h" -@@ -571,7 +569,6 @@ struct ixgbe_adapter { - u32 interrupt_event; - u32 led_reg; - --#ifdef CONFIG_IXGBE_PTP - struct ptp_clock *ptp_clock; - struct ptp_clock_info ptp_caps; - unsigned long last_overflow_check; -@@ -581,7 +578,6 @@ struct ixgbe_adapter { - int rx_hwtstamp_filter; - u32 base_incval; - u32 cycle_speed; --#endif /* CONFIG_IXGBE_PTP */ - - /* SR-IOV */ - DECLARE_BITMAP(active_vfs, IXGBE_MAX_VF_FUNCTIONS); -@@ -739,7 +735,6 @@ static inline struct netdev_queue *txrin - return netdev_get_tx_queue(ring->netdev, ring->queue_index); - } - --#ifdef CONFIG_IXGBE_PTP - extern void ixgbe_ptp_init(struct ixgbe_adapter *adapter); - extern void ixgbe_ptp_stop(struct ixgbe_adapter *adapter); - extern void ixgbe_ptp_overflow_check(struct ixgbe_adapter *adapter); -@@ -752,6 +747,5 @@ extern int ixgbe_ptp_hwtstamp_ioctl(stru - struct ifreq *ifr, int cmd); - extern void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter); - extern void ixgbe_ptp_check_pps_event(struct ixgbe_adapter *adapter, u32 eicr); --#endif /* CONFIG_IXGBE_PTP */ - - #endif /* _IXGBE_H_ */ ---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -@@ -2669,7 +2669,6 @@ static int ixgbe_get_ts_info(struct net_ - struct ixgbe_adapter *adapter = netdev_priv(dev); - - switch (adapter->hw.mac.type) { --#ifdef CONFIG_IXGBE_PTP - case ixgbe_mac_X540: - case ixgbe_mac_82599EB: - info->so_timestamping = -@@ -2695,7 +2694,6 @@ static int ixgbe_get_ts_info(struct net_ - (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) | - (1 << HWTSTAMP_FILTER_PTP_V2_EVENT); - break; --#endif /* CONFIG_IXGBE_PTP */ - default: - return ethtool_op_get_ts_info(dev, info); - break; ---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c -+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c -@@ -791,10 +791,8 @@ static bool ixgbe_clean_tx_irq(struct ix - total_bytes += tx_buffer->bytecount; - total_packets += tx_buffer->gso_segs; - --#ifdef CONFIG_IXGBE_PTP - if (unlikely(tx_buffer->tx_flags & IXGBE_TX_FLAGS_TSTAMP)) - ixgbe_ptp_tx_hwtstamp(q_vector, tx_buffer->skb); --#endif - - /* free the skb */ - dev_kfree_skb_any(tx_buffer->skb); -@@ -1369,9 +1367,7 @@ static void ixgbe_process_skb_fields(str - - ixgbe_rx_checksum(rx_ring, rx_desc, skb); - --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_rx_hwtstamp(rx_ring->q_vector, rx_desc, skb); --#endif - - if ((dev->features & NETIF_F_HW_VLAN_RX) && - ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_VP)) { -@@ -2324,10 +2320,8 @@ static inline void ixgbe_irq_enable(stru - break; - } - --#ifdef CONFIG_IXGBE_PTP - if (adapter->hw.mac.type == ixgbe_mac_X540) - mask |= IXGBE_EIMS_TIMESYNC; --#endif - - if ((adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) && - !(adapter->flags2 & IXGBE_FLAG2_FDIR_REQUIRES_REINIT)) -@@ -2393,10 +2387,8 @@ static irqreturn_t ixgbe_msix_other(int - - ixgbe_check_fan_failure(adapter, eicr); - --#ifdef CONFIG_IXGBE_PTP - if (unlikely(eicr & IXGBE_EICR_TIMESYNC)) - ixgbe_ptp_check_pps_event(adapter, eicr); --#endif - - /* re-enable the original interrupt state, no lsc, no queues */ - if (!test_bit(__IXGBE_DOWN, &adapter->state)) -@@ -2588,10 +2580,8 @@ static irqreturn_t ixgbe_intr(int irq, v - } - - ixgbe_check_fan_failure(adapter, eicr); --#ifdef CONFIG_IXGBE_PTP - if (unlikely(eicr & IXGBE_EICR_TIMESYNC)) - ixgbe_ptp_check_pps_event(adapter, eicr); --#endif - - /* would disable interrupts here but EIAM disabled it */ - napi_schedule(&q_vector->napi); -@@ -5482,9 +5472,7 @@ static void ixgbe_watchdog_link_is_up(st - break; - } - --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_start_cyclecounter(adapter); --#endif - - e_info(drv, "NIC Link is Up %s, Flow Control: %s\n", - (link_speed == IXGBE_LINK_SPEED_10GB_FULL ? -@@ -5526,9 +5514,7 @@ static void ixgbe_watchdog_link_is_down( - if (ixgbe_is_sfp(hw) && hw->mac.type == ixgbe_mac_82598EB) - adapter->flags2 |= IXGBE_FLAG2_SEARCH_FOR_SFP; - --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_start_cyclecounter(adapter); --#endif - - e_info(drv, "NIC Link is Down\n"); - netif_carrier_off(netdev); -@@ -5833,9 +5819,7 @@ static void ixgbe_service_task(struct wo - ixgbe_watchdog_subtask(adapter); - ixgbe_fdir_reinit_subtask(adapter); - ixgbe_check_hang_subtask(adapter); --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_overflow_check(adapter); --#endif - - ixgbe_service_event_complete(adapter); - } -@@ -5988,10 +5972,8 @@ static __le32 ixgbe_tx_cmd_type(u32 tx_f - if (tx_flags & IXGBE_TX_FLAGS_HW_VLAN) - cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_VLE); - --#ifdef CONFIG_IXGBE_PTP - if (tx_flags & IXGBE_TX_FLAGS_TSTAMP) - cmd_type |= cpu_to_le32(IXGBE_ADVTXD_MAC_TSTAMP); --#endif - - /* set segmentation enable bits for TSO/FSO */ - #ifdef IXGBE_FCOE -@@ -6393,12 +6375,10 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct - - skb_tx_timestamp(skb); - --#ifdef CONFIG_IXGBE_PTP - if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - tx_flags |= IXGBE_TX_FLAGS_TSTAMP; - } --#endif - - #ifdef CONFIG_PCI_IOV - /* -@@ -6547,10 +6527,8 @@ static int ixgbe_ioctl(struct net_device - struct ixgbe_adapter *adapter = netdev_priv(netdev); - - switch (cmd) { --#ifdef CONFIG_IXGBE_PTP - case SIOCSHWTSTAMP: - return ixgbe_ptp_hwtstamp_ioctl(adapter, req, cmd); --#endif - default: - return mdio_mii_ioctl(&adapter->hw.phy.mdio, if_mii(req), cmd); - } -@@ -7364,9 +7342,7 @@ static int __devinit ixgbe_probe(struct - - device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); - --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_init(adapter); --#endif /* CONFIG_IXGBE_PTP*/ - - /* save off EEPROM version number */ - hw->eeprom.ops.read(hw, 0x2e, &adapter->eeprom_verh); -@@ -7505,9 +7481,7 @@ static void __devexit ixgbe_remove(struc - set_bit(__IXGBE_DOWN, &adapter->state); - cancel_work_sync(&adapter->service_task); - --#ifdef CONFIG_IXGBE_PTP - ixgbe_ptp_stop(adapter); --#endif - - #ifdef CONFIG_IXGBE_DCA - if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) { ---- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -@@ -20,17 +20,3 @@ config PCH_GBE - purpose use. - ML7223/ML7831 is companion chip for Intel Atom E6xx series. - ML7223/ML7831 is completely compatible for Intel EG20T PCH. -- --if PCH_GBE -- --config PCH_PTP -- bool "PCH PTP clock support" -- default n -- select PTP_1588_CLOCK -- select PTP_1588_CLOCK_PCH -- ---help--- -- Say Y here if you want to use Precision Time Protocol (PTP) in the -- driver. PTP is a method to precisely synchronize distributed clocks -- over Ethernet networks. -- --endif # PCH_GBE ---- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h -@@ -649,7 +649,6 @@ extern void pch_gbe_free_tx_resources(st - extern void pch_gbe_free_rx_resources(struct pch_gbe_adapter *adapter, - struct pch_gbe_rx_ring *rx_ring); - extern void pch_gbe_update_stats(struct pch_gbe_adapter *adapter); --#ifdef CONFIG_PCH_PTP - extern u32 pch_ch_control_read(struct pci_dev *pdev); - extern void pch_ch_control_write(struct pci_dev *pdev, u32 val); - extern u32 pch_ch_event_read(struct pci_dev *pdev); -@@ -659,7 +658,6 @@ extern u32 pch_src_uuid_hi_read(struct p - extern u64 pch_rx_snap_read(struct pci_dev *pdev); - extern u64 pch_tx_snap_read(struct pci_dev *pdev); - extern int pch_set_station_address(u8 *addr, struct pci_dev *pdev); --#endif - - /* pch_gbe_param.c */ - extern void pch_gbe_check_options(struct pch_gbe_adapter *adapter); ---- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c -@@ -21,10 +21,8 @@ - #include "pch_gbe.h" - #include "pch_gbe_api.h" - #include --#ifdef CONFIG_PCH_PTP - #include - #include --#endif - - #define DRV_VERSION "1.01" - const char pch_driver_version[] = DRV_VERSION; -@@ -98,7 +96,6 @@ const char pch_driver_version[] = DRV_VE - - #define PCH_GBE_INT_DISABLE_ALL 0 - --#ifdef CONFIG_PCH_PTP - /* Macros for ieee1588 */ - /* 0x40 Time Synchronization Channel Control Register Bits */ - #define MASTER_MODE (1<<0) -@@ -113,7 +110,6 @@ const char pch_driver_version[] = DRV_VE - - #define PTP_L4_MULTICAST_SA "01:00:5e:00:01:81" - #define PTP_L2_MULTICAST_SA "01:1b:19:00:00:00" --#endif - - static unsigned int copybreak __read_mostly = PCH_GBE_COPYBREAK_DEFAULT; - -@@ -122,7 +118,6 @@ static void pch_gbe_mdio_write(struct ne - int data); - static void pch_gbe_set_multi(struct net_device *netdev); - --#ifdef CONFIG_PCH_PTP - static struct sock_filter ptp_filter[] = { - PTP_FILTER - }; -@@ -291,7 +286,6 @@ static int hwtstamp_ioctl(struct net_dev - - return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0; - } --#endif - - inline void pch_gbe_mac_load_mac_addr(struct pch_gbe_hw *hw) - { -@@ -1244,9 +1238,7 @@ static void pch_gbe_tx_queue(struct pch_ - (int)sizeof(struct pch_gbe_tx_desc) * ring_num, - &hw->reg->TX_DSC_SW_P); - --#ifdef CONFIG_PCH_PTP - pch_tx_timestamp(adapter, skb); --#endif - - dev_kfree_skb_any(skb); - } -@@ -1730,9 +1722,7 @@ pch_gbe_clean_rx(struct pch_gbe_adapter - /* Write meta date of skb */ - skb_put(skb, length); - --#ifdef CONFIG_PCH_PTP - pch_rx_timestamp(adapter, skb); --#endif - - skb->protocol = eth_type_trans(skb, netdev); - if (tcp_ip_status & PCH_GBE_RXD_ACC_STAT_TCPIPOK) -@@ -2334,10 +2324,8 @@ static int pch_gbe_ioctl(struct net_devi - - pr_debug("cmd : 0x%04x\n", cmd); - --#ifdef CONFIG_PCH_PTP - if (cmd == SIOCSHWTSTAMP) - return hwtstamp_ioctl(netdev, ifr, cmd); --#endif - - return generic_mii_ioctl(&adapter->mii, if_mii(ifr), cmd, NULL); - } -@@ -2623,14 +2611,12 @@ static int pch_gbe_probe(struct pci_dev - goto err_free_netdev; - } - --#ifdef CONFIG_PCH_PTP - adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number, - PCI_DEVFN(12, 4)); - if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { - pr_err("Bad ptp filter\n"); - return -EINVAL; - } --#endif - - netdev->netdev_ops = &pch_gbe_netdev_ops; - netdev->watchdog_timeo = PCH_GBE_WATCHDOG_PERIOD; ---- a/drivers/net/ethernet/sfc/Kconfig -+++ b/drivers/net/ethernet/sfc/Kconfig -@@ -34,10 +34,3 @@ config SFC_SRIOV - This enables support for the SFC9000 I/O Virtualization - features, allowing accelerated network performance in - virtualized environments. --config SFC_PTP -- bool "Solarflare SFC9000-family PTP support" -- depends on SFC && PTP_1588_CLOCK && !(SFC=y && PTP_1588_CLOCK=m) -- default y -- ---help--- -- This enables support for the Precision Time Protocol (PTP) -- on SFC9000-family NICs ---- a/drivers/net/ethernet/sfc/Makefile -+++ b/drivers/net/ethernet/sfc/Makefile -@@ -2,9 +2,8 @@ sfc-y += efx.o nic.o falcon.o siena.o - falcon_xmac.o mcdi_mac.o \ - selftest.o ethtool.o qt202x_phy.o mdio_10g.o \ - tenxpress.o txc43128_phy.o falcon_boards.o \ -- mcdi.o mcdi_phy.o mcdi_mon.o -+ mcdi.o mcdi_phy.o mcdi_mon.o ptp.o - sfc-$(CONFIG_SFC_MTD) += mtd.o - sfc-$(CONFIG_SFC_SRIOV) += siena_sriov.o --sfc-$(CONFIG_SFC_PTP) += ptp.o - - obj-$(CONFIG_SFC) += sfc.o ---- a/drivers/net/ethernet/sfc/net_driver.h -+++ b/drivers/net/ethernet/sfc/net_driver.h -@@ -868,9 +868,7 @@ struct efx_nic { - struct work_struct peer_work; - #endif - --#ifdef CONFIG_SFC_PTP - struct efx_ptp_data *ptp_data; --#endif - - /* The following fields may be written more often */ - ---- a/drivers/net/ethernet/sfc/nic.h -+++ b/drivers/net/ethernet/sfc/nic.h -@@ -252,7 +252,6 @@ extern int efx_sriov_set_vf_spoofchk(str - bool spoofchk); - - struct ethtool_ts_info; --#ifdef CONFIG_SFC_PTP - extern void efx_ptp_probe(struct efx_nic *efx); - extern int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd); - extern int efx_ptp_get_ts_info(struct net_device *net_dev, -@@ -260,31 +259,6 @@ extern int efx_ptp_get_ts_info(struct ne - extern bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb); - extern int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb); - extern void efx_ptp_event(struct efx_nic *efx, efx_qword_t *ev); --#else --static inline void efx_ptp_probe(struct efx_nic *efx) {} --static inline int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd) --{ -- return -EOPNOTSUPP; --} --static inline int efx_ptp_get_ts_info(struct net_device *net_dev, -- struct ethtool_ts_info *ts_info) --{ -- ts_info->so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | -- SOF_TIMESTAMPING_RX_SOFTWARE); -- ts_info->phc_index = -1; -- -- return 0; --} --static inline bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb) --{ -- return false; --} --static inline int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb) --{ -- return NETDEV_TX_OK; --} --static inline void efx_ptp_event(struct efx_nic *efx, efx_qword_t *ev) {} --#endif - - extern const struct efx_nic_type falcon_a1_nic_type; - extern const struct efx_nic_type falcon_b0_nic_type; ---- a/drivers/ptp/Kconfig -+++ b/drivers/ptp/Kconfig -@@ -25,8 +25,9 @@ config PTP_1588_CLOCK - - config PTP_1588_CLOCK_GIANFAR - tristate "Freescale eTSEC as PTP clock" -- depends on PTP_1588_CLOCK - depends on GIANFAR -+ select PTP_1588_CLOCK -+ default y - help - This driver adds support for using the eTSEC as a PTP - clock. This clock is only useful if your PTP programs are -@@ -38,8 +39,9 @@ config PTP_1588_CLOCK_GIANFAR - - config PTP_1588_CLOCK_IXP46X - tristate "Intel IXP46x as PTP clock" -- depends on PTP_1588_CLOCK - depends on IXP4XX_ETH -+ select PTP_1588_CLOCK -+ default y - help - This driver adds support for using the IXP46X as a PTP - clock. This clock is only useful if your PTP programs are -@@ -50,13 +52,13 @@ config PTP_1588_CLOCK_IXP46X - will be called ptp_ixp46x. - - comment "Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks." -- depends on PTP_1588_CLOCK && (PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n) -+ depends on PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n - - config DP83640_PHY - tristate "Driver for the National Semiconductor DP83640 PHYTER" -- depends on PTP_1588_CLOCK - depends on NETWORK_PHY_TIMESTAMPING - depends on PHYLIB -+ select PTP_1588_CLOCK - ---help--- - Supports the DP83640 PHYTER with IEEE 1588 features. - -@@ -70,8 +72,9 @@ config DP83640_PHY - - config PTP_1588_CLOCK_PCH - tristate "Intel PCH EG20T as PTP clock" -- depends on PTP_1588_CLOCK - depends on PCH_GBE -+ select PTP_1588_CLOCK -+ default y - help - This driver adds support for using the PCH EG20T as a PTP - clock. The hardware supports time stamping of PTP packets diff --git a/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch b/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch deleted file mode 100644 index ef6d817cd..000000000 --- a/debian/patches/bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch +++ /dev/null @@ -1,69 +0,0 @@ -From: Ben Hutchings -Date: Wed, 31 Oct 2012 15:32:44 +0000 -Subject: [2/5] ptp: Make PTP_1588_CLOCK select rather than depend on PPS - -commit 42a7ccef0a06519e2ea0be71d7c0f4ed9198509f upstream. - -PTP hardware clock drivers that select PTP_1588_CLOCK must currently -also select PPS. For those drivers that don't, the user must enable -PPS, then enable PTP_1588_CLOCK, then the driver. Simplify things for -developers and users by putting this selection in one place. - -Signed-off-by: Ben Hutchings -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/intel/Kconfig | 2 -- - drivers/net/ethernet/oki-semi/pch_gbe/Kconfig | 1 - - drivers/ptp/Kconfig | 5 +---- - 3 files changed, 1 insertion(+), 7 deletions(-) - -diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig -index 9e49217..d5b359d 100644 ---- a/drivers/net/ethernet/intel/Kconfig -+++ b/drivers/net/ethernet/intel/Kconfig -@@ -124,7 +124,6 @@ config IGB_PTP - bool "PTP Hardware Clock (PHC)" - default n - depends on IGB -- select PPS - select PTP_1588_CLOCK - ---help--- - Say Y here if you want to use PTP Hardware Clock (PHC) in the -@@ -226,7 +225,6 @@ config IXGBE_PTP - bool "PTP Clock Support" - default n - depends on IXGBE -- select PPS - select PTP_1588_CLOCK - ---help--- - Say Y here if you want support for 1588 Timestamping with a -diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -index 9867bc6..d0e36f2 100644 ---- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -+++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig -@@ -26,7 +26,6 @@ if PCH_GBE - config PCH_PTP - bool "PCH PTP clock support" - default n -- select PPS - select PTP_1588_CLOCK - select PTP_1588_CLOCK_PCH - ---help--- -diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig -index a6e4b7c..131ef03 100644 ---- a/drivers/ptp/Kconfig -+++ b/drivers/ptp/Kconfig -@@ -4,12 +4,9 @@ - - menu "PTP clock support" - --comment "Enable Device Drivers -> PPS to see the PTP clock options." -- depends on PPS=n -- - config PTP_1588_CLOCK - tristate "PTP clock support" -- depends on PPS -+ select PPS - help - The IEEE 1588 standard defines a method to precisely - synchronize distributed clocks over Ethernet networks. The diff --git a/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch b/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch deleted file mode 100644 index f9e8aa7e4..000000000 --- a/debian/patches/bugfix/all/sfc-Select-PTP_1588_CLOCK.patch +++ /dev/null @@ -1,29 +0,0 @@ -From: Ben Hutchings -Date: Thu, 1 Nov 2012 11:22:22 +0000 -Subject: [4/5] sfc: Select PTP_1588_CLOCK - -commit 3ba368c43565f31528b3aea585bb4119fded4eb1 upstream. - -This was missed in commit a24006ed12616bde1bbdb26868495906a212d8dc -('ptp: Enable clock drivers along with associated net/PHY drivers') -which enabled sfc's clock driver unconditionally. - -Reported-by: kbuild test robot -Signed-off-by: Ben Hutchings -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/sfc/Kconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/net/ethernet/sfc/Kconfig b/drivers/net/ethernet/sfc/Kconfig -index fb3cbc2..3ab2c428 100644 ---- a/drivers/net/ethernet/sfc/Kconfig -+++ b/drivers/net/ethernet/sfc/Kconfig -@@ -5,6 +5,7 @@ config SFC - select CRC32 - select I2C - select I2C_ALGOBIT -+ select PTP_1588_CLOCK - ---help--- - This driver supports 10-gigabit Ethernet cards based on - the Solarflare SFC4000 and SFC9000-family controllers. 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 deleted file mode 100644 index 036032c7c..000000000 --- a/debian/patches/bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch +++ /dev/null @@ -1,106 +0,0 @@ -From: Arnd Bergmann -Date: Fri, 28 Sep 2012 22:36:00 +0100 -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. - -The only board in the upstream kernel that provides -this device is the "Stargate 2", which is also maintained -by Jonathan Cameron. Rather than working around the problem -by adding new platform data for this driver, this patch -uses the of_gpio framework to get to the gpio number. - -However, the stargate2 code does not (yet) use DT based -probing, so it is still broken, but at least building -allyesconfig works again. - -Signed-off-by: Arnd Bergmann -Cc: Lars-Peter Clausen -Cc: Jonathan Cameron -Cc: Greg Kroah-Hartman -Signed-off-by: Jonathan Cameron ---- - drivers/staging/iio/accel/lis3l02dq.h | 1 + - drivers/staging/iio/accel/lis3l02dq_core.c | 10 ++++++---- - drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +- - 3 files changed, 8 insertions(+), 5 deletions(-) - -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; - struct mutex buf_lock; -+ int gpio; - bool trigger_on; - - u8 tx[LIS3L02DQ_MAX_RX] ____cacheline_aligned; -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 - #include - #include -+#include - #include - #include - #include -@@ -690,6 +691,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi) - spi_set_drvdata(spi, indio_dev); - - st->us = spi; -+ st->gpio = of_get_gpio(spi->dev.of_node, 0); - 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(struct spi_device *spi) - goto error_unreg_buffer_funcs; - } - -- if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) { -+ if (spi->irq) { - ret = request_threaded_irq(st->us->irq, - &lis3l02dq_th, - &lis3l02dq_event_handler, -@@ -738,10 +740,10 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi) - return 0; - - error_remove_trigger: -- if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq))) -+ if (spi->irq) - lis3l02dq_remove_trigger(indio_dev); - error_free_interrupt: -- if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) -+ if (spi->irq) - free_irq(st->us->irq, indio_dev); - error_uninitialize_buffer: - iio_buffer_unregister(indio_dev); -@@ -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); -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)) - lis3l02dq_read_all(indio_dev, NULL); - else - break; 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 ef1810f57..977e71edd 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 @@ -28,7 +28,7 @@ Signed-off-by: Ben Hutchings Choose this option for open-source nVidia support. --- a/drivers/gpu/drm/nouveau/Makefile +++ b/drivers/gpu/drm/nouveau/Makefile -@@ -186,7 +186,9 @@ nouveau-y += nouveau_mem.o +@@ -216,7 +216,9 @@ nouveau-y += nouveau_mem.o # other random bits nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o @@ -46,9 +46,9 @@ Signed-off-by: Ben Hutchings -#if defined(CONFIG_ACPI) +#if defined(CONFIG_ACPI) && defined(CONFIG_X86) + bool nouveau_is_optimus(void); + bool nouveau_is_v1_dsm(void); void nouveau_register_dsm_handler(void); - void nouveau_unregister_dsm_handler(void); - void nouveau_switcheroo_optimus_dsm(void); --- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c @@ -172,7 +172,7 @@ out: diff --git a/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch b/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch deleted file mode 100644 index 5748cfa35..000000000 --- a/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch +++ /dev/null @@ -1,63 +0,0 @@ -From: Ben Hutchings -Date: Fri, 9 Nov 2012 02:43:00 +0000 -Subject: asus-laptop: Do not call HWRS on init - -Since commit 8871e99f89b7 ('asus-laptop: HRWS/HWRS typo'), module -initialisation is very slow on the Asus UL30A. The HWRS method takes -about 12 seconds to run, and subsequent initialisation also seems to -be delayed. Since we don't really need the result, don't bother -calling it on init. Those who are curious can still get the result -through the 'infos' device attribute. - -Update the comment about HWRS in show_infos(). - -Reported-by: ryan -References: http://bugs.debian.org/692436 -Signed-off-by: Ben Hutchings ---- - drivers/platform/x86/asus-laptop.c | 17 ++++------------- - 1 file changed, 4 insertions(+), 13 deletions(-) - -diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c -index 4b568df..a961156 100644 ---- a/drivers/platform/x86/asus-laptop.c -+++ b/drivers/platform/x86/asus-laptop.c -@@ -860,8 +860,10 @@ static ssize_t show_infos(struct device *dev, - /* - * The HWRS method return informations about the hardware. - * 0x80 bit is for WLAN, 0x100 for Bluetooth. -+ * 0x40 for WWAN, 0x10 for WIMAX. - * The significance of others is yet to be found. -- * If we don't find the method, we assume the device are present. -+ * We don't currently use this for device detection, and it -+ * takes several seconds to run on some systems. - */ - rv = acpi_evaluate_integer(asus->handle, "HWRS", NULL, &temp); - if (!ACPI_FAILURE(rv)) -@@ -1682,7 +1684,7 @@ static int asus_laptop_get_info(struct asus_laptop *asus) - { - struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *model = NULL; -- unsigned long long bsts_result, hwrs_result; -+ unsigned long long bsts_result; - char *string = NULL; - acpi_status status; - -@@ -1744,17 +1746,6 @@ static int asus_laptop_get_info(struct asus_laptop *asus) - if (*string) - pr_notice(" %s model detected\n", string); - -- /* -- * The HWRS method return informations about the hardware. -- * 0x80 bit is for WLAN, 0x100 for Bluetooth, -- * 0x40 for WWAN, 0x10 for WIMAX. -- * The significance of others is yet to be found. -- */ -- status = -- acpi_evaluate_integer(asus->handle, "HWRS", NULL, &hwrs_result); -- if (!ACPI_FAILURE(status)) -- pr_notice(" HWRS returned %x", (int)hwrs_result); -- - if (!acpi_check_handle(asus->handle, METHOD_WL_STATUS, NULL)) - asus->have_rsts = true; - diff --git a/debian/patches/debian/ast-disable-autoload.patch b/debian/patches/debian/ast-disable-autoload.patch index bb88b2d5b..1e595bb70 100644 --- a/debian/patches/debian/ast-disable-autoload.patch +++ b/debian/patches/debian/ast-disable-autoload.patch @@ -16,5 +16,5 @@ package of a compatible X driver. -MODULE_DEVICE_TABLE(pci, pciidlist); +/*MODULE_DEVICE_TABLE(pci, pciidlist);*/ - static int __devinit - ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + { diff --git a/debian/patches/debian/version.patch b/debian/patches/debian/version.patch index bdd2f2ad8..bbfba526c 100644 --- a/debian/patches/debian/version.patch +++ b/debian/patches/debian/version.patch @@ -53,7 +53,7 @@ are set. #include #include #include -@@ -181,11 +182,12 @@ static void show_last_breaking_event(str +@@ -179,11 +180,12 @@ static void show_last_breaking_event(str */ void dump_stack(void) { @@ -68,7 +68,7 @@ are set. printk("Process %s (pid: %d, task: %p, ksp: %p)\n", current->comm, current->pid, current, (void *) current->thread.ksp); -@@ -231,11 +233,12 @@ void show_registers(struct pt_regs *regs +@@ -229,11 +231,12 @@ void show_registers(struct pt_regs *regs void show_regs(struct pt_regs *regs) { @@ -185,7 +185,7 @@ are set. +#include #include - #include + #include @@ -278,11 +279,12 @@ void __show_regs(struct pt_regs *regs) unsigned long flags; char buf[64]; diff --git a/debian/patches/features/all/aufs3/aufs3-add.patch b/debian/patches/features/all/aufs3/aufs3-add.patch index d147e959b..566c6a9a6 100644 --- a/debian/patches/features/all/aufs3/aufs3-add.patch +++ b/debian/patches/features/all/aufs3/aufs3-add.patch @@ -250,10 +250,10 @@ +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o --- a/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/aufs.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/aufs.h 2013-02-19 06:25:53.223644734 +0000 @@ -0,0 +1,60 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -313,10 +313,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ --- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/branch.c 2012-12-16 14:11:13.354479811 +0000 ++++ b/fs/aufs/branch.c 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,1172 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -1488,10 +1488,10 @@ + return err; +} --- a/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/branch.h 2012-01-10 02:15:56.000000000 +0000 -@@ -0,0 +1,230 @@ ++++ b/fs/aufs/branch.h 2013-02-19 06:25:53.227644734 +0000 +@@ -0,0 +1,236 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -1553,6 +1553,13 @@ +/* ext2 has 3 types of operations at least, ext3 has 4 */ +#define AuBrDynOp (AuDyLast * 4) + ++#ifdef CONFIG_AUFS_HFSNOTIFY ++/* support for asynchronous destruction */ ++struct au_br_hfsnotify { ++ struct fsnotify_group *hfsn_group; ++}; ++#endif ++ +/* protected by superblock rwsem */ +struct au_branch { + struct au_xino_file br_xino; @@ -1572,8 +1579,7 @@ + atomic_t br_xino_running; + +#ifdef CONFIG_AUFS_HFSNOTIFY -+ struct fsnotify_group *br_hfsn_group; -+ struct fsnotify_ops br_hfsn_ops; ++ struct au_br_hfsnotify *br_hfsn; +#endif + +#ifdef CONFIG_SYSFS @@ -1762,10 +1768,10 @@ + +-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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/cpup.c 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,1085 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -2850,10 +2856,10 @@ + return err; +} --- a/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/cpup.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/cpup.h 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,81 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -2934,10 +2940,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_CPUP_H__ */ --- a/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dbgaufs.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dbgaufs.c 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,334 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -3271,10 +3277,10 @@ + return err; +} --- a/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dbgaufs.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dbgaufs.h 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,49 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -3323,10 +3329,10 @@ +#endif /* __KERNEL__ */ +#endif /* __DBGAUFS_H__ */ --- a/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dcsub.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dcsub.c 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,243 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -3569,10 +3575,10 @@ + return path_is_under(path + 0, path + 1); +} --- a/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dcsub.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dcsub.h 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,94 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -3666,10 +3672,10 @@ +#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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/debug.c 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,490 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -4159,10 +4165,10 @@ + return 0; +} --- a/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/debug.h 2012-10-29 03:30:14.231048075 +0000 ++++ b/fs/aufs/debug.h 2013-02-19 06:25:53.227644734 +0000 @@ -0,0 +1,242 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -4404,10 +4410,10 @@ +#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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/dentry.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,1060 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -5467,10 +5473,10 @@ + .d_release = aufs_d_release +}; --- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dentry.h 2012-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/dentry.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,234 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -5704,10 +5710,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_DENTRY_H__ */ --- a/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dinfo.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dinfo.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,543 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -6250,10 +6256,10 @@ + return -1; +} --- a/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dir.c 2012-10-29 03:30:14.231048075 +0000 ++++ b/fs/aufs/dir.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,633 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -6886,10 +6892,10 @@ + .fsync = aufs_fsync_dir +}; --- a/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dir.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dir.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,137 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -7026,10 +7032,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ --- a/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dynop.c 2012-10-29 03:30:14.231048075 +0000 ++++ b/fs/aufs/dynop.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,379 @@ +/* -+ * Copyright (C) 2010-2012 Junjiro R. Okajima ++ * Copyright (C) 2010-2013 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 @@ -7408,10 +7414,10 @@ + WARN_ON(!list_empty(&dynop[i].head)); +} --- a/fs/aufs/dynop.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dynop.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/dynop.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,76 @@ +/* -+ * Copyright (C) 2010-2012 Junjiro R. Okajima ++ * Copyright (C) 2010-2013 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 @@ -7487,10 +7493,10 @@ +#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-12-16 14:11:13.358479829 +0000 -@@ -0,0 +1,811 @@ ++++ b/fs/aufs/export.c 2013-02-19 06:25:53.231644735 +0000 +@@ -0,0 +1,812 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -7871,7 +7877,8 @@ + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_name; -+ dentry = ERR_PTR(-ENOENT); ++ /* instead of ENOENT */ ++ dentry = ERR_PTR(-ESTALE); + if (!arg.found) + goto out_name; + @@ -8226,7 +8233,7 @@ + err = fh[Fh_h_type]; + *max_len += Fh_tail; + /* todo: macros? */ -+ if (err != 255) ++ if (err != FILEID_INVALID) + err = 99; + else + AuWarn1("%s encode_fh failed\n", au_sbtype(h_sb)); @@ -8240,7 +8247,7 @@ + si_read_unlock(sb); +out: + if (unlikely(err < 0)) -+ err = 255; ++ err = FILEID_INVALID; + return err; +} + @@ -8301,10 +8308,10 @@ + 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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/f_op.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,723 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -9027,10 +9034,10 @@ +#endif +}; --- a/fs/aufs/f_op_sp.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/f_op_sp.c 2012-10-29 03:30:14.235048090 +0000 ++++ b/fs/aufs/f_op_sp.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,295 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -9325,10 +9332,10 @@ + return ret; +} --- a/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/file.c 2012-10-29 03:30:14.235048090 +0000 ++++ b/fs/aufs/file.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,683 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -10011,10 +10018,10 @@ +#endif /* CONFIG_AUFS_DEBUG */ +}; --- a/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/file.h 2012-08-01 03:41:52.000000000 +0100 ++++ b/fs/aufs/file.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,298 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -10312,10 +10319,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ --- a/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/finfo.c 2012-01-10 02:15:56.000000000 +0000 -@@ -0,0 +1,156 @@ ++++ b/fs/aufs/finfo.c 2013-02-19 06:25:53.231644735 +0000 +@@ -0,0 +1,157 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -10443,7 +10450,7 @@ + +int au_finfo_init(struct file *file, struct au_fidir *fidir) +{ -+ int err, lc_idx; ++ int err; + struct au_finfo *finfo; + struct dentry *dentry; + @@ -10455,10 +10462,11 @@ + + err = 0; + au_nfiles_inc(dentry->d_sb); -+ lc_idx = AuLcNonDir_FIINFO; -+ if (fidir) -+ lc_idx = AuLcDir_FIINFO; -+ au_rw_class(&finfo->fi_rwsem, au_lc_key + lc_idx); ++ /* verbose coding for lock class name */ ++ if (!fidir) ++ au_rw_class(&finfo->fi_rwsem, au_lc_key + AuLcNonDir_FIINFO); ++ else ++ au_rw_class(&finfo->fi_rwsem, au_lc_key + AuLcDir_FIINFO); + au_rw_write_lock(&finfo->fi_rwsem); + finfo->fi_btop = -1; + finfo->fi_hdir = fidir; @@ -10471,10 +10479,10 @@ + return err; +} --- a/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/fstype.h 2012-10-29 03:30:14.235048090 +0000 ++++ b/fs/aufs/fstype.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,481 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -10955,10 +10963,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ --- a/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hfsnotify.c 2012-10-29 03:30:14.235048090 +0000 -@@ -0,0 +1,257 @@ ++++ b/fs/aufs/hfsnotify.c 2013-02-19 06:25:53.231644735 +0000 +@@ -0,0 +1,293 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -10994,12 +11002,13 @@ + AuDbg("here\n"); + au_cache_free_hnotify(hn); + smp_mb__before_atomic_dec(); -+ atomic64_dec(&au_hfsn_ifree); -+ wake_up(&au_hfsn_wq); ++ if (atomic64_dec_and_test(&au_hfsn_ifree)) ++ wake_up(&au_hfsn_wq); +} + +static int au_hfsn_alloc(struct au_hinode *hinode) +{ ++ int err; + struct au_hnotify *hn; + struct super_block *sb; + struct au_branch *br; @@ -11010,6 +11019,8 @@ + sb = hn->hn_aufs_inode->i_sb; + bindex = au_br_index(sb, hinode->hi_id); + br = au_sbr(sb, bindex); ++ AuDebugOn(!br->br_hfsn); ++ + mark = &hn->hn_mark; + fsnotify_init_mark(mark, au_hfsn_free_mark); + mark->mask = AuHfsnMask; @@ -11017,21 +11028,30 @@ + * by udba rename or rmdir, aufs assign a new inode to the known + * h_inode, so specify 1 to allow dups. + */ -+ return fsnotify_add_mark(mark, br->br_hfsn_group, hinode->hi_inode, ++ err = fsnotify_add_mark(mark, br->br_hfsn->hfsn_group, hinode->hi_inode, + /*mnt*/NULL, /*allow_dups*/1); ++ /* even if err */ ++ fsnotify_put_mark(mark); ++ ++ return err; +} + +static int au_hfsn_free(struct au_hinode *hinode, struct au_hnotify *hn) +{ + struct fsnotify_mark *mark; + unsigned long long ull; ++ struct fsnotify_group *group; + + ull = atomic64_inc_return(&au_hfsn_ifree); + BUG_ON(!ull); + + mark = &hn->hn_mark; -+ fsnotify_destroy_mark(mark); -+ fsnotify_put_mark(mark); ++ spin_lock(&mark->lock); ++ group = mark->group; ++ fsnotify_get_group(group); ++ spin_unlock(&mark->lock); ++ fsnotify_destroy_mark(mark, group); ++ fsnotify_put_group(group); + + /* free hn by myself */ + return 0; @@ -11093,6 +11113,14 @@ + +/* ---------------------------------------------------------------------- */ + ++static void au_hfsn_free_group(struct fsnotify_group *group) ++{ ++ struct au_br_hfsnotify *hfsn = group->private; ++ ++ AuDbg("here\n"); ++ kfree(hfsn); ++} ++ +static int au_hfsn_handle_event(struct fsnotify_group *group, + struct fsnotify_mark *inode_mark, + struct fsnotify_mark *vfsmount_mark, @@ -11150,22 +11178,54 @@ + +static struct fsnotify_ops au_hfsn_ops = { + .should_send_event = au_hfsn_should_send_event, -+ .handle_event = au_hfsn_handle_event ++ .handle_event = au_hfsn_handle_event, ++ .free_group_priv = au_hfsn_free_group +}; + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_fin_br(struct au_branch *br) +{ -+ if (br->br_hfsn_group) -+ fsnotify_put_group(br->br_hfsn_group); ++ struct au_br_hfsnotify *hfsn; ++ ++ hfsn = br->br_hfsn; ++ if (hfsn) ++ fsnotify_put_group(hfsn->hfsn_group); +} + +static int au_hfsn_init_br(struct au_branch *br, int perm) +{ -+ br->br_hfsn_group = NULL; -+ br->br_hfsn_ops = au_hfsn_ops; -+ return 0; ++ int err; ++ struct fsnotify_group *group; ++ struct au_br_hfsnotify *hfsn; ++ ++ err = 0; ++ br->br_hfsn = NULL; ++ if (!au_br_hnotifyable(perm)) ++ goto out; ++ ++ err = -ENOMEM; ++ hfsn = kmalloc(sizeof(*hfsn), GFP_NOFS); ++ if (unlikely(!hfsn)) ++ goto out; ++ ++ err = 0; ++ group = fsnotify_alloc_group(&au_hfsn_ops); ++ if (IS_ERR(group)) { ++ err = PTR_ERR(group); ++ pr_err("fsnotify_alloc_group() failed, %d\n", err); ++ goto out_hfsn; ++ } ++ ++ group->private = hfsn; ++ hfsn->hfsn_group = group; ++ br->br_hfsn = hfsn; ++ goto out; /* success */ ++ ++out_hfsn: ++ kfree(hfsn); ++out: ++ return err; +} + +static int au_hfsn_reset_br(unsigned int udba, struct au_branch *br, int perm) @@ -11173,25 +11233,9 @@ + int err; + + err = 0; -+ if (udba != AuOpt_UDBA_HNOTIFY -+ || !au_br_hnotifyable(perm)) { -+ au_hfsn_fin_br(br); -+ br->br_hfsn_group = NULL; -+ goto out; -+ } ++ if (!br->br_hfsn) ++ err = au_hfsn_init_br(br, perm); + -+ if (br->br_hfsn_group) -+ goto out; -+ -+ br->br_hfsn_group = fsnotify_alloc_group(&br->br_hfsn_ops); -+ if (IS_ERR(br->br_hfsn_group)) { -+ err = PTR_ERR(br->br_hfsn_group); -+ pr_err("fsnotify_alloc_group() failed, %d\n", err); -+ br->br_hfsn_group = NULL; -+ } -+ -+out: -+ AuTraceErr(err); + return err; +} + @@ -11215,10 +11259,10 @@ + .init_br = au_hfsn_init_br +}; --- a/fs/aufs/hfsplus.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hfsplus.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/hfsplus.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,57 @@ +/* -+ * Copyright (C) 2010-2012 Junjiro R. Okajima ++ * Copyright (C) 2010-2013 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 @@ -11275,10 +11319,10 @@ + } +} --- a/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hnotify.c 2012-10-29 03:30:14.235048090 +0000 ++++ b/fs/aufs/hnotify.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,713 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -11991,10 +12035,10 @@ + 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-12-16 14:11:13.358479829 +0000 -@@ -0,0 +1,1026 @@ ++++ b/fs/aufs/i_op.c 2013-02-19 06:25:53.231644735 +0000 +@@ -0,0 +1,1030 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -12154,7 +12198,7 @@ + struct dentry *ret, *parent; + struct inode *inode; + struct super_block *sb; -+ int err, npositive, lc_idx; ++ int err, npositive; + + IMustLock(dir); + @@ -12221,12 +12265,16 @@ +out_unlock: + di_write_unlock(dentry); + if (inode) { -+ lc_idx = AuLcNonDir_DIINFO; -+ if (S_ISLNK(inode->i_mode)) -+ lc_idx = AuLcSymlink_DIINFO; -+ else if (S_ISDIR(inode->i_mode)) -+ lc_idx = AuLcDir_DIINFO; -+ au_rw_class(&au_di(dentry)->di_rwsem, au_lc_key + lc_idx); ++ /* verbose coding for lock class name */ ++ if (unlikely(S_ISLNK(inode->i_mode))) ++ au_rw_class(&au_di(dentry)->di_rwsem, ++ au_lc_key + AuLcSymlink_DIINFO); ++ else if (unlikely(S_ISDIR(inode->i_mode))) ++ au_rw_class(&au_di(dentry)->di_rwsem, ++ au_lc_key + AuLcDir_DIINFO); ++ else /* likely */ ++ au_rw_class(&au_di(dentry)->di_rwsem, ++ au_lc_key + AuLcNonDir_DIINFO); + } +out_si: + si_read_unlock(sb); @@ -13020,10 +13068,10 @@ + .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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/i_op_add.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,713 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -13736,10 +13784,10 @@ + 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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/i_op_del.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,477 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -14216,10 +14264,10 @@ + return err; +} --- a/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/i_op_ren.c 2012-10-29 03:30:14.239048114 +0000 ++++ b/fs/aufs/i_op_ren.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,1026 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -15245,10 +15293,10 @@ + return err; +} --- a/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/iinfo.c 2012-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/iinfo.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,276 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -15524,10 +15572,10 @@ + AuRwDestroy(&iinfo->ii_rwsem); +} --- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/inode.c 2012-12-16 14:11:13.358479829 +0000 -@@ -0,0 +1,488 @@ ++++ b/fs/aufs/inode.c 2013-02-19 06:25:53.231644735 +0000 +@@ -0,0 +1,492 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -15864,7 +15912,7 @@ + struct super_block *sb; + struct mutex *mtx; + ino_t h_ino, ino; -+ int err, lc_idx; ++ int err; + aufs_bindex_t bstart; + + sb = dentry->d_sb; @@ -15905,12 +15953,16 @@ + + AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW)); + if (inode->i_state & I_NEW) { -+ lc_idx = AuLcNonDir_IIINFO; -+ if (S_ISLNK(h_inode->i_mode)) -+ lc_idx = AuLcSymlink_IIINFO; -+ else if (S_ISDIR(h_inode->i_mode)) -+ lc_idx = AuLcDir_IIINFO; -+ au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx); ++ /* verbose coding for lock class name */ ++ if (unlikely(S_ISLNK(h_inode->i_mode))) ++ au_rw_class(&au_ii(inode)->ii_rwsem, ++ au_lc_key + AuLcSymlink_IIINFO); ++ else if (unlikely(S_ISDIR(h_inode->i_mode))) ++ au_rw_class(&au_ii(inode)->ii_rwsem, ++ au_lc_key + AuLcDir_IIINFO); ++ else /* likely */ ++ au_rw_class(&au_ii(inode)->ii_rwsem, ++ au_lc_key + AuLcNonDir_IIINFO); + + ii_write_lock_new_child(inode); + err = set_inode(inode, dentry); @@ -16015,10 +16067,10 @@ + 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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/inode.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,588 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -16085,7 +16137,7 @@ +struct au_vdir; +struct au_iinfo { + spinlock_t ii_genspin; -+ struct au_iigen ii_generation; ++ struct au_iigen ii_generation; + struct super_block *ii_hsb1; /* no get/put */ + + struct au_rwsem ii_rwsem; @@ -16606,10 +16658,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ --- a/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/ioctl.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/ioctl.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,196 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -16805,10 +16857,10 @@ +#endif +#endif --- a/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/loop.c 2012-07-22 01:31:00.000000000 +0100 ++++ b/fs/aufs/loop.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,133 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -16941,10 +16993,10 @@ + kfree(au_warn_loopback_array); +} --- a/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/loop.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/loop.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,50 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -17051,10 +17103,10 @@ +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-12-16 14:11:13.358479829 +0000 ++++ b/fs/aufs/module.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,202 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -17256,10 +17308,10 @@ +module_init(aufs_init); +module_exit(aufs_exit); --- a/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/module.h 2012-03-11 05:01:22.000000000 +0000 ++++ b/fs/aufs/module.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,105 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -17364,10 +17416,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_MODULE_H__ */ --- a/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/opts.c 2012-07-22 01:31:00.000000000 +0100 ++++ b/fs/aufs/opts.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,1677 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -19044,10 +19096,10 @@ + return au_mntflags(sb) & AuOptMask_UDBA; +} --- a/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/opts.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/opts.h 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,209 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -19256,10 +19308,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_OPTS_H__ */ --- a/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/plink.c 2012-10-29 03:30:14.243048129 +0000 ++++ b/fs/aufs/plink.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,511 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -19770,10 +19822,10 @@ + } +} --- a/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/poll.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/poll.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,56 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -19829,10 +19881,10 @@ + return mask; +} --- a/fs/aufs/procfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/procfs.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/procfs.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,170 @@ +/* -+ * Copyright (C) 2010-2012 Junjiro R. Okajima ++ * Copyright (C) 2010-2013 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 @@ -20002,10 +20054,10 @@ + return err; +} --- a/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/rdu.c 2012-10-29 03:30:14.243048129 +0000 ++++ b/fs/aufs/rdu.c 2013-02-19 06:25:53.231644735 +0000 @@ -0,0 +1,384 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -20389,10 +20441,10 @@ +} +#endif --- a/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/rwsem.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/rwsem.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,188 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -20580,10 +20632,10 @@ +#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-12-16 14:11:13.362479850 +0000 ++++ b/fs/aufs/sbinfo.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,343 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -20926,10 +20978,10 @@ + spin_unlock(&sbinfo->au_si_pid.tree_lock); +} --- a/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/spl.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/spl.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,62 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -20991,10 +21043,10 @@ +#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-12-16 14:11:13.362479850 +0000 ++++ b/fs/aufs/super.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,993 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -21987,10 +22039,10 @@ + .owner = THIS_MODULE, +}; --- a/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/super.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/super.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,546 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -22536,10 +22588,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_SUPER_H__ */ --- a/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysaufs.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/sysaufs.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,105 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -22644,10 +22696,10 @@ + return err; +} --- a/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysaufs.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/sysaufs.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,104 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -22751,10 +22803,10 @@ +#endif /* __KERNEL__ */ +#endif /* __SYSAUFS_H__ */ --- a/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysfs.c 2012-07-22 01:31:00.000000000 +0100 ++++ b/fs/aufs/sysfs.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,257 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -23011,10 +23063,10 @@ + } +} --- a/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysrq.c 2012-10-29 03:30:14.243048129 +0000 ++++ b/fs/aufs/sysrq.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,148 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -23162,10 +23214,10 @@ + 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-12-16 14:11:13.362479850 +0000 ++++ b/fs/aufs/vdir.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,885 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -24050,10 +24102,10 @@ + return 0; +} --- a/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/vfsub.c 2012-10-29 03:30:14.243048129 +0000 ++++ b/fs/aufs/vfsub.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,777 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -24830,10 +24882,10 @@ + return err; +} --- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/vfsub.h 2012-12-16 14:11:13.362479850 +0000 ++++ b/fs/aufs/vfsub.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,284 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -25117,10 +25169,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ --- a/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wbr_policy.c 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/wbr_policy.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,700 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -25820,10 +25872,10 @@ + } +}; --- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/whout.c 2012-12-16 14:11:13.362479850 +0000 ++++ b/fs/aufs/whout.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,1042 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -26865,10 +26917,10 @@ + } +} --- a/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/whout.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/whout.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,88 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -26956,10 +27008,10 @@ +#endif /* __KERNEL__ */ +#endif /* __AUFS_WHOUT_H__ */ --- a/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wkq.c 2012-10-29 03:30:14.247048152 +0000 ++++ b/fs/aufs/wkq.c 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,214 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -27173,10 +27225,10 @@ + return err; +} --- a/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wkq.h 2012-01-10 02:15:56.000000000 +0000 ++++ b/fs/aufs/wkq.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,92 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -27268,10 +27320,10 @@ +#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-12-16 14:11:13.362479850 +0000 -@@ -0,0 +1,1264 @@ ++++ b/fs/aufs/xino.c 2013-02-19 06:25:53.235644735 +0000 +@@ -0,0 +1,1265 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -27588,7 +27640,8 @@ + + ii_read_unlock(dir); + if (unlikely(err)) -+ pr_warn("err b%d, (%d)\n", bindex, err); ++ pr_warn("err b%d, upper %llu, (%d)\n", ++ bindex, (unsigned long long)br->br_xino_upper, err); + atomic_dec(&br->br_xino_running); + atomic_dec(&br->br_count); + si_write_unlock(sb); @@ -28535,10 +28588,10 @@ + return err; +} --- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/include/linux/aufs_type.h 2012-12-16 14:11:13.362479850 +0000 ++++ b/include/linux/aufs_type.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,19 @@ +/* -+ * Copyright (C) 2012 Junjiro R. Okajima ++ * Copyright (C) 2012-2013 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 @@ -28557,10 +28610,10 @@ + +#include --- a/include/uapi/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/include/uapi/linux/aufs_type.h 2012-12-16 14:11:13.362479850 +0000 ++++ b/include/uapi/linux/aufs_type.h 2013-02-19 06:25:53.235644735 +0000 @@ -0,0 +1,233 @@ +/* -+ * Copyright (C) 2005-2012 Junjiro R. Okajima ++ * Copyright (C) 2005-2013 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 @@ -28600,7 +28653,7 @@ + +#include + -+#define AUFS_VERSION "3.x-rcN-20121210" ++#define AUFS_VERSION "3.x-rcN-20130204" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') diff --git a/debian/patches/features/all/aufs3/aufs3-base.patch b/debian/patches/features/all/aufs3/aufs3-base.patch index 4514a59ec..854c2feec 100644 --- a/debian/patches/features/all/aufs3/aufs3-base.patch +++ b/debian/patches/features/all/aufs3/aufs3-base.patch @@ -1,7 +1,7 @@ aufs3.x-rcN base patch diff --git a/fs/file_table.c b/fs/file_table.c -index a72bf9d..dac6792 100644 +index de9e965..e73287a 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -36,7 +36,7 @@ struct files_stat_struct files_stat = { @@ -14,10 +14,10 @@ index a72bf9d..dac6792 100644 /* SLAB cache for file structures */ static struct kmem_cache *filp_cachep __read_mostly; diff --git a/fs/inode.c b/fs/inode.c -index b03c719..ee497f9 100644 +index 14084b7..ece87ed 100644 --- a/fs/inode.c +++ b/fs/inode.c -@@ -1491,7 +1491,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode, +@@ -1503,7 +1503,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode, * This does the actual work of updating an inodes time or version. Must have * had called mnt_want_write() before calling this. */ @@ -27,10 +27,10 @@ index b03c719..ee497f9 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 13e5b47..f185c6c 100644 +index 6909d89..020c7bc 100644 --- a/fs/splice.c +++ b/fs/splice.c -@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); +@@ -1092,8 +1092,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); /* * Attempt to initiate a splice from pipe to file. */ @@ -41,7 +41,7 @@ index 13e5b47..f185c6c 100644 { ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); -@@ -1121,9 +1121,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, +@@ -1120,9 +1120,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, /* * Attempt to initiate a splice from a file to a pipe. */ @@ -55,10 +55,10 @@ index 13e5b47..f185c6c 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 b33cfc9..963a61b 100644 +index 7617ee0..1a39c33 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -2558,6 +2558,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *); +@@ -2551,6 +2551,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 1301695e4..cb4bb2cb2 100644 --- a/debian/patches/features/all/aufs3/aufs3-kbuild.patch +++ b/debian/patches/features/all/aufs3/aufs3-kbuild.patch @@ -1,22 +1,22 @@ aufs3.x-rcN kbuild patch diff --git a/fs/Kconfig b/fs/Kconfig -index f95ae3a..6d8a9a5 100644 +index 780725a..d460c05 100644 --- a/fs/Kconfig +++ b/fs/Kconfig -@@ -220,6 +220,7 @@ source "fs/pstore/Kconfig" - source "fs/sysv/Kconfig" +@@ -211,6 +211,7 @@ source "fs/sysv/Kconfig" source "fs/ufs/Kconfig" source "fs/exofs/Kconfig" + source "fs/f2fs/Kconfig" +source "fs/aufs/Kconfig" endif # MISC_FILESYSTEMS diff --git a/fs/Makefile b/fs/Makefile -index 1d7af79..06db6eb 100644 +index 9d53192..e70f08f 100644 --- a/fs/Makefile +++ b/fs/Makefile -@@ -126,3 +126,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/ +@@ -127,3 +127,4 @@ obj-$(CONFIG_F2FS_FS) += f2fs/ obj-y += exofs/ # Multiple modules obj-$(CONFIG_CEPH_FS) += ceph/ obj-$(CONFIG_PSTORE) += pstore/ diff --git a/debian/patches/features/all/aufs3/aufs3-standalone.patch b/debian/patches/features/all/aufs3/aufs3-standalone.patch index 7736840ea..6007f3f6c 100644 --- a/debian/patches/features/all/aufs3/aufs3-standalone.patch +++ b/debian/patches/features/all/aufs3/aufs3-standalone.patch @@ -1,7 +1,7 @@ aufs3.x-rcN standalone patch diff --git a/fs/file_table.c b/fs/file_table.c -index dac6792..e3f2c15 100644 +index e73287a..b33aebe 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -37,6 +37,7 @@ struct files_stat_struct files_stat = { @@ -22,7 +22,7 @@ index dac6792..e3f2c15 100644 /* diff --git a/fs/inode.c b/fs/inode.c -index ee497f9..5e7eee7 100644 +index ece87ed..38f7bc8 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -56,6 +56,7 @@ static struct hlist_head *inode_hashtable __read_mostly; @@ -33,7 +33,7 @@ index ee497f9..5e7eee7 100644 /* * Empty aops. Can be used for the cases where the user does not -@@ -1507,6 +1508,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) +@@ -1519,6 +1520,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) mark_inode_dirty_sync(inode); return 0; } @@ -42,10 +42,10 @@ index ee497f9..5e7eee7 100644 /** * touch_atime - update the access time diff --git a/fs/namespace.c b/fs/namespace.c -index 2496062..3e66a90 100644 +index 55605c5..aed7607 100644 --- a/fs/namespace.c +++ b/fs/namespace.c -@@ -50,6 +50,7 @@ EXPORT_SYMBOL_GPL(fs_kobj); +@@ -52,6 +52,7 @@ EXPORT_SYMBOL_GPL(fs_kobj); * tree or hash is modified or when a vfsmount structure is modified. */ DEFINE_BRLOCK(vfsmount_lock); @@ -53,7 +53,7 @@ index 2496062..3e66a90 100644 static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) { -@@ -1401,6 +1402,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, +@@ -1424,6 +1425,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, } return 0; } @@ -62,7 +62,7 @@ index 2496062..3e66a90 100644 static void cleanup_group_ids(struct mount *mnt, struct mount *end) { diff --git a/fs/notify/group.c b/fs/notify/group.c -index 63fc294..6f4adca 100644 +index bd2625b..2ff2a0f 100644 --- a/fs/notify/group.c +++ b/fs/notify/group.c @@ -22,6 +22,7 @@ @@ -73,48 +73,59 @@ index 63fc294..6f4adca 100644 #include #include "fsnotify.h" -@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group) +@@ -65,6 +66,7 @@ void fsnotify_get_group(struct fsnotify_group *group) + { + atomic_inc(&group->refcnt); + } ++EXPORT_SYMBOL_GPL(fsnotify_get_group); + + /* + * Drop a reference to a group. Free it if it's through. +@@ -74,6 +76,7 @@ void fsnotify_put_group(struct fsnotify_group *group) if (atomic_dec_and_test(&group->refcnt)) - fsnotify_destroy_group(group); + fsnotify_final_destroy_group(group); } +EXPORT_SYMBOL_GPL(fsnotify_put_group); /* * Create a new fsnotify_group and hold a reference for the group returned. -@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops) +@@ -102,6 +105,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops) return group; } +EXPORT_SYMBOL_GPL(fsnotify_alloc_group); + + int fsnotify_fasync(int fd, struct file *file, int on) + { diff --git a/fs/notify/mark.c b/fs/notify/mark.c -index f104d56..54f36db 100644 +index fc6b49b..a6bb87d 100644 --- a/fs/notify/mark.c +++ b/fs/notify/mark.c -@@ -112,6 +112,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark) - if (atomic_dec_and_test(&mark->refcnt)) +@@ -115,6 +115,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark) mark->free_mark(mark); + } } +EXPORT_SYMBOL_GPL(fsnotify_put_mark); /* * Any time a mark is getting freed we end up here. -@@ -191,6 +192,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark) - if (unlikely(atomic_dec_and_test(&group->num_marks))) - fsnotify_final_destroy_group(group); +@@ -197,6 +198,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark, + fsnotify_destroy_mark_locked(mark, group); + mutex_unlock(&group->mark_mutex); } +EXPORT_SYMBOL_GPL(fsnotify_destroy_mark); void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) { -@@ -278,6 +280,7 @@ err: +@@ -281,6 +283,7 @@ err: return ret; } +EXPORT_SYMBOL_GPL(fsnotify_add_mark); - /* - * clear any marks in a group in which mark->flags & flags is true -@@ -333,6 +336,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, + int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group, + struct inode *inode, struct vfsmount *mnt, int allow_dups) +@@ -342,6 +345,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, atomic_set(&mark->refcnt, 1); mark->free_mark = free_mark; } @@ -123,7 +134,7 @@ index f104d56..54f36db 100644 static int fsnotify_mark_destroy(void *ignored) { diff --git a/fs/open.c b/fs/open.c -index 59071f5..7e4c856 100644 +index 9b33c0c..e3365035 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, @@ -132,13 +143,13 @@ index 59071f5..7e4c856 100644 } +EXPORT_SYMBOL_GPL(do_truncate); - static long do_sys_truncate(const char __user *pathname, loff_t length) + long vfs_truncate(struct path *path, loff_t length) { diff --git a/fs/splice.c b/fs/splice.c -index f185c6c..f3d89da 100644 +index 020c7bc..a622ade 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, +@@ -1116,6 +1116,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out, return splice_write(pipe, out, ppos, len, flags); } @@ -146,7 +157,7 @@ index f185c6c..f3d89da 100644 /* * Attempt to initiate a splice from a file to a pipe. -@@ -1143,6 +1144,7 @@ long do_splice_to(struct file *in, loff_t *ppos, +@@ -1142,6 +1143,7 @@ long do_splice_to(struct file *in, loff_t *ppos, return splice_read(in, ppos, pipe, len, flags); } @@ -155,10 +166,10 @@ index f185c6c..f3d89da 100644 /** * splice_direct_to_actor - splices data directly between two non-pipes diff --git a/security/commoncap.c b/security/commoncap.c -index 6dbae46..9f4f29a 100644 +index 7ee08c7..176edf1 100644 --- a/security/commoncap.c +++ b/security/commoncap.c -@@ -979,9 +979,11 @@ int cap_mmap_addr(unsigned long addr) +@@ -988,9 +988,11 @@ int cap_mmap_addr(unsigned long addr) } return ret; } @@ -171,7 +182,7 @@ index 6dbae46..9f4f29a 100644 } +EXPORT_SYMBOL_GPL(cap_mmap_file); diff --git a/security/device_cgroup.c b/security/device_cgroup.c -index b08d20c..a90420b 100644 +index d794abc..a20f167 100644 --- a/security/device_cgroup.c +++ b/security/device_cgroup.c @@ -7,6 +7,7 @@ @@ -182,7 +193,7 @@ index b08d20c..a90420b 100644 #include #include #include -@@ -617,6 +618,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask) +@@ -631,6 +632,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask) return __devcgroup_check_permission(type, imajor(inode), iminor(inode), access); } @@ -191,7 +202,7 @@ index b08d20c..a90420b 100644 int devcgroup_inode_mknod(int mode, dev_t dev) { diff --git a/security/security.c b/security/security.c -index 8dcd4ae..6efe561 100644 +index 7b88c6a..5d00a30 100644 --- a/security/security.c +++ b/security/security.c @@ -396,6 +396,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry) 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 71c3dc62f..dda7ec8db 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 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt -@@ -455,8 +455,8 @@ bytes respectively. Such letter suffixes +@@ -449,8 +449,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 checkreqprot [SELINUX] Set initial checkreqprot flag value. --- a/init/Kconfig +++ b/init/Kconfig -@@ -784,6 +784,14 @@ config MEMCG +@@ -849,6 +849,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 depends on MEMCG && SWAP --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5132,7 +5132,7 @@ static void cgroup_release_agent(struct +@@ -5149,7 +5149,7 @@ static void cgroup_release_agent(struct mutex_unlock(&cgroup_mutex); } @@ -58,7 +58,7 @@ Signed-off-by: Ben Hutchings { int i; char *token; -@@ -5152,17 +5152,29 @@ static int __init cgroup_disable(char *s +@@ -5169,17 +5169,29 @@ static int __init cgroup_disable(char *s continue; if (!strcmp(token, ss->name)) { @@ -93,7 +93,7 @@ Signed-off-by: Ben Hutchings */ --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -5630,6 +5630,9 @@ static void mem_cgroup_move_task(struct +@@ -6745,6 +6745,9 @@ static void mem_cgroup_move_task(struct struct cgroup_subsys mem_cgroup_subsys = { .name = "memory", @@ -101,5 +101,5 @@ Signed-off-by: Ben Hutchings + .disabled = 1, +#endif .subsys_id = mem_cgroup_subsys_id, - .create = mem_cgroup_create, - .pre_destroy = mem_cgroup_pre_destroy, + .css_alloc = mem_cgroup_css_alloc, + .css_offline = mem_cgroup_css_offline, diff --git a/debian/patches/series b/debian/patches/series index 1f35b18aa..65cb94217 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -47,9 +47,7 @@ bugfix/alpha/alpha-use-large-data-model.diff 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/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch bugfix/arm/omap-musb-choice.patch -bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch features/all/xen/microcode.patch debian/radeon-no-modeset-without-firmware.patch @@ -59,13 +57,7 @@ features/all/xen/microcode-typo.patch bugfix/all/firmware_class-log-every-success-and-failure.patch bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch -bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch -bugfix/all/pps-ptp-Remove-dependencies-on-EXPERIMENTAL.patch -bugfix/all/ptp-Make-PTP_1588_CLOCK-select-rather-than-depend-on.patch -bugfix/all/ptp-Enable-clock-drivers-along-with-associated-net-P.patch -bugfix/all/sfc-Select-PTP_1588_CLOCK.patch -bugfix/all/pch_gbe-ptp_pch-Fix-the-dependency-direction-between.patch debian/udl-disable-autoload.patch debian/ast-disable-autoload.patch debian/mgag200-disable-autoload.patch