From aa7975939f01583230ab7eb0c659c508ac02b680 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 26 Jul 2012 01:04:02 +0000 Subject: [PATCH] Update to 3.2.24 Drop many bugfix patches that passed review in this version. Resolve conflicts between rt featureset and the leap second fixes. Add patches to undo various ABI changes. svn path=/dists/sid/linux/; revision=19293 --- debian/changelog | 31 +- ...M-Fix-buffer-overflow-in-kvm_set_irq.patch | 33 -- ...reduce-the-footprint-of-the-idmapper.patch | 124 ----- ...-the-state-manager-for-lock-reclaim-.patch | 28 -- ...Reduce-the-footprint-of-the-idmapper.patch | 62 --- ...-issue-of-transmit-queue-0-timed-out.patch | 34 -- ...DIATE-but-not-AMPDU-only-when-tracin.patch | 42 -- ...-clear-the-tfile_check_list-on-eloop.patch | 39 -- ...port-max_batch_time-option-correctly.patch | 31 -- ...t-open-if-it-already-found-a-partner.patch | 110 ----- ...use-after-free-bug-in-quota-handling.patch | 451 ------------------ ...not-check-for-ancient-modutils-tools.patch | 45 -- ...-fix-offset-calculation-when-buildin.patch | 61 --- ...erocopy-fix-truesize-underestimation.patch | 41 -- ...-put-page-when-fail-to-get-all-reque.patch | 35 -- ...-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch | 48 -- ...-validate-vectors-before-building-sk.patch | 78 --- .../bugfix/all/raid5-delayed-stripe-fix.patch | 39 -- ...riggerable-bug-from-generic_setlease.patch | 37 -- ...ecessary-warnings-about-ioctl-to-par.patch | 46 -- .../all/tcp-drop-syn-fin-messages.patch | 32 -- ...5-do-not-enable-RC6p-on-Sandy-Bridge.patch | 45 -- ...erator-precedence-when-enabling-RC6p.patch | 32 -- .../hrtimer-Avoid-ABI-change-in-3.2.24.patch | 36 ++ .../libsas-Avoid-ABI-change-in-3.2.24.patch | 85 ++++ .../net-Avoid-ABI-change-in-3.2.24.patch | 23 + ...c-cputime-Avoid-ABI-change-in-3.2.24.patch | 32 ++ .../0023-timekeeping-Split-xtime_lock.patch | 134 ++---- ...133-hrtimers-prepare-full-preemption.patch | 32 +- ...timer-callback-changes-for-preempt-r.patch | 19 +- ...pu-rt-Rework-cpu-down-for-PREEMPT_RT.patch | 27 +- debian/patches/series | 35 +- 32 files changed, 301 insertions(+), 1646 deletions(-) delete mode 100644 debian/patches/bugfix/all/KVM-Fix-buffer-overflow-in-kvm_set_irq.patch delete mode 100644 debian/patches/bugfix/all/NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch delete mode 100644 debian/patches/bugfix/all/NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch delete mode 100644 debian/patches/bugfix/all/NFSv4-Reduce-the-footprint-of-the-idmapper.patch delete mode 100644 debian/patches/bugfix/all/atl1c-fix-issue-of-transmit-queue-0-timed-out.patch delete mode 100644 debian/patches/bugfix/all/brcmsmac-INTERMEDIATE-but-not-AMPDU-only-when-tracin.patch delete mode 100644 debian/patches/bugfix/all/epoll-clear-the-tfile_check_list-on-eloop.patch delete mode 100644 debian/patches/bugfix/all/ext4-Report-max_batch_time-option-correctly.patch delete mode 100644 debian/patches/bugfix/all/fifo-do-not-restart-open-if-it-already-found-a-partner.patch delete mode 100644 debian/patches/bugfix/all/hugepages-fix-use-after-free-bug-in-quota-handling.patch delete mode 100644 debian/patches/bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch delete mode 100644 debian/patches/bugfix/all/macvtap-zerocopy-fix-offset-calculation-when-buildin.patch delete mode 100644 debian/patches/bugfix/all/macvtap-zerocopy-fix-truesize-underestimation.patch delete mode 100644 debian/patches/bugfix/all/macvtap-zerocopy-put-page-when-fail-to-get-all-reque.patch delete mode 100644 debian/patches/bugfix/all/macvtap-zerocopy-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch delete mode 100644 debian/patches/bugfix/all/macvtap-zerocopy-validate-vectors-before-building-sk.patch delete mode 100644 debian/patches/bugfix/all/raid5-delayed-stripe-fix.patch delete mode 100644 debian/patches/bugfix/all/remove-easily-user-triggerable-bug-from-generic_setlease.patch delete mode 100644 debian/patches/bugfix/all/scsi-Silence-unnecessary-warnings-about-ioctl-to-par.patch delete mode 100644 debian/patches/bugfix/all/tcp-drop-syn-fin-messages.patch delete mode 100644 debian/patches/bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch delete mode 100644 debian/patches/bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch create mode 100644 debian/patches/debian/hrtimer-Avoid-ABI-change-in-3.2.24.patch create mode 100644 debian/patches/debian/libsas-Avoid-ABI-change-in-3.2.24.patch create mode 100644 debian/patches/debian/net-Avoid-ABI-change-in-3.2.24.patch create mode 100644 debian/patches/debian/powerpc-cputime-Avoid-ABI-change-in-3.2.24.patch diff --git a/debian/changelog b/debian/changelog index 3158bf70f..26daa26d7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,34 @@ -linux (3.2.23-2) UNRELEASED; urgency=low +linux (3.2.24-1) UNRELEASED; urgency=low + * New upstream stable update: + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.24 + - sched/nohz: Rewrite and fix load-avg computation -- again + (Closes: #674153) + - libsas: fix taskfile corruption in sas_ata_qc_fill_rtf + - md/raid1: fix use-after-free bug in RAID1 data-check code. + - PCI: EHCI: fix crash during suspend on ASUS computers + - cpufreq / ACPI: Fix not loading acpi-cpufreq driver (regression in 3.2.2) + - block: fix infinite loop in __getblk_slow (regression in 3.2.19) + - PM / Hibernate: Hibernate/thaw fixes/improvements + - tcm_fc: Fix crash seen with aborts and large reads + - fifo: Do not restart open() if it already found a partner + - cifs: on CONFIG_HIGHMEM machines, limit the rsize/wsize to the kmap space + - UBIFS: fix a bug in empty space fix-up + - ore: Fix NFS crash by supporting any unaligned RAID IO + - ore: Remove support of partial IO request (NFS crash) + - pnfs-obj: don't leak objio_state if ore_write/read fails + - pnfs-obj: Fix __r4w_get_page when offset is beyond i_size + - dm raid1: fix crash with mirror recovery and discard + - dm raid1: set discard_zeroes_data_unsupported + - time: Fix bugs in leap-second handling (Closes: #679882) + + ntp: Fix leap-second hrtimer livelock + + timekeeping: Fix leapsecond triggered load spike issue + - bnx2x: fix checksum validation + - bnx2x: fix panic when TX ring is full + - eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files + - ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification + + [ Ben Hutchings ] * linux-image: Include package version in utsname version string ('uname -v' output) (Closes: #638878) * linux-source: Drop support for version.$DISTRIBUTION diff --git a/debian/patches/bugfix/all/KVM-Fix-buffer-overflow-in-kvm_set_irq.patch b/debian/patches/bugfix/all/KVM-Fix-buffer-overflow-in-kvm_set_irq.patch deleted file mode 100644 index 08d4368d0..000000000 --- a/debian/patches/bugfix/all/KVM-Fix-buffer-overflow-in-kvm_set_irq.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Avi Kivity -Date: Sun, 22 Apr 2012 17:02:11 +0300 -Subject: [PATCH] KVM: Fix buffer overflow in kvm_set_irq() - -commit f2ebd422f71cda9c791f76f85d2ca102ae34a1ed upstream. - -kvm_set_irq() has an internal buffer of three irq routing entries, allowing -connecting a GSI to three IRQ chips or on MSI. However setup_routing_entry() -does not properly enforce this, allowing three irqchip routes followed by -an MSI route to overflow the buffer. - -Fix by ensuring that an MSI entry is added to an empty list. - -Signed-off-by: Avi Kivity ---- - virt/kvm/irq_comm.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c -index a6a0365..5afb431 100644 ---- a/virt/kvm/irq_comm.c -+++ b/virt/kvm/irq_comm.c -@@ -332,6 +332,7 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt, - */ - hlist_for_each_entry(ei, n, &rt->map[ue->gsi], link) - if (ei->type == KVM_IRQ_ROUTING_MSI || -+ ue->type == KVM_IRQ_ROUTING_MSI || - ue->u.irqchip.irqchip == ei->irqchip.irqchip) - return r; - --- -1.7.10 - diff --git a/debian/patches/bugfix/all/NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch b/debian/patches/bugfix/all/NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch deleted file mode 100644 index 7f1f81532..000000000 --- a/debian/patches/bugfix/all/NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch +++ /dev/null @@ -1,124 +0,0 @@ -From: Trond Myklebust -Date: Wed, 8 Feb 2012 13:39:15 -0500 -Subject: [2/2] NFSv4: Further reduce the footprint of the idmapper - -commit 685f50f9188ac1e8244d0340a9d6ea36b6136cec upstream. - -Don't allocate the legacy idmapper tables until we actually need -them. - -Signed-off-by: Trond Myklebust -Reviewed-by: Jeff Layton -[bwh: Backported to 3.2: adjust context in nfs_idmap_delete()] ---- - fs/nfs/idmap.c | 42 ++++++++++++++++++++++++++++++++++++------ - 1 file changed, 36 insertions(+), 6 deletions(-) - ---- a/fs/nfs/idmap.c -+++ b/fs/nfs/idmap.c -@@ -323,7 +323,7 @@ - - struct idmap_hashtable { - __u8 h_type; -- struct idmap_hashent h_entries[IDMAP_HASH_SZ]; -+ struct idmap_hashent *h_entries; - }; - - struct idmap { -@@ -378,20 +378,39 @@ - return 0; - } - -+static void -+idmap_alloc_hashtable(struct idmap_hashtable *h) -+{ -+ if (h->h_entries != NULL) -+ return; -+ h->h_entries = kcalloc(IDMAP_HASH_SZ, -+ sizeof(*h->h_entries), -+ GFP_KERNEL); -+} -+ -+static void -+idmap_free_hashtable(struct idmap_hashtable *h) -+{ -+ int i; -+ -+ if (h->h_entries == NULL) -+ return; -+ for (i = 0; i < IDMAP_HASH_SZ; i++) -+ kfree(h->h_entries[i].ih_name); -+ kfree(h->h_entries); -+} -+ - void - nfs_idmap_delete(struct nfs_client *clp) - { - struct idmap *idmap = clp->cl_idmap; -- int i; - - if (!idmap) - return; - rpc_unlink(idmap->idmap_dentry); - clp->cl_idmap = NULL; -- for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++) -- kfree(idmap->idmap_user_hash.h_entries[i].ih_name); -- for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++) -- kfree(idmap->idmap_group_hash.h_entries[i].ih_name); -+ idmap_free_hashtable(&idmap->idmap_user_hash); -+ idmap_free_hashtable(&idmap->idmap_group_hash); - kfree(idmap); - } - -@@ -401,6 +420,8 @@ - static inline struct idmap_hashent * - idmap_name_hash(struct idmap_hashtable* h, const char *name, size_t len) - { -+ if (h->h_entries == NULL) -+ return NULL; - return &h->h_entries[fnvhash32(name, len) % IDMAP_HASH_SZ]; - } - -@@ -409,6 +430,8 @@ - { - struct idmap_hashent *he = idmap_name_hash(h, name, len); - -+ if (he == NULL) -+ return NULL; - if (he->ih_namelen != len || memcmp(he->ih_name, name, len) != 0) - return NULL; - if (time_after(jiffies, he->ih_expires)) -@@ -419,6 +442,8 @@ - static inline struct idmap_hashent * - idmap_id_hash(struct idmap_hashtable* h, __u32 id) - { -+ if (h->h_entries == NULL) -+ return NULL; - return &h->h_entries[fnvhash32(&id, sizeof(id)) % IDMAP_HASH_SZ]; - } - -@@ -426,6 +451,9 @@ - idmap_lookup_id(struct idmap_hashtable *h, __u32 id) - { - struct idmap_hashent *he = idmap_id_hash(h, id); -+ -+ if (he == NULL) -+ return NULL; - if (he->ih_id != id || he->ih_namelen == 0) - return NULL; - if (time_after(jiffies, he->ih_expires)) -@@ -441,12 +469,14 @@ - static inline struct idmap_hashent * - idmap_alloc_name(struct idmap_hashtable *h, char *name, size_t len) - { -+ idmap_alloc_hashtable(h); - return idmap_name_hash(h, name, len); - } - - static inline struct idmap_hashent * - idmap_alloc_id(struct idmap_hashtable *h, __u32 id) - { -+ idmap_alloc_hashtable(h); - return idmap_id_hash(h, id); - } - diff --git a/debian/patches/bugfix/all/NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch b/debian/patches/bugfix/all/NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch deleted file mode 100644 index 972e21eb0..000000000 --- a/debian/patches/bugfix/all/NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch +++ /dev/null @@ -1,28 +0,0 @@ -From: William Dauchy -Date: Wed, 14 Mar 2012 12:32:04 +0100 -Subject: [PATCH] NFSv4: Rate limit the state manager for lock reclaim warning - messages - -commit 96dcadc2fdd111dca90d559f189a30c65394451a upstream. - -Adding rate limit on `Lock reclaim failed` messages since it could fill -up system logs -Signed-off-by: William Dauchy -Signed-off-by: Trond Myklebust -[bwh: Backported to 3.2: add the 'NFS:' prefix at the same time] -Signed-off-by: Ben Hutchings ---- ---- a/fs/nfs/nfs4state.c -+++ b/fs/nfs/nfs4state.c -@@ -1261,8 +1261,9 @@ restart: - spin_lock(&state->state_lock); - list_for_each_entry(lock, &state->lock_states, ls_locks) { - if (!(lock->ls_flags & NFS_LOCK_INITIALIZED)) -- printk("%s: Lock reclaim failed!\n", -- __func__); -+ pr_warn_ratelimited("NFS: " -+ "%s: Lock reclaim " -+ "failed!\n", __func__); - } - spin_unlock(&state->state_lock); - nfs4_put_open_state(state); diff --git a/debian/patches/bugfix/all/NFSv4-Reduce-the-footprint-of-the-idmapper.patch b/debian/patches/bugfix/all/NFSv4-Reduce-the-footprint-of-the-idmapper.patch deleted file mode 100644 index e7babc2f3..000000000 --- a/debian/patches/bugfix/all/NFSv4-Reduce-the-footprint-of-the-idmapper.patch +++ /dev/null @@ -1,62 +0,0 @@ -From: Trond Myklebust -Date: Tue, 7 Feb 2012 14:59:05 -0500 -Subject: [1/2] NFSv4: Reduce the footprint of the idmapper - -commit d073e9b541e1ac3f52d72c3a153855d9a9ee3278 upstream. - -Instead of pre-allocating the storage for all the strings, we can -significantly reduce the size of that table by doing the allocation -when we do the downcall. - -Signed-off-by: Trond Myklebust -Reviewed-by: Jeff Layton -[bwh: Backported to 3.2: adjust context in nfs_idmap_delete()] ---- - fs/nfs/idmap.c | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - ---- a/fs/nfs/idmap.c -+++ b/fs/nfs/idmap.c -@@ -318,7 +318,7 @@ - unsigned long ih_expires; - __u32 ih_id; - size_t ih_namelen; -- char ih_name[IDMAP_NAMESZ]; -+ const char *ih_name; - }; - - struct idmap_hashtable { -@@ -382,11 +382,16 @@ - nfs_idmap_delete(struct nfs_client *clp) - { - struct idmap *idmap = clp->cl_idmap; -+ int i; - - if (!idmap) - return; - rpc_unlink(idmap->idmap_dentry); - clp->cl_idmap = NULL; -+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++) -+ kfree(idmap->idmap_user_hash.h_entries[i].ih_name); -+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++) -+ kfree(idmap->idmap_group_hash.h_entries[i].ih_name); - kfree(idmap); - } - -@@ -449,9 +454,14 @@ - idmap_update_entry(struct idmap_hashent *he, const char *name, - size_t namelen, __u32 id) - { -+ char *str = kmalloc(namelen + 1, GFP_KERNEL); -+ if (str == NULL) -+ return; -+ kfree(he->ih_name); - he->ih_id = id; -- memcpy(he->ih_name, name, namelen); -- he->ih_name[namelen] = '\0'; -+ memcpy(str, name, namelen); -+ str[namelen] = '\0'; -+ he->ih_name = str; - he->ih_namelen = namelen; - he->ih_expires = jiffies + nfs_idmap_cache_timeout; - } diff --git a/debian/patches/bugfix/all/atl1c-fix-issue-of-transmit-queue-0-timed-out.patch b/debian/patches/bugfix/all/atl1c-fix-issue-of-transmit-queue-0-timed-out.patch deleted file mode 100644 index fa3dd29c5..000000000 --- a/debian/patches/bugfix/all/atl1c-fix-issue-of-transmit-queue-0-timed-out.patch +++ /dev/null @@ -1,34 +0,0 @@ -From: Cloud Ren -Date: Tue, 3 Jul 2012 16:51:48 +0000 -Subject: atl1c: fix issue of transmit queue 0 timed out - -commit b94e52f62683dc0b00c6d1b58b80929a078c0fd5 upstream. - -some people report atl1c could cause system hang with following -kernel trace info: ---------------------------------------- -WARNING: at.../net/sched/sch_generic.c:258 dev_watchdog+0x1db/0x1d0() -... -NETDEV WATCHDOG: eth0 (atl1c): transmit queue 0 timed out -... ---------------------------------------- -This is caused by netif_stop_queue calling when cable Link is down. -So remove netif_stop_queue, because link_watch will take it over. - -Signed-off-by: xiong -Signed-off-by: Cloud Ren -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 1 - - 1 file changed, 1 deletion(-) - ---- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c -+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c -@@ -267,7 +267,6 @@ static void atl1c_check_link_status(stru - dev_warn(&pdev->dev, "stop mac failed\n"); - atl1c_set_aspm(hw, false); - netif_carrier_off(netdev); -- netif_stop_queue(netdev); - atl1c_phy_reset(hw); - atl1c_phy_init(&adapter->hw); - } else { diff --git a/debian/patches/bugfix/all/brcmsmac-INTERMEDIATE-but-not-AMPDU-only-when-tracin.patch b/debian/patches/bugfix/all/brcmsmac-INTERMEDIATE-but-not-AMPDU-only-when-tracin.patch deleted file mode 100644 index 3d36af9fc..000000000 --- a/debian/patches/bugfix/all/brcmsmac-INTERMEDIATE-but-not-AMPDU-only-when-tracin.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Eldad Zack -Date: Sun, 22 Apr 2012 00:48:04 +0200 -Subject: [PATCH] brcmsmac: "INTERMEDIATE but not AMPDU" only when tracing - -commit 6ead629b27269c553c9092c47cd8f5ab0309ee3b upstream. - -I keep getting the following messages on the log buffer: -[ 2167.097507] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2281.331305] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2281.332539] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2329.876605] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2329.877354] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2462.280756] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU -[ 2615.651689] ieee80211 phy0: brcms_c_dotxstatus: INTERMEDIATE but not AMPDU - -From the code comment I understand that this something that can - -and does, quite frequently - happen. - -Signed-off-by: Eldad Zack -Acked-by: Franky Lin -Signed-off-by: John W. Linville ---- - drivers/net/wireless/brcm80211/brcmsmac/main.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c -index 7083db7..b4d9279 100644 ---- a/drivers/net/wireless/brcm80211/brcmsmac/main.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -847,8 +847,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs) - */ - if (!(txs->status & TX_STATUS_AMPDU) - && (txs->status & TX_STATUS_INTERMEDIATE)) { -- wiphy_err(wlc->wiphy, "%s: INTERMEDIATE but not AMPDU\n", -- __func__); -+ BCMMSG(wlc->wiphy, "INTERMEDIATE but not AMPDU\n"); - return false; - } - --- -1.7.10 - diff --git a/debian/patches/bugfix/all/epoll-clear-the-tfile_check_list-on-eloop.patch b/debian/patches/bugfix/all/epoll-clear-the-tfile_check_list-on-eloop.patch deleted file mode 100644 index d181b65b8..000000000 --- a/debian/patches/bugfix/all/epoll-clear-the-tfile_check_list-on-eloop.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Jason Baron -Date: Wed, 25 Apr 2012 16:01:47 -0700 -Subject: epoll: clear the tfile_check_list on -ELOOP - -commit 13d518074a952d33d47c428419693f63389547e9 upstream. - -An epoll_ctl(,EPOLL_CTL_ADD,,) operation can return '-ELOOP' to prevent -circular epoll dependencies from being created. However, in that case we -do not properly clear the 'tfile_check_list'. Thus, add a call to -clear_tfile_check_list() for the -ELOOP case. - -Signed-off-by: Jason Baron -Reported-by: Yurij M. Plotnikov -Cc: Nelson Elhage -Cc: Davide Libenzi -Tested-by: Alexandra N. Kossovsky -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds -Signed-off-by: Ben Hutchings ---- - fs/eventpoll.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/fs/eventpoll.c b/fs/eventpoll.c -index 739b098..c0b3c70 100644 ---- a/fs/eventpoll.c -+++ b/fs/eventpoll.c -@@ -1663,8 +1663,10 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, - if (op == EPOLL_CTL_ADD) { - if (is_file_epoll(tfile)) { - error = -ELOOP; -- if (ep_loop_check(ep, tfile) != 0) -+ if (ep_loop_check(ep, tfile) != 0) { -+ clear_tfile_check_list(); - goto error_tgt_fput; -+ } - } else - list_add(&tfile->f_tfile_llink, &tfile_check_list); - } diff --git a/debian/patches/bugfix/all/ext4-Report-max_batch_time-option-correctly.patch b/debian/patches/bugfix/all/ext4-Report-max_batch_time-option-correctly.patch deleted file mode 100644 index 13e050f7a..000000000 --- a/debian/patches/bugfix/all/ext4-Report-max_batch_time-option-correctly.patch +++ /dev/null @@ -1,31 +0,0 @@ -From: Ben Hutchings -Date: Wed, 4 Jan 2012 21:22:51 -0500 -Subject: [PATCH] ext4: Report max_batch_time option correctly - -commit 1d526fc91bea04ee35b7599bf8b82f86c0aaf46c upstream. - -Currently the value reported for max_batch_time is really the -value of min_batch_time. - -Reported-by: Russell Coker -Signed-off-by: Ben Hutchings ---- - fs/ext4/super.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index 35377d5..36570b7 100644 ---- a/fs/ext4/super.c -+++ b/fs/ext4/super.c -@@ -1096,7 +1096,7 @@ static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs) - } - if (sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) { - seq_printf(seq, ",max_batch_time=%u", -- (unsigned) sbi->s_min_batch_time); -+ (unsigned) sbi->s_max_batch_time); - } - - /* --- -1.7.10 - diff --git a/debian/patches/bugfix/all/fifo-do-not-restart-open-if-it-already-found-a-partner.patch b/debian/patches/bugfix/all/fifo-do-not-restart-open-if-it-already-found-a-partner.patch deleted file mode 100644 index 8b280cd2d..000000000 --- a/debian/patches/bugfix/all/fifo-do-not-restart-open-if-it-already-found-a-partner.patch +++ /dev/null @@ -1,110 +0,0 @@ -From: Anders Kaseorg -Date: Sun, 15 Jul 2012 17:14:25 -0400 -Subject: fifo: Do not restart open() if it already found a partner -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -commit 05d290d66be6ef77a0b962ebecf01911bd984a78 upstream. - -If a parent and child process open the two ends of a fifo, and the -child immediately exits, the parent may receive a SIGCHLD before its -open() returns. In that case, we need to make sure that open() will -return successfully after the SIGCHLD handler returns, instead of -throwing EINTR or being restarted. Otherwise, the restarted open() -would incorrectly wait for a second partner on the other end. - -The following test demonstrates the EINTR that was wrongly thrown from -the parent’s open(). Change .sa_flags = 0 to .sa_flags = SA_RESTART -to see a deadlock instead, in which the restarted open() waits for a -second reader that will never come. (On my systems, this happens -pretty reliably within about 5 to 500 iterations. Others report that -it manages to loop ~forever sometimes; YMMV.) - - #include - #include - #include - #include - #include - #include - #include - #include - - #define CHECK(x) do if ((x) == -1) {perror(#x); abort();} while(0) - - void handler(int signum) {} - - int main() - { - struct sigaction act = {.sa_handler = handler, .sa_flags = 0}; - CHECK(sigaction(SIGCHLD, &act, NULL)); - CHECK(mknod("fifo", S_IFIFO | S_IRWXU, 0)); - for (;;) { - int fd; - pid_t pid; - putc('.', stderr); - CHECK(pid = fork()); - if (pid == 0) { - CHECK(fd = open("fifo", O_RDONLY)); - _exit(0); - } - CHECK(fd = open("fifo", O_WRONLY)); - CHECK(close(fd)); - CHECK(waitpid(pid, NULL, 0)); - } - } - -This is what I suspect was causing the Git test suite to fail in -t9010-svn-fe.sh: - - http://bugs.debian.org/678852 - -Signed-off-by: Anders Kaseorg -Reviewed-by: Jonathan Nieder -Signed-off-by: Linus Torvalds -Signed-off-by: Ben Hutchings ---- - fs/fifo.c | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/fs/fifo.c b/fs/fifo.c -index b1a524d..cf6f434 100644 ---- a/fs/fifo.c -+++ b/fs/fifo.c -@@ -14,7 +14,7 @@ - #include - #include - --static void wait_for_partner(struct inode* inode, unsigned int *cnt) -+static int wait_for_partner(struct inode* inode, unsigned int *cnt) - { - int cur = *cnt; - -@@ -23,6 +23,7 @@ static void wait_for_partner(struct inode* inode, unsigned int *cnt) - if (signal_pending(current)) - break; - } -+ return cur == *cnt ? -ERESTARTSYS : 0; - } - - static void wake_up_partner(struct inode* inode) -@@ -67,8 +68,7 @@ static int fifo_open(struct inode *inode, struct file *filp) - * seen a writer */ - filp->f_version = pipe->w_counter; - } else { -- wait_for_partner(inode, &pipe->w_counter); -- if(signal_pending(current)) -+ if (wait_for_partner(inode, &pipe->w_counter)) - goto err_rd; - } - } -@@ -90,8 +90,7 @@ static int fifo_open(struct inode *inode, struct file *filp) - wake_up_partner(inode); - - if (!pipe->readers) { -- wait_for_partner(inode, &pipe->r_counter); -- if (signal_pending(current)) -+ if (wait_for_partner(inode, &pipe->r_counter)) - goto err_wr; - } - break; diff --git a/debian/patches/bugfix/all/hugepages-fix-use-after-free-bug-in-quota-handling.patch b/debian/patches/bugfix/all/hugepages-fix-use-after-free-bug-in-quota-handling.patch deleted file mode 100644 index 2105d09cd..000000000 --- a/debian/patches/bugfix/all/hugepages-fix-use-after-free-bug-in-quota-handling.patch +++ /dev/null @@ -1,451 +0,0 @@ -From: David Gibson -Date: Wed, 21 Mar 2012 16:34:12 -0700 -Subject: [PATCH] hugepages: fix use after free bug in "quota" handling - -commit 90481622d75715bfcb68501280a917dbfe516029 upstream. - -hugetlbfs_{get,put}_quota() are badly named. They don't interact with the -general quota handling code, and they don't much resemble its behaviour. -Rather than being about maintaining limits on on-disk block usage by -particular users, they are instead about maintaining limits on in-memory -page usage (including anonymous MAP_PRIVATE copied-on-write pages) -associated with a particular hugetlbfs filesystem instance. - -Worse, they work by having callbacks to the hugetlbfs filesystem code from -the low-level page handling code, in particular from free_huge_page(). -This is a layering violation of itself, but more importantly, if the -kernel does a get_user_pages() on hugepages (which can happen from KVM -amongst others), then the free_huge_page() can be delayed until after the -associated inode has already been freed. If an unmount occurs at the -wrong time, even the hugetlbfs superblock where the "quota" limits are -stored may have been freed. - -Andrew Barry proposed a patch to fix this by having hugepages, instead of -storing a pointer to their address_space and reaching the superblock from -there, had the hugepages store pointers directly to the superblock, -bumping the reference count as appropriate to avoid it being freed. -Andrew Morton rejected that version, however, on the grounds that it made -the existing layering violation worse. - -This is a reworked version of Andrew's patch, which removes the extra, and -some of the existing, layering violation. It works by introducing the -concept of a hugepage "subpool" at the lower hugepage mm layer - that is a -finite logical pool of hugepages to allocate from. hugetlbfs now creates -a subpool for each filesystem instance with a page limit set, and a -pointer to the subpool gets added to each allocated hugepage, instead of -the address_space pointer used now. The subpool has its own lifetime and -is only freed once all pages in it _and_ all other references to it (i.e. -superblocks) are gone. - -subpools are optional - a NULL subpool pointer is taken by the code to -mean that no subpool limits are in effect. - -Previous discussion of this bug found in: "Fix refcounting in hugetlbfs -quota handling.". See: https://lkml.org/lkml/2011/8/11/28 or -http://marc.info/?l=linux-mm&m=126928970510627&w=1 - -v2: Fixed a bug spotted by Hillf Danton, and removed the extra parameter to -alloc_huge_page() - since it already takes the vma, it is not necessary. - -Signed-off-by: Andrew Barry -Signed-off-by: David Gibson -Cc: Hugh Dickins -Cc: Mel Gorman -Cc: Minchan Kim -Cc: Hillf Danton -Cc: Paul Mackerras -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds -[bwh: Backported to 3.2: adjust context to apply after commit - c50ac050811d6485616a193eb0f37bfbd191cc89 'hugetlb: fix resv_map leak in - error path' which should be in 3.2.20] ---- ---- a/fs/hugetlbfs/inode.c -+++ b/fs/hugetlbfs/inode.c -@@ -626,9 +626,15 @@ static int hugetlbfs_statfs(struct dentry *dentry, struct kstatfs *buf) - spin_lock(&sbinfo->stat_lock); - /* If no limits set, just report 0 for max/free/used - * blocks, like simple_statfs() */ -- if (sbinfo->max_blocks >= 0) { -- buf->f_blocks = sbinfo->max_blocks; -- buf->f_bavail = buf->f_bfree = sbinfo->free_blocks; -+ if (sbinfo->spool) { -+ long free_pages; -+ -+ spin_lock(&sbinfo->spool->lock); -+ buf->f_blocks = sbinfo->spool->max_hpages; -+ free_pages = sbinfo->spool->max_hpages -+ - sbinfo->spool->used_hpages; -+ buf->f_bavail = buf->f_bfree = free_pages; -+ spin_unlock(&sbinfo->spool->lock); - buf->f_files = sbinfo->max_inodes; - buf->f_ffree = sbinfo->free_inodes; - } -@@ -644,6 +650,10 @@ static void hugetlbfs_put_super(struct super_block *sb) - - if (sbi) { - sb->s_fs_info = NULL; -+ -+ if (sbi->spool) -+ hugepage_put_subpool(sbi->spool); -+ - kfree(sbi); - } - } -@@ -874,10 +884,14 @@ hugetlbfs_fill_super(struct super_block *sb, void *data, int silent) - sb->s_fs_info = sbinfo; - sbinfo->hstate = config.hstate; - spin_lock_init(&sbinfo->stat_lock); -- sbinfo->max_blocks = config.nr_blocks; -- sbinfo->free_blocks = config.nr_blocks; - sbinfo->max_inodes = config.nr_inodes; - sbinfo->free_inodes = config.nr_inodes; -+ sbinfo->spool = NULL; -+ if (config.nr_blocks != -1) { -+ sbinfo->spool = hugepage_new_subpool(config.nr_blocks); -+ if (!sbinfo->spool) -+ goto out_free; -+ } - sb->s_maxbytes = MAX_LFS_FILESIZE; - sb->s_blocksize = huge_page_size(config.hstate); - sb->s_blocksize_bits = huge_page_shift(config.hstate); -@@ -896,38 +910,12 @@ hugetlbfs_fill_super(struct super_block *sb, void *data, int silent) - sb->s_root = root; - return 0; - out_free: -+ if (sbinfo->spool) -+ kfree(sbinfo->spool); - kfree(sbinfo); - return -ENOMEM; - } - --int hugetlb_get_quota(struct address_space *mapping, long delta) --{ -- int ret = 0; -- struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); -- -- if (sbinfo->free_blocks > -1) { -- spin_lock(&sbinfo->stat_lock); -- if (sbinfo->free_blocks - delta >= 0) -- sbinfo->free_blocks -= delta; -- else -- ret = -ENOMEM; -- spin_unlock(&sbinfo->stat_lock); -- } -- -- return ret; --} -- --void hugetlb_put_quota(struct address_space *mapping, long delta) --{ -- struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); -- -- if (sbinfo->free_blocks > -1) { -- spin_lock(&sbinfo->stat_lock); -- sbinfo->free_blocks += delta; -- spin_unlock(&sbinfo->stat_lock); -- } --} -- - static struct dentry *hugetlbfs_mount(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) - { -diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h -index 7adc492..cf01817 100644 ---- a/include/linux/hugetlb.h -+++ b/include/linux/hugetlb.h -@@ -14,6 +14,15 @@ struct user_struct; - #include - #include - -+struct hugepage_subpool { -+ spinlock_t lock; -+ long count; -+ long max_hpages, used_hpages; -+}; -+ -+struct hugepage_subpool *hugepage_new_subpool(long nr_blocks); -+void hugepage_put_subpool(struct hugepage_subpool *spool); -+ - int PageHuge(struct page *page); - - void reset_vma_resv_huge_pages(struct vm_area_struct *vma); -@@ -129,12 +138,11 @@ enum { - }; - - struct hugetlbfs_sb_info { -- long max_blocks; /* blocks allowed */ -- long free_blocks; /* blocks free */ - long max_inodes; /* inodes allowed */ - long free_inodes; /* inodes free */ - spinlock_t stat_lock; - struct hstate *hstate; -+ struct hugepage_subpool *spool; - }; - - -@@ -146,8 +154,6 @@ extern const struct file_operations hugetlbfs_file_operations; - extern const struct vm_operations_struct hugetlb_vm_ops; - struct file *hugetlb_file_setup(const char *name, size_t size, vm_flags_t acct, - struct user_struct **user, int creat_flags); --int hugetlb_get_quota(struct address_space *mapping, long delta); --void hugetlb_put_quota(struct address_space *mapping, long delta); - - static inline int is_file_hugepages(struct file *file) - { -diff --git a/mm/hugetlb.c b/mm/hugetlb.c -index b1c3148..afa057a 100644 ---- a/mm/hugetlb.c -+++ b/mm/hugetlb.c -@@ -53,6 +53,84 @@ static unsigned long __initdata default_hstate_size; - */ - static DEFINE_SPINLOCK(hugetlb_lock); - -+static inline void unlock_or_release_subpool(struct hugepage_subpool *spool) -+{ -+ bool free = (spool->count == 0) && (spool->used_hpages == 0); -+ -+ spin_unlock(&spool->lock); -+ -+ /* If no pages are used, and no other handles to the subpool -+ * remain, free the subpool the subpool remain */ -+ if (free) -+ kfree(spool); -+} -+ -+struct hugepage_subpool *hugepage_new_subpool(long nr_blocks) -+{ -+ struct hugepage_subpool *spool; -+ -+ spool = kmalloc(sizeof(*spool), GFP_KERNEL); -+ if (!spool) -+ return NULL; -+ -+ spin_lock_init(&spool->lock); -+ spool->count = 1; -+ spool->max_hpages = nr_blocks; -+ spool->used_hpages = 0; -+ -+ return spool; -+} -+ -+void hugepage_put_subpool(struct hugepage_subpool *spool) -+{ -+ spin_lock(&spool->lock); -+ BUG_ON(!spool->count); -+ spool->count--; -+ unlock_or_release_subpool(spool); -+} -+ -+static int hugepage_subpool_get_pages(struct hugepage_subpool *spool, -+ long delta) -+{ -+ int ret = 0; -+ -+ if (!spool) -+ return 0; -+ -+ spin_lock(&spool->lock); -+ if ((spool->used_hpages + delta) <= spool->max_hpages) { -+ spool->used_hpages += delta; -+ } else { -+ ret = -ENOMEM; -+ } -+ spin_unlock(&spool->lock); -+ -+ return ret; -+} -+ -+static void hugepage_subpool_put_pages(struct hugepage_subpool *spool, -+ long delta) -+{ -+ if (!spool) -+ return; -+ -+ spin_lock(&spool->lock); -+ spool->used_hpages -= delta; -+ /* If hugetlbfs_put_super couldn't free spool due to -+ * an outstanding quota reference, free it now. */ -+ unlock_or_release_subpool(spool); -+} -+ -+static inline struct hugepage_subpool *subpool_inode(struct inode *inode) -+{ -+ return HUGETLBFS_SB(inode->i_sb)->spool; -+} -+ -+static inline struct hugepage_subpool *subpool_vma(struct vm_area_struct *vma) -+{ -+ return subpool_inode(vma->vm_file->f_dentry->d_inode); -+} -+ - /* - * Region tracking -- allows tracking of reservations and instantiated pages - * across the pages in a mapping. -@@ -540,9 +618,9 @@ static void free_huge_page(struct page *page) - */ - struct hstate *h = page_hstate(page); - int nid = page_to_nid(page); -- struct address_space *mapping; -+ struct hugepage_subpool *spool = -+ (struct hugepage_subpool *)page_private(page); - -- mapping = (struct address_space *) page_private(page); - set_page_private(page, 0); - page->mapping = NULL; - BUG_ON(page_count(page)); -@@ -558,8 +636,7 @@ static void free_huge_page(struct page *page) - enqueue_huge_page(h, page); - } - spin_unlock(&hugetlb_lock); -- if (mapping) -- hugetlb_put_quota(mapping, 1); -+ hugepage_subpool_put_pages(spool, 1); - } - - static void prep_new_huge_page(struct hstate *h, struct page *page, int nid) -@@ -977,11 +1054,12 @@ static void return_unused_surplus_pages(struct hstate *h, - /* - * Determine if the huge page at addr within the vma has an associated - * reservation. Where it does not we will need to logically increase -- * reservation and actually increase quota before an allocation can occur. -- * Where any new reservation would be required the reservation change is -- * prepared, but not committed. Once the page has been quota'd allocated -- * an instantiated the change should be committed via vma_commit_reservation. -- * No action is required on failure. -+ * reservation and actually increase subpool usage before an allocation -+ * can occur. Where any new reservation would be required the -+ * reservation change is prepared, but not committed. Once the page -+ * has been allocated from the subpool and instantiated the change should -+ * be committed via vma_commit_reservation. No action is required on -+ * failure. - */ - static long vma_needs_reservation(struct hstate *h, - struct vm_area_struct *vma, unsigned long addr) -@@ -1030,24 +1108,24 @@ static void vma_commit_reservation(struct hstate *h, - static struct page *alloc_huge_page(struct vm_area_struct *vma, - unsigned long addr, int avoid_reserve) - { -+ struct hugepage_subpool *spool = subpool_vma(vma); - struct hstate *h = hstate_vma(vma); - struct page *page; -- struct address_space *mapping = vma->vm_file->f_mapping; -- struct inode *inode = mapping->host; - long chg; - - /* -- * Processes that did not create the mapping will have no reserves and -- * will not have accounted against quota. Check that the quota can be -- * made before satisfying the allocation -- * MAP_NORESERVE mappings may also need pages and quota allocated -- * if no reserve mapping overlaps. -+ * Processes that did not create the mapping will have no -+ * reserves and will not have accounted against subpool -+ * limit. Check that the subpool limit can be made before -+ * satisfying the allocation MAP_NORESERVE mappings may also -+ * need pages and subpool limit allocated allocated if no reserve -+ * mapping overlaps. - */ - chg = vma_needs_reservation(h, vma, addr); - if (chg < 0) - return ERR_PTR(-VM_FAULT_OOM); - if (chg) -- if (hugetlb_get_quota(inode->i_mapping, chg)) -+ if (hugepage_subpool_get_pages(spool, chg)) - return ERR_PTR(-VM_FAULT_SIGBUS); - - spin_lock(&hugetlb_lock); -@@ -1057,12 +1135,12 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma, - if (!page) { - page = alloc_buddy_huge_page(h, NUMA_NO_NODE); - if (!page) { -- hugetlb_put_quota(inode->i_mapping, chg); -+ hugepage_subpool_put_pages(spool, chg); - return ERR_PTR(-VM_FAULT_SIGBUS); - } - } - -- set_page_private(page, (unsigned long) mapping); -+ set_page_private(page, (unsigned long)spool); - - vma_commit_reservation(h, vma, addr); - -@@ -2083,6 +2161,7 @@ static void hugetlb_vm_op_close(struct vm_area_struct *vma) - { - struct hstate *h = hstate_vma(vma); - struct resv_map *reservations = vma_resv_map(vma); -+ struct hugepage_subpool *spool = subpool_vma(vma); - unsigned long reserve; - unsigned long start; - unsigned long end; -@@ -2098,7 +2177,7 @@ static void hugetlb_vm_op_close(struct vm_area_struct *vma) - - if (reserve) { - hugetlb_acct_memory(h, -reserve); -- hugetlb_put_quota(vma->vm_file->f_mapping, reserve); -+ hugepage_subpool_put_pages(spool, reserve); - } - } - } -@@ -2331,7 +2410,7 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, - address = address & huge_page_mask(h); - pgoff = ((address - vma->vm_start) >> PAGE_SHIFT) - + (vma->vm_pgoff >> PAGE_SHIFT); -- mapping = (struct address_space *)page_private(page); -+ mapping = vma->vm_file->f_dentry->d_inode->i_mapping; - - /* - * Take the mapping lock for the duration of the table walk. As -@@ -2884,11 +2963,12 @@ int hugetlb_reserve_pages(struct inode *inode, - { - long ret, chg; - struct hstate *h = hstate_inode(inode); -+ struct hugepage_subpool *spool = subpool_inode(inode); - - /* - * Only apply hugepage reservation if asked. At fault time, an - * attempt will be made for VM_NORESERVE to allocate a page -- * and filesystem quota without using reserves -+ * without using reserves - */ - if (vm_flags & VM_NORESERVE) - return 0; -@@ -2915,19 +2995,19 @@ int hugetlb_reserve_pages(struct inode *inode, - goto out_err; - } - -- /* There must be enough filesystem quota for the mapping */ -- if (hugetlb_get_quota(inode->i_mapping, chg)) { -+ /* There must be enough pages in the subpool for the mapping */ -+ if (hugepage_subpool_get_pages(spool, chg)) { - ret = -ENOSPC; - goto out_err; - } - - /* - * Check enough hugepages are available for the reservation. -- * Hand back the quota if there are not -+ * Hand the pages back to the subpool if there are not - */ - ret = hugetlb_acct_memory(h, chg); - if (ret < 0) { -- hugetlb_put_quota(inode->i_mapping, chg); -+ hugepage_subpool_put_pages(spool, chg); - goto out_err; - } - -@@ -2949,12 +3029,13 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed) - { - struct hstate *h = hstate_inode(inode); - long chg = region_truncate(&inode->i_mapping->private_list, offset); -+ struct hugepage_subpool *spool = subpool_inode(inode); - - spin_lock(&inode->i_lock); - inode->i_blocks -= (blocks_per_huge_page(h) * freed); - spin_unlock(&inode->i_lock); - -- hugetlb_put_quota(inode->i_mapping, (chg - freed)); -+ hugepage_subpool_put_pages(spool, (chg - freed)); - hugetlb_acct_memory(h, -(chg - freed)); - } - diff --git a/debian/patches/bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch b/debian/patches/bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch deleted file mode 100644 index ad10f623b..000000000 --- a/debian/patches/bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Lucas De Marchi -Date: Tue, 17 Jan 2012 14:50:51 -0200 -Subject: [PATCH] kbuild: do not check for ancient modutils tools - -commit 620c231c7a7f48745094727bb612f6321cfc8844 upstream. - -scripts/depmod.sh checks for the output of '-V' expecting that it has -module-init-tools in it. It's a hack to prevent users from using -modutils instead of module-init-tools, that only works with 2.4.x -kernels. This however prints an annoying warning for kmod tool, that is -currently replacing module-init-tools. - -Rather than putting another check for kmod's version, just remove it -since users of 2.4.x kernel are unlikely to upgrade to 3.x, and if they -do, let depmod fail in that case because they should know what they are -doing. - -Signed-off-by: Lucas De Marchi -Acked-by: WANG Cong -Acked-By: Kay Sievers -Signed-off-by: Michal Marek ---- - scripts/depmod.sh | 6 ------ - 1 files changed, 0 insertions(+), 6 deletions(-) - -diff --git a/scripts/depmod.sh b/scripts/depmod.sh -index a272356..2ae4817 100755 ---- a/scripts/depmod.sh -+++ b/scripts/depmod.sh -@@ -9,12 +9,6 @@ fi - DEPMOD=$1 - KERNELRELEASE=$2 - --if ! "$DEPMOD" -V 2>/dev/null | grep -q module-init-tools; then -- echo "Warning: you may need to install module-init-tools" >&2 -- echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt" >&2 -- sleep 1 --fi -- - if ! test -r System.map -a -x "$DEPMOD"; then - exit 0 - fi --- -1.7.9.1 - diff --git a/debian/patches/bugfix/all/macvtap-zerocopy-fix-offset-calculation-when-buildin.patch b/debian/patches/bugfix/all/macvtap-zerocopy-fix-offset-calculation-when-buildin.patch deleted file mode 100644 index 911076814..000000000 --- a/debian/patches/bugfix/all/macvtap-zerocopy-fix-offset-calculation-when-buildin.patch +++ /dev/null @@ -1,61 +0,0 @@ -From: Jason Wang -Date: Wed, 2 May 2012 11:41:30 +0800 -Subject: [1/5] macvtap: zerocopy: fix offset calculation when building skb - -commit 3afc9621f15701c557e60f61eba9242bac2771dd upstream. - -This patch fixes the offset calculation when building skb: - -- offset1 were used as skb data offset not vector offset -- reset offset to zero only when we advance to next vector - -Signed-off-by: Jason Wang -Signed-off-by: Michael S. Tsirkin ---- - drivers/net/macvtap.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index 0427c65..bd4a70d 100644 ---- a/drivers/net/macvtap.c -+++ b/drivers/net/macvtap.c -@@ -505,10 +505,11 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - if (copy > size) { - ++from; - --count; -- } -+ offset = 0; -+ } else -+ offset += size; - copy -= size; - offset1 += size; -- offset = 0; - } - - if (len == offset1) -@@ -519,13 +520,13 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - int num_pages; - unsigned long base; - -- len = from->iov_len - offset1; -+ len = from->iov_len - offset; - if (!len) { -- offset1 = 0; -+ offset = 0; - ++from; - continue; - } -- base = (unsigned long)from->iov_base + offset1; -+ base = (unsigned long)from->iov_base + offset; - size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; - num_pages = get_user_pages_fast(base, size, 0, &page[i]); - if ((num_pages != size) || -@@ -546,7 +547,7 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - len -= size; - i++; - } -- offset1 = 0; -+ offset = 0; - ++from; - } - return 0; diff --git a/debian/patches/bugfix/all/macvtap-zerocopy-fix-truesize-underestimation.patch b/debian/patches/bugfix/all/macvtap-zerocopy-fix-truesize-underestimation.patch deleted file mode 100644 index 75164f0a2..000000000 --- a/debian/patches/bugfix/all/macvtap-zerocopy-fix-truesize-underestimation.patch +++ /dev/null @@ -1,41 +0,0 @@ -From: Jason Wang -Date: Wed, 2 May 2012 11:41:44 +0800 -Subject: [2/5] macvtap: zerocopy: fix truesize underestimation - -commit 4ef67ebedffa44ed9939b34708ac2fee06d2f65f upstream. - -As the skb fragment were pinned/built from user pages, we should -account the page instead of length for truesize. - -Signed-off-by: Jason Wang -Signed-off-by: Michael S. Tsirkin ---- - drivers/net/macvtap.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index bd4a70d..7cb2684 100644 ---- a/drivers/net/macvtap.c -+++ b/drivers/net/macvtap.c -@@ -519,6 +519,7 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - struct page *page[MAX_SKB_FRAGS]; - int num_pages; - unsigned long base; -+ unsigned long truesize; - - len = from->iov_len - offset; - if (!len) { -@@ -533,10 +534,11 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - (num_pages > MAX_SKB_FRAGS - skb_shinfo(skb)->nr_frags)) - /* put_page is in skb free */ - return -EFAULT; -+ truesize = size * PAGE_SIZE; - skb->data_len += len; - skb->len += len; -- skb->truesize += len; -- atomic_add(len, &skb->sk->sk_wmem_alloc); -+ skb->truesize += truesize; -+ atomic_add(truesize, &skb->sk->sk_wmem_alloc); - while (len) { - int off = base & ~PAGE_MASK; - int size = min_t(int, len, PAGE_SIZE - off); diff --git a/debian/patches/bugfix/all/macvtap-zerocopy-put-page-when-fail-to-get-all-reque.patch b/debian/patches/bugfix/all/macvtap-zerocopy-put-page-when-fail-to-get-all-reque.patch deleted file mode 100644 index 1674eb84f..000000000 --- a/debian/patches/bugfix/all/macvtap-zerocopy-put-page-when-fail-to-get-all-reque.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Jason Wang -Date: Wed, 2 May 2012 11:41:58 +0800 -Subject: [3/5] macvtap: zerocopy: put page when fail to get all requested - user pages - -commit 02ce04bb3d28c3333231f43bca677228dbc686fe upstream. - -When get_user_pages_fast() fails to get all requested pages, we could not use -kfree_skb() to free it as it has not been put in the skb fragments. So we need -to call put_page() instead. - -Signed-off-by: Jason Wang -Signed-off-by: Michael S. Tsirkin ---- - drivers/net/macvtap.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index 7cb2684..9ab182a 100644 ---- a/drivers/net/macvtap.c -+++ b/drivers/net/macvtap.c -@@ -531,9 +531,11 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; - num_pages = get_user_pages_fast(base, size, 0, &page[i]); - if ((num_pages != size) || -- (num_pages > MAX_SKB_FRAGS - skb_shinfo(skb)->nr_frags)) -- /* put_page is in skb free */ -+ (num_pages > MAX_SKB_FRAGS - skb_shinfo(skb)->nr_frags)) { -+ for (i = 0; i < num_pages; i++) -+ put_page(page[i]); - return -EFAULT; -+ } - truesize = size * PAGE_SIZE; - skb->data_len += len; - skb->len += len; diff --git a/debian/patches/bugfix/all/macvtap-zerocopy-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch b/debian/patches/bugfix/all/macvtap-zerocopy-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch deleted file mode 100644 index fb5c20256..000000000 --- a/debian/patches/bugfix/all/macvtap-zerocopy-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch +++ /dev/null @@ -1,48 +0,0 @@ -From: Jason Wang -Date: Wed, 2 May 2012 11:42:06 +0800 -Subject: [4/5] macvtap: zerocopy: set SKBTX_DEV_ZEROCOPY only when skb is - built successfully - -commit 01d6657b388438def19c8baaea28e742b6ed32ec upstream. - -Current the SKBTX_DEV_ZEROCOPY is set unconditionally after -zerocopy_sg_from_iovec(), this would lead NULL pointer when macvtap -fails to build zerocopy skb because destructor_arg was not -initialized. Solve this by set this flag after the skb were built -successfully. - -Signed-off-by: Jason Wang -Signed-off-by: Michael S. Tsirkin ---- - drivers/net/macvtap.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index 9ab182a..a4ff694 100644 ---- a/drivers/net/macvtap.c -+++ b/drivers/net/macvtap.c -@@ -699,10 +699,9 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, - if (!skb) - goto err; - -- if (zerocopy) { -+ if (zerocopy) - err = zerocopy_sg_from_iovec(skb, iv, vnet_hdr_len, count); -- skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; -- } else -+ else - err = skb_copy_datagram_from_iovec(skb, 0, iv, vnet_hdr_len, - len); - if (err) -@@ -721,8 +720,10 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, - rcu_read_lock_bh(); - vlan = rcu_dereference_bh(q->vlan); - /* copy skb_ubuf_info for callback when skb has no error */ -- if (zerocopy) -+ if (zerocopy) { - skb_shinfo(skb)->destructor_arg = m->msg_control; -+ skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; -+ } - if (vlan) - macvlan_start_xmit(skb, vlan->dev); - else diff --git a/debian/patches/bugfix/all/macvtap-zerocopy-validate-vectors-before-building-sk.patch b/debian/patches/bugfix/all/macvtap-zerocopy-validate-vectors-before-building-sk.patch deleted file mode 100644 index b9f8ce82c..000000000 --- a/debian/patches/bugfix/all/macvtap-zerocopy-validate-vectors-before-building-sk.patch +++ /dev/null @@ -1,78 +0,0 @@ -From: Jason Wang -Date: Wed, 2 May 2012 11:42:15 +0800 -Subject: macvtap: zerocopy: validate vectors before building skb - -commit b92946e2919134ebe2a4083e4302236295ea2a73 upstream. - -There're several reasons that the vectors need to be validated: - -- Return error when caller provides vectors whose num is greater than UIO_MAXIOV. -- Linearize part of skb when userspace provides vectors grater than MAX_SKB_FRAGS. -- Return error when userspace provides vectors whose total length may exceed -- MAX_SKB_FRAGS * PAGE_SIZE. - -Signed-off-by: Jason Wang -Signed-off-by: Michael S. Tsirkin ---- - drivers/net/macvtap.c | 25 +++++++++++++++++++++---- - 1 file changed, 21 insertions(+), 4 deletions(-) - -diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index a4ff694..163559c 100644 ---- a/drivers/net/macvtap.c -+++ b/drivers/net/macvtap.c -@@ -529,9 +529,10 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, - } - base = (unsigned long)from->iov_base + offset; - size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; -+ if (i + size > MAX_SKB_FRAGS) -+ return -EMSGSIZE; - num_pages = get_user_pages_fast(base, size, 0, &page[i]); -- if ((num_pages != size) || -- (num_pages > MAX_SKB_FRAGS - skb_shinfo(skb)->nr_frags)) { -+ if (num_pages != size) { - for (i = 0; i < num_pages; i++) - put_page(page[i]); - return -EFAULT; -@@ -651,7 +652,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, - int err; - struct virtio_net_hdr vnet_hdr = { 0 }; - int vnet_hdr_len = 0; -- int copylen; -+ int copylen = 0; - bool zerocopy = false; - - if (q->flags & IFF_VNET_HDR) { -@@ -680,15 +681,31 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, - if (unlikely(len < ETH_HLEN)) - goto err; - -+ err = -EMSGSIZE; -+ if (unlikely(count > UIO_MAXIOV)) -+ goto err; -+ - if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) - zerocopy = true; - - if (zerocopy) { -+ /* Userspace may produce vectors with count greater than -+ * MAX_SKB_FRAGS, so we need to linearize parts of the skb -+ * to let the rest of data to be fit in the frags. -+ */ -+ if (count > MAX_SKB_FRAGS) { -+ copylen = iov_length(iv, count - MAX_SKB_FRAGS); -+ if (copylen < vnet_hdr_len) -+ copylen = 0; -+ else -+ copylen -= vnet_hdr_len; -+ } - /* There are 256 bytes to be copied in skb, so there is enough - * room for skb expand head in case it is used. - * The rest buffer is mapped from userspace. - */ -- copylen = vnet_hdr.hdr_len; -+ if (copylen < vnet_hdr.hdr_len) -+ copylen = vnet_hdr.hdr_len; - if (!copylen) - copylen = GOODCOPY_LEN; - } else diff --git a/debian/patches/bugfix/all/raid5-delayed-stripe-fix.patch b/debian/patches/bugfix/all/raid5-delayed-stripe-fix.patch deleted file mode 100644 index 49edc983c..000000000 --- a/debian/patches/bugfix/all/raid5-delayed-stripe-fix.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Shaohua Li -Date: Tue, 3 Jul 2012 15:57:19 +1000 -Subject: raid5: delayed stripe fix - -commit fab363b5ff502d1b39ddcfec04271f5858d9f26e upstream. - -There isn't locking setting STRIPE_DELAYED and STRIPE_PREREAD_ACTIVE bits, but -the two bits have relationship. A delayed stripe can be moved to hold list only -when preread active stripe count is below IO_THRESHOLD. If a stripe has both -the bits set, such stripe will be in delayed list and preread count not 0, -which will make such stripe never leave delayed list. - -Signed-off-by: Shaohua Li -Signed-off-by: NeilBrown -Signed-off-by: Ben Hutchings ---- - drivers/md/raid5.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c -index 51169ec..7245a9d 100644 ---- a/drivers/md/raid5.c -+++ b/drivers/md/raid5.c -@@ -196,12 +196,14 @@ static void __release_stripe(struct r5conf *conf, struct stripe_head *sh) - BUG_ON(!list_empty(&sh->lru)); - BUG_ON(atomic_read(&conf->active_stripes)==0); - if (test_bit(STRIPE_HANDLE, &sh->state)) { -- if (test_bit(STRIPE_DELAYED, &sh->state)) -+ if (test_bit(STRIPE_DELAYED, &sh->state) && -+ !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) - list_add_tail(&sh->lru, &conf->delayed_list); - else if (test_bit(STRIPE_BIT_DELAY, &sh->state) && - sh->bm_seq - conf->seq_write > 0) - list_add_tail(&sh->lru, &conf->bitmap_list); - else { -+ clear_bit(STRIPE_DELAYED, &sh->state); - clear_bit(STRIPE_BIT_DELAY, &sh->state); - list_add_tail(&sh->lru, &conf->handle_list); - } diff --git a/debian/patches/bugfix/all/remove-easily-user-triggerable-bug-from-generic_setlease.patch b/debian/patches/bugfix/all/remove-easily-user-triggerable-bug-from-generic_setlease.patch deleted file mode 100644 index f77cb8e75..000000000 --- a/debian/patches/bugfix/all/remove-easily-user-triggerable-bug-from-generic_setlease.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Dave Jones -Date: Fri, 13 Jul 2012 13:35:36 -0400 -Subject: Remove easily user-triggerable BUG from generic_setlease - -commit 8d657eb3b43861064d36241e88d9d61c709f33f0 upstream. - -This can be trivially triggered from userspace by passing in something unexpected. - - kernel BUG at fs/locks.c:1468! - invalid opcode: 0000 [#1] SMP - RIP: 0010:generic_setlease+0xc2/0x100 - Call Trace: - __vfs_setlease+0x35/0x40 - fcntl_setlease+0x76/0x150 - sys_fcntl+0x1c6/0x810 - system_call_fastpath+0x1a/0x1f - -Signed-off-by: Dave Jones -Signed-off-by: Linus Torvalds -Signed-off-by: Ben Hutchings ---- - fs/locks.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fs/locks.c b/fs/locks.c -index 814c51d..fce6238 100644 ---- a/fs/locks.c -+++ b/fs/locks.c -@@ -1465,7 +1465,7 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp) - case F_WRLCK: - return generic_add_lease(filp, arg, flp); - default: -- BUG(); -+ return -EINVAL; - } - } - EXPORT_SYMBOL(generic_setlease); diff --git a/debian/patches/bugfix/all/scsi-Silence-unnecessary-warnings-about-ioctl-to-par.patch b/debian/patches/bugfix/all/scsi-Silence-unnecessary-warnings-about-ioctl-to-par.patch deleted file mode 100644 index 3df8347f4..000000000 --- a/debian/patches/bugfix/all/scsi-Silence-unnecessary-warnings-about-ioctl-to-par.patch +++ /dev/null @@ -1,46 +0,0 @@ -From: Jan Kara -Date: Fri, 15 Jun 2012 12:52:46 +0200 -Subject: scsi: Silence unnecessary warnings about ioctl to partition - -commit 6d9359280753d2955f86d6411047516a9431eb51 upstream. - -Sometimes, warnings about ioctls to partition happen often enough that they -form majority of the warnings in the kernel log and users complain. In some -cases warnings are about ioctls such as SG_IO so it's not good to get rid of -the warnings completely as they can ease debugging of userspace problems -when ioctl is refused. - -Since I have seen warnings from lots of commands, including some proprietary -userspace applications, I don't think disallowing the ioctls for processes -with CAP_SYS_RAWIO will happen in the near future if ever. So lets just -stop warning for processes with CAP_SYS_RAWIO for which ioctl is allowed. - -CC: Paolo Bonzini -CC: James Bottomley -CC: linux-scsi@vger.kernel.org -Acked-by: Paolo Bonzini -Signed-off-by: Jan Kara -Signed-off-by: Jens Axboe -[bwh: Backported to 3.2: use ENOTTY, not ENOIOCTLCMD] ---- - block/scsi_ioctl.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/block/scsi_ioctl.c -+++ b/block/scsi_ioctl.c -@@ -721,11 +721,14 @@ int scsi_verify_blk_ioctl(struct block_device *bd, unsigned int cmd) - break; - } - -+ if (capable(CAP_SYS_RAWIO)) -+ return 0; -+ - /* In particular, rule out all resets and host-specific ioctls. */ - printk_ratelimited(KERN_WARNING - "%s: sending ioctl %x to a partition!\n", current->comm, cmd); - -- return capable(CAP_SYS_RAWIO) ? 0 : -ENOTTY; -+ return -ENOTTY; - } - EXPORT_SYMBOL(scsi_verify_blk_ioctl); - diff --git a/debian/patches/bugfix/all/tcp-drop-syn-fin-messages.patch b/debian/patches/bugfix/all/tcp-drop-syn-fin-messages.patch deleted file mode 100644 index 4c2444140..000000000 --- a/debian/patches/bugfix/all/tcp-drop-syn-fin-messages.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Eric Dumazet -Date: Fri, 2 Dec 2011 23:41:42 +0000 -Subject: tcp: drop SYN+FIN messages - -commit fdf5af0daf8019cec2396cdef8fb042d80fe71fa upstream. - -Denys Fedoryshchenko reported that SYN+FIN attacks were bringing his -linux machines to their limits. - -Dont call conn_request() if the TCP flags includes SYN flag - -Reported-by: Denys Fedoryshchenko -Signed-off-by: Eric Dumazet -Signed-off-by: David S. Miller -Signed-off-by: Ben Hutchings ---- - net/ipv4/tcp_input.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index 78dd38c..0cbb440 100644 ---- a/net/ipv4/tcp_input.c -+++ b/net/ipv4/tcp_input.c -@@ -5811,6 +5811,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, - goto discard; - - if (th->syn) { -+ if (th->fin) -+ goto discard; - if (icsk->icsk_af_ops->conn_request(sk, skb) < 0) - return 1; - diff --git a/debian/patches/bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch b/debian/patches/bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch deleted file mode 100644 index d3d294b01..000000000 --- a/debian/patches/bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Eugeni Dodonov -Date: Tue, 14 Feb 2012 11:44:48 -0200 -Subject: [PATCH] drm/i915: do not enable RC6p on Sandy Bridge - -commit 1c8ecf80fdee4e7b23a9e7da7ff9bd59ba2dcf96 upstream. - -With base on latest findings, RC6p seems to be respondible for RC6-related -issues on Sandy Bridge platform. To work-around those issues, the previous -solution was to completely disable RC6 on Sandy Bridge for the past few -releases, even if plain RC6 was not giving any issues. - -What this patch does is preventing RC6p from being enabled on Sandy Bridge -even if users enable RC6 via a kernel parameter. So it won't change the -defaults in any way, but will ensure that if users do enable RC6 manually -it won't break their machines by enabling this extra state. - -Proper fix for this (enabling specific RC6 states according to the GPU -generation) were proposed for the -next kernel, but we are too late in the -release process now to pick such changes. - -Acked-by: Keith Packard -Signed-off-by: Eugeni Dodonov -Signed-off-by: Jesse Barnes ---- - drivers/gpu/drm/i915/intel_display.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index d9b042b..049804e 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -8182,8 +8182,8 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv) - I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */ - - if (intel_enable_rc6(dev_priv->dev)) -- rc6_mask = GEN6_RC_CTL_RC6p_ENABLE | -- GEN6_RC_CTL_RC6_ENABLE; -+ rc6_mask = GEN6_RC_CTL_RC6_ENABLE | -+ (IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0; - - I915_WRITE(GEN6_RC_CONTROL, - rc6_mask | --- -1.7.9.1 - diff --git a/debian/patches/bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch b/debian/patches/bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch deleted file mode 100644 index 230cdcbd9..000000000 --- a/debian/patches/bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Eugeni Dodonov -Date: Thu, 23 Feb 2012 23:57:06 -0200 -Subject: [PATCH] drm/i915: fix operator precedence when enabling RC6p - -commit c0e2ee1bc0cf82eec89e26b7afe7e4db0561b7d9 upstream. - -As noticed by Torsten Kaiser, the operator precedence can play tricks with -us here. - -CC: Dave Airlie -Signed-off-by: Eugeni Dodonov -Signed-off-by: Jesse Barnes ---- - drivers/gpu/drm/i915/intel_display.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index e654f32..4871ba0 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -8194,7 +8194,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv) - - if (intel_enable_rc6(dev_priv->dev)) - rc6_mask = GEN6_RC_CTL_RC6_ENABLE | -- (IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0; -+ ((IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0); - - I915_WRITE(GEN6_RC_CONTROL, - rc6_mask | --- -1.7.10 - diff --git a/debian/patches/debian/hrtimer-Avoid-ABI-change-in-3.2.24.patch b/debian/patches/debian/hrtimer-Avoid-ABI-change-in-3.2.24.patch new file mode 100644 index 000000000..82662aeb2 --- /dev/null +++ b/debian/patches/debian/hrtimer-Avoid-ABI-change-in-3.2.24.patch @@ -0,0 +1,36 @@ +From e858f73d794205cfda77ddfb4cbf86a1b5aeb72f Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 25 Jul 2012 05:00:02 +0100 +Subject: [PATCH 1/4] hrtimer: Avoid ABI change in 3.2.24 + +struct hrtimer_cpu_base should not be allocated by modules. Move +the new member clock_was_set to the end and hide it from genksyms. +Revert the type change of active_bases. +--- + include/linux/hrtimer.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h +index cc07d27..c2012e3 100644 +--- a/include/linux/hrtimer.h ++++ b/include/linux/hrtimer.h +@@ -178,8 +178,7 @@ enum hrtimer_base_type { + */ + struct hrtimer_cpu_base { + raw_spinlock_t lock; +- unsigned int active_bases; +- unsigned int clock_was_set; ++ unsigned long active_bases; + #ifdef CONFIG_HIGH_RES_TIMERS + ktime_t expires_next; + int hres_active; +@@ -190,6 +189,9 @@ struct hrtimer_cpu_base { + ktime_t max_hang_time; + #endif + struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; ++#ifndef __GENKSYMS__ ++ unsigned int clock_was_set; ++#endif + }; + + static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time) diff --git a/debian/patches/debian/libsas-Avoid-ABI-change-in-3.2.24.patch b/debian/patches/debian/libsas-Avoid-ABI-change-in-3.2.24.patch new file mode 100644 index 000000000..e72b3693a --- /dev/null +++ b/debian/patches/debian/libsas-Avoid-ABI-change-in-3.2.24.patch @@ -0,0 +1,85 @@ +From 331cf8308dcde22597583c4be4eabdc5d168c703 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 25 Jul 2012 05:26:58 +0100 +Subject: [PATCH 3/4] libsas: Avoid ABI change in 3.2.24 + +Revert commit 6ef1b512f4e6f936d89aa20be3d97a7ec7c290ac ('libsas: fix +taskfile corruption in sas_ata_qc_fill_rtf') and fix the bug in a +different way. + +SATA command results must be converted from FIS to ata_taskfile +format. This is done in two stages via a temporary buffer in +struct sata_device, as the source and target addresses aren't +known at the same time (?). + +The old code does conversion and then memcpy(), which is wrong +because the conversion only assigns some members and the rest +of the target structure should be left unchanged. + +The upstream fix switches this to memcpy() and conversion, but +that changes the temporary buffer format and makes it larger +(the ABI change). + +This fix changes the memcpy() to write only the target members +that would be written by the conversion function. +--- + drivers/scsi/libsas/sas_ata.c | 15 +++++++++------ + include/scsi/libsas.h | 2 +- + 2 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c +index 4868fc9..c707410 100644 +--- a/drivers/scsi/libsas/sas_ata.c ++++ b/drivers/scsi/libsas/sas_ata.c +@@ -112,12 +112,12 @@ static void sas_ata_task_done(struct sas_task *task) + if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD || + ((stat->stat == SAM_STAT_CHECK_CONDITION && + dev->sata_dev.command_set == ATAPI_COMMAND_SET))) { +- memcpy(dev->sata_dev.fis, resp->ending_fis, ATA_RESP_FIS_SIZE); ++ ata_tf_from_fis(resp->ending_fis, &dev->sata_dev.tf); + + if (!link->sactive) { +- qc->err_mask |= ac_err_mask(dev->sata_dev.fis[2]); ++ qc->err_mask |= ac_err_mask(dev->sata_dev.tf.command); + } else { +- link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.fis[2]); ++ link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.tf.command); + if (unlikely(link->eh_info.err_mask)) + qc->flags |= ATA_QCFLAG_FAILED; + } +@@ -138,8 +138,8 @@ static void sas_ata_task_done(struct sas_task *task) + qc->flags |= ATA_QCFLAG_FAILED; + } + +- dev->sata_dev.fis[3] = 0x04; /* status err */ +- dev->sata_dev.fis[2] = ATA_ERR; ++ dev->sata_dev.tf.feature = 0x04; /* status err */ ++ dev->sata_dev.tf.command = ATA_ERR; + } + } + +@@ -252,7 +252,10 @@ static bool sas_ata_qc_fill_rtf(struct ata_queued_cmd *qc) + { + struct domain_device *dev = qc->ap->private_data; + +- ata_tf_from_fis(dev->sata_dev.fis, &qc->result_tf); ++ /* Copy only those fields that ata_tf_from_fis() sets */ ++ memcpy(&qc->result_tf.hob_nsect, &dev->sata_dev.tf.hob_nsect, ++ sizeof(dev->sata_dev.tf) - ++ offsetof(struct ata_taskfile, hob_nsect)); + return true; + } + +diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h +index 1e100c6..4cd529d 100644 +--- a/include/scsi/libsas.h ++++ b/include/scsi/libsas.h +@@ -172,7 +172,7 @@ struct sata_device { + + struct ata_port *ap; + struct ata_host ata_host; +- u8 fis[ATA_RESP_FIS_SIZE]; ++ struct ata_taskfile tf; + u32 sstatus; + u32 serror; + u32 scontrol; diff --git a/debian/patches/debian/net-Avoid-ABI-change-in-3.2.24.patch b/debian/patches/debian/net-Avoid-ABI-change-in-3.2.24.patch new file mode 100644 index 000000000..5d62a3004 --- /dev/null +++ b/debian/patches/debian/net-Avoid-ABI-change-in-3.2.24.patch @@ -0,0 +1,23 @@ +From 222f965efd8d504e374758209dcc8f56d37f62fc Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 25 Jul 2012 05:00:55 +0100 +Subject: [PATCH 2/4] net: Avoid ABI change in 3.2.24 + +Don't renumber skb_shared_info TX flags. +--- + include/linux/skbuff.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h +index 53dc7e7..a3615cc 100644 +--- a/include/linux/skbuff.h ++++ b/include/linux/skbuff.h +@@ -214,7 +214,7 @@ enum { + SKBTX_IN_PROGRESS = 1 << 2, + + /* device driver supports TX zero-copy buffers */ +- SKBTX_DEV_ZEROCOPY = 1 << 3, ++ SKBTX_DEV_ZEROCOPY = 1 << 4, + }; + + /* diff --git a/debian/patches/debian/powerpc-cputime-Avoid-ABI-change-in-3.2.24.patch b/debian/patches/debian/powerpc-cputime-Avoid-ABI-change-in-3.2.24.patch new file mode 100644 index 000000000..07d8b6384 --- /dev/null +++ b/debian/patches/debian/powerpc-cputime-Avoid-ABI-change-in-3.2.24.patch @@ -0,0 +1,32 @@ +From 70c7bdf78972dd72ceffbf8b88c5d9fec22dae01 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 25 Jul 2012 05:47:16 +0100 +Subject: [PATCH 4/4] powerpc: cputime: Avoid ABI change in 3.2.24 + +Restore __cputime_msec_factor. +--- + arch/powerpc/kernel/time.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c +index ec8affe..010b325 100644 +--- a/arch/powerpc/kernel/time.c ++++ b/arch/powerpc/kernel/time.c +@@ -175,6 +175,8 @@ u64 __cputime_jiffies_factor; + EXPORT_SYMBOL(__cputime_jiffies_factor); + u64 __cputime_usec_factor; + EXPORT_SYMBOL(__cputime_usec_factor); ++u64 __cputime_msec_factor; ++EXPORT_SYMBOL(__cputime_msec_factor); + u64 __cputime_sec_factor; + EXPORT_SYMBOL(__cputime_sec_factor); + u64 __cputime_clockt_factor; +@@ -194,6 +196,8 @@ static void calc_cputime_factors(void) + __cputime_jiffies_factor = res.result_low; + div128_by_32(1000000, 0, tb_ticks_per_sec, &res); + __cputime_usec_factor = res.result_low; ++ div128_by_32(1000, 0, tb_ticks_per_sec, &res); ++ __cputime_msec_factor = res.result_low; + div128_by_32(1, 0, tb_ticks_per_sec, &res); + __cputime_sec_factor = res.result_low; + div128_by_32(USER_HZ, 0, tb_ticks_per_sec, &res); diff --git a/debian/patches/features/all/rt/0023-timekeeping-Split-xtime_lock.patch b/debian/patches/features/all/rt/0023-timekeeping-Split-xtime_lock.patch index ca3144c80..80b3b169e 100644 --- a/debian/patches/features/all/rt/0023-timekeeping-Split-xtime_lock.patch +++ b/debian/patches/features/all/rt/0023-timekeeping-Split-xtime_lock.patch @@ -9,6 +9,10 @@ code pathes. This is a straight forward split, so we can avoid the whole mess with raw seqlocks for RT. Signed-off-by: Thomas Gleixner +[bwh: Forward-ported to 3.2.24: adjust context; drop changes to + ntp_leap_second() function removed by commit + 6b43ae8a619d17c4935c3320d2ef9e92bdeed05d ('ntp: Fix leap-second hrtimer + livelock')] --- kernel/time/jiffies.c | 4 +- kernel/time/ntp.c | 24 ++++++++---- @@ -18,8 +22,6 @@ Signed-off-by: Thomas Gleixner kernel/time/timekeeping.c | 90 +++++++++++++++++++++++++------------------ 6 files changed, 88 insertions(+), 59 deletions(-) -diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c -index a470154..21940eb 100644 --- a/kernel/time/jiffies.c +++ b/kernel/time/jiffies.c @@ -74,9 +74,9 @@ u64 get_jiffies_64(void) @@ -34,31 +36,9 @@ index a470154..21940eb 100644 return ret; } EXPORT_SYMBOL(get_jiffies_64); -diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c -index 4b85a7a..419cbaa 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c -@@ -358,7 +358,8 @@ static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer) - { - enum hrtimer_restart res = HRTIMER_NORESTART; - -- write_seqlock(&xtime_lock); -+ raw_spin_lock(&xtime_lock); -+ write_seqcount_begin(&xtime_seq); - - switch (time_state) { - case TIME_OK: -@@ -388,7 +389,8 @@ static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer) - break; - } - -- write_sequnlock(&xtime_lock); -+ write_seqcount_end(&xtime_seq); -+ raw_spin_unlock(&xtime_lock); - - return res; - } -@@ -663,7 +665,8 @@ int do_adjtimex(struct timex *txc) +@@ -623,7 +623,8 @@ int do_adjtimex(struct timex *txc) getnstimeofday(&ts); @@ -68,7 +48,7 @@ index 4b85a7a..419cbaa 100644 if (txc->modes & ADJ_ADJTIME) { long save_adjust = time_adjust; -@@ -705,7 +708,8 @@ int do_adjtimex(struct timex *txc) +@@ -665,7 +666,8 @@ int do_adjtimex(struct timex *txc) /* fill PPS status fields */ pps_fill_timex(txc); @@ -78,7 +58,7 @@ index 4b85a7a..419cbaa 100644 txc->time.tv_sec = ts.tv_sec; txc->time.tv_usec = ts.tv_nsec; -@@ -903,7 +907,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) +@@ -863,7 +865,8 @@ void hardpps(const struct timespec *phas pts_norm = pps_normalize_ts(*phase_ts); @@ -88,7 +68,7 @@ index 4b85a7a..419cbaa 100644 /* clear the error bits, they will be set again if needed */ time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR); -@@ -916,7 +921,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) +@@ -876,7 +879,8 @@ void hardpps(const struct timespec *phas * just start the frequency interval */ if (unlikely(pps_fbase.tv_sec == 0)) { pps_fbase = *raw_ts; @@ -98,7 +78,7 @@ index 4b85a7a..419cbaa 100644 return; } -@@ -931,7 +937,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) +@@ -891,7 +895,8 @@ void hardpps(const struct timespec *phas time_status |= STA_PPSJITTER; /* restart the frequency calibration interval */ pps_fbase = *raw_ts; @@ -108,7 +88,7 @@ index 4b85a7a..419cbaa 100644 pr_err("hardpps: PPSJITTER: bad pulse\n"); return; } -@@ -948,7 +955,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) +@@ -908,7 +913,8 @@ void hardpps(const struct timespec *phas hardpps_update_phase(pts_norm.nsec); @@ -118,8 +98,6 @@ index 4b85a7a..419cbaa 100644 } EXPORT_SYMBOL(hardpps); -diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c -index da6c9ec..39de540 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c @@ -63,13 +63,15 @@ int tick_is_oneshot_available(void) @@ -140,7 +118,7 @@ index da6c9ec..39de540 100644 } update_process_times(user_mode(get_irq_regs())); -@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast) +@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_ev ktime_t next; do { @@ -152,22 +130,18 @@ index da6c9ec..39de540 100644 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); -diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h -index 4e265b9..c91100d 100644 --- a/kernel/time/tick-internal.h +++ b/kernel/time/tick-internal.h -@@ -141,4 +141,5 @@ static inline int tick_device_is_functional(struct clock_event_device *dev) +@@ -141,4 +141,5 @@ static inline int tick_device_is_functio #endif extern void do_timer(unsigned long ticks); -extern seqlock_t xtime_lock; +extern raw_spinlock_t xtime_lock; +extern seqcount_t xtime_seq; -diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c -index c923640..d7abd2f 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c -@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(ktime_t now) +@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(kti return; /* Reevalute with xtime_lock held */ @@ -177,7 +151,7 @@ index c923640..d7abd2f 100644 delta = ktime_sub(now, last_jiffies_update); if (delta.tv64 >= tick_period.tv64) { -@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(ktime_t now) +@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(kti /* Keep the tick_next_period variable up to date */ tick_next_period = ktime_add(last_jiffies_update, tick_period); } @@ -187,7 +161,7 @@ index c923640..d7abd2f 100644 } /* -@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(void) +@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(vo { ktime_t period; @@ -204,7 +178,7 @@ index c923640..d7abd2f 100644 return period; } -@@ -345,11 +349,11 @@ void tick_nohz_stop_sched_tick(int inidle) +@@ -345,11 +349,11 @@ void tick_nohz_stop_sched_tick(int inidl ts->idle_calls++; /* Read jiffies and the time when jiffies were updated last */ do { @@ -218,11 +192,9 @@ index c923640..d7abd2f 100644 if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) || arch_needs_cpu(cpu)) { -diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c -index 2378413..da9e1f9 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c -@@ -139,8 +139,8 @@ static inline s64 timekeeping_get_ns_raw(void) +@@ -139,8 +139,8 @@ static inline s64 timekeeping_get_ns_raw * This read-write spinlock protects us from races in SMP while * playing with xtime. */ @@ -233,7 +205,7 @@ index 2378413..da9e1f9 100644 /* * The current time -@@ -222,7 +222,7 @@ void getnstimeofday(struct timespec *ts) +@@ -242,7 +242,7 @@ void getnstimeofday(struct timespec *ts) WARN_ON(timekeeping_suspended); do { @@ -242,7 +214,7 @@ index 2378413..da9e1f9 100644 *ts = xtime; nsecs = timekeeping_get_ns(); -@@ -230,7 +230,7 @@ void getnstimeofday(struct timespec *ts) +@@ -250,7 +250,7 @@ void getnstimeofday(struct timespec *ts) /* If arch requires, add in gettimeoffset() */ nsecs += arch_gettimeoffset(); @@ -251,7 +223,7 @@ index 2378413..da9e1f9 100644 timespec_add_ns(ts, nsecs); } -@@ -245,14 +245,14 @@ ktime_t ktime_get(void) +@@ -265,14 +265,14 @@ ktime_t ktime_get(void) WARN_ON(timekeeping_suspended); do { @@ -268,7 +240,7 @@ index 2378413..da9e1f9 100644 /* * Use ktime_set/ktime_add_ns to create a proper ktime on * 32-bit architectures without CONFIG_KTIME_SCALAR. -@@ -278,14 +278,14 @@ void ktime_get_ts(struct timespec *ts) +@@ -298,14 +298,14 @@ void ktime_get_ts(struct timespec *ts) WARN_ON(timekeeping_suspended); do { @@ -285,7 +257,7 @@ index 2378413..da9e1f9 100644 set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec, ts->tv_nsec + tomono.tv_nsec + nsecs); -@@ -313,7 +313,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real) +@@ -333,7 +333,7 @@ void getnstime_raw_and_real(struct times do { u32 arch_offset; @@ -294,7 +266,7 @@ index 2378413..da9e1f9 100644 *ts_raw = raw_time; *ts_real = xtime; -@@ -326,7 +326,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real) +@@ -346,7 +346,7 @@ void getnstime_raw_and_real(struct times nsecs_raw += arch_offset; nsecs_real += arch_offset; @@ -303,7 +275,7 @@ index 2378413..da9e1f9 100644 timespec_add_ns(ts_raw, nsecs_raw); timespec_add_ns(ts_real, nsecs_real); -@@ -365,7 +365,8 @@ int do_settimeofday(const struct timespec *tv) +@@ -385,7 +385,8 @@ int do_settimeofday(const struct timespe if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) return -EINVAL; @@ -313,9 +285,9 @@ index 2378413..da9e1f9 100644 timekeeping_forward_now(); -@@ -381,7 +382,8 @@ int do_settimeofday(const struct timespec *tv) - update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock, - timekeeper.mult); +@@ -397,7 +398,8 @@ int do_settimeofday(const struct timespe + + timekeeping_update(true); - write_sequnlock_irqrestore(&xtime_lock, flags); + write_seqcount_end(&xtime_seq); @@ -323,7 +295,7 @@ index 2378413..da9e1f9 100644 /* signal hrtimers about time change */ clock_was_set(); -@@ -405,7 +407,8 @@ int timekeeping_inject_offset(struct timespec *ts) +@@ -421,7 +423,8 @@ int timekeeping_inject_offset(struct tim if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC) return -EINVAL; @@ -333,9 +305,9 @@ index 2378413..da9e1f9 100644 timekeeping_forward_now(); -@@ -418,7 +421,8 @@ int timekeeping_inject_offset(struct timespec *ts) - update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock, - timekeeper.mult); +@@ -430,7 +433,8 @@ int timekeeping_inject_offset(struct tim + + timekeeping_update(true); - write_sequnlock_irqrestore(&xtime_lock, flags); + write_seqcount_end(&xtime_seq); @@ -343,7 +315,7 @@ index 2378413..da9e1f9 100644 /* signal hrtimers about time change */ clock_was_set(); -@@ -490,11 +494,11 @@ void getrawmonotonic(struct timespec *ts) +@@ -502,11 +506,11 @@ void getrawmonotonic(struct timespec *ts s64 nsecs; do { @@ -357,7 +329,7 @@ index 2378413..da9e1f9 100644 timespec_add_ns(ts, nsecs); } -@@ -510,11 +514,11 @@ int timekeeping_valid_for_hres(void) +@@ -522,11 +526,11 @@ int timekeeping_valid_for_hres(void) int ret; do { @@ -371,7 +343,7 @@ index 2378413..da9e1f9 100644 return ret; } -@@ -572,7 +576,8 @@ void __init timekeeping_init(void) +@@ -584,7 +588,8 @@ void __init timekeeping_init(void) read_persistent_clock(&now); read_boot_clock(&boot); @@ -381,8 +353,8 @@ index 2378413..da9e1f9 100644 ntp_init(); -@@ -593,7 +598,8 @@ void __init timekeeping_init(void) - -boot.tv_sec, -boot.tv_nsec); +@@ -606,7 +611,8 @@ void __init timekeeping_init(void) + update_rt_offset(); total_sleep_time.tv_sec = 0; total_sleep_time.tv_nsec = 0; - write_sequnlock_irqrestore(&xtime_lock, flags); @@ -391,7 +363,7 @@ index 2378413..da9e1f9 100644 } /* time in seconds when suspend began */ -@@ -640,7 +646,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta) +@@ -659,14 +665,16 @@ void timekeeping_inject_sleeptime(struct if (!(ts.tv_sec == 0 && ts.tv_nsec == 0)) return; @@ -401,9 +373,8 @@ index 2378413..da9e1f9 100644 timekeeping_forward_now(); __timekeeping_inject_sleeptime(delta); -@@ -650,7 +657,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta) - update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock, - timekeeper.mult); + + timekeeping_update(true); - write_sequnlock_irqrestore(&xtime_lock, flags); + write_seqcount_end(&xtime_seq); @@ -411,7 +382,7 @@ index 2378413..da9e1f9 100644 /* signal hrtimers about time change */ clock_was_set(); -@@ -673,7 +681,8 @@ static void timekeeping_resume(void) +@@ -689,7 +697,8 @@ static void timekeeping_resume(void) clocksource_resume(); @@ -421,17 +392,17 @@ index 2378413..da9e1f9 100644 if (timespec_compare(&ts, &timekeeping_suspend_time) > 0) { ts = timespec_sub(ts, timekeeping_suspend_time); -@@ -683,7 +692,8 @@ static void timekeeping_resume(void) - timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock); +@@ -700,7 +709,8 @@ static void timekeeping_resume(void) timekeeper.ntp_error = 0; timekeeping_suspended = 0; + timekeeping_update(false); - write_sequnlock_irqrestore(&xtime_lock, flags); + write_seqcount_end(&xtime_seq); + raw_spin_unlock_irqrestore(&xtime_lock, flags); touch_softlockup_watchdog(); -@@ -701,7 +711,8 @@ static int timekeeping_suspend(void) +@@ -718,7 +728,8 @@ static int timekeeping_suspend(void) read_persistent_clock(&timekeeping_suspend_time); @@ -441,7 +412,7 @@ index 2378413..da9e1f9 100644 timekeeping_forward_now(); timekeeping_suspended = 1; -@@ -724,7 +735,8 @@ static int timekeeping_suspend(void) +@@ -741,7 +752,8 @@ static int timekeeping_suspend(void) timekeeping_suspend_time = timespec_add(timekeeping_suspend_time, delta_delta); } @@ -451,7 +422,7 @@ index 2378413..da9e1f9 100644 clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL); clocksource_suspend(); -@@ -1101,13 +1113,13 @@ void get_monotonic_boottime(struct timespec *ts) +@@ -1126,13 +1138,13 @@ void get_monotonic_boottime(struct times WARN_ON(timekeeping_suspended); do { @@ -467,7 +438,7 @@ index 2378413..da9e1f9 100644 set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec + sleep.tv_sec, ts->tv_nsec + tomono.tv_nsec + sleep.tv_nsec + nsecs); -@@ -1158,10 +1170,10 @@ struct timespec current_kernel_time(void) +@@ -1183,10 +1195,10 @@ struct timespec current_kernel_time(void unsigned long seq; do { @@ -480,7 +451,7 @@ index 2378413..da9e1f9 100644 return now; } -@@ -1173,11 +1185,11 @@ struct timespec get_monotonic_coarse(void) +@@ -1198,11 +1210,11 @@ struct timespec get_monotonic_coarse(voi unsigned long seq; do { @@ -494,7 +465,7 @@ index 2378413..da9e1f9 100644 set_normalized_timespec(&now, now.tv_sec + mono.tv_sec, now.tv_nsec + mono.tv_nsec); -@@ -1209,11 +1221,11 @@ void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim, +@@ -1234,11 +1246,11 @@ void get_xtime_and_monotonic_and_sleep_o unsigned long seq; do { @@ -507,8 +478,8 @@ index 2378413..da9e1f9 100644 + } while (read_seqcount_retry(&xtime_seq, seq)); } - /** -@@ -1225,9 +1237,9 @@ ktime_t ktime_get_monotonic_offset(void) + #ifdef CONFIG_HIGH_RES_TIMERS +@@ -1284,9 +1296,9 @@ ktime_t ktime_get_monotonic_offset(void) struct timespec wtom; do { @@ -520,7 +491,7 @@ index 2378413..da9e1f9 100644 return timespec_to_ktime(wtom); } -@@ -1239,7 +1251,9 @@ ktime_t ktime_get_monotonic_offset(void) +@@ -1298,7 +1310,9 @@ ktime_t ktime_get_monotonic_offset(void) */ void xtime_update(unsigned long ticks) { @@ -532,6 +503,3 @@ index 2378413..da9e1f9 100644 + write_seqcount_end(&xtime_seq); + raw_spin_unlock(&xtime_lock); } --- -1.7.10 - diff --git a/debian/patches/features/all/rt/0133-hrtimers-prepare-full-preemption.patch b/debian/patches/features/all/rt/0133-hrtimers-prepare-full-preemption.patch index 922d3ed63..247965fbd 100644 --- a/debian/patches/features/all/rt/0133-hrtimers-prepare-full-preemption.patch +++ b/debian/patches/features/all/rt/0133-hrtimers-prepare-full-preemption.patch @@ -8,6 +8,7 @@ against preemption. Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner +[bwh: Adjust context for ABI bodge in struct hrtimer_cpu_base] --- include/linux/hrtimer.h | 10 ++++++++++ kernel/hrtimer.c | 33 ++++++++++++++++++++++++++++++++- @@ -15,11 +16,9 @@ Signed-off-by: Thomas Gleixner kernel/posix-timers.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) -diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h -index fd0dc30..e8b395d 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h -@@ -187,6 +187,9 @@ struct hrtimer_cpu_base { +@@ -188,6 +188,9 @@ struct hrtimer_cpu_base { unsigned long nr_hangs; ktime_t max_hang_time; #endif @@ -27,9 +26,9 @@ index fd0dc30..e8b395d 100644 + wait_queue_head_t wait; +#endif struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; - }; - -@@ -374,6 +377,13 @@ static inline int hrtimer_restart(struct hrtimer *timer) + #ifndef __GENKSYMS__ + unsigned int clock_was_set; +@@ -384,6 +387,13 @@ static inline int hrtimer_restart(struct return hrtimer_start_expires(timer, HRTIMER_MODE_ABS); } @@ -43,11 +42,9 @@ index fd0dc30..e8b395d 100644 /* Query timers: */ extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer); extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp); -diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c -index 1a3695e..905e2cd2 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c -@@ -847,6 +847,32 @@ u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval) +@@ -857,6 +857,32 @@ u64 hrtimer_forward(struct hrtimer *time } EXPORT_SYMBOL_GPL(hrtimer_forward); @@ -80,7 +77,7 @@ index 1a3695e..905e2cd2 100644 /* * enqueue_hrtimer - internal function to (re)start a timer * -@@ -1073,7 +1099,7 @@ int hrtimer_cancel(struct hrtimer *timer) +@@ -1083,7 +1109,7 @@ int hrtimer_cancel(struct hrtimer *timer if (ret >= 0) return ret; @@ -89,7 +86,7 @@ index 1a3695e..905e2cd2 100644 } } EXPORT_SYMBOL_GPL(hrtimer_cancel); -@@ -1476,6 +1502,8 @@ void hrtimer_run_queues(void) +@@ -1497,6 +1523,8 @@ void hrtimer_run_queues(void) } raw_spin_unlock(&cpu_base->lock); } @@ -98,7 +95,7 @@ index 1a3695e..905e2cd2 100644 } /* -@@ -1638,6 +1666,9 @@ static void __cpuinit init_hrtimers_cpu(int cpu) +@@ -1659,6 +1687,9 @@ static void __cpuinit init_hrtimers_cpu( } hrtimer_init_hres(cpu_base); @@ -108,8 +105,6 @@ index 1a3695e..905e2cd2 100644 } #ifdef CONFIG_HOTPLUG_CPU -diff --git a/kernel/itimer.c b/kernel/itimer.c -index d802883..2c582fc 100644 --- a/kernel/itimer.c +++ b/kernel/itimer.c @@ -214,6 +214,7 @@ again: @@ -120,11 +115,9 @@ index d802883..2c582fc 100644 goto again; } expires = timeval_to_ktime(value->it_value); -diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c -index 7b73c34..6a74800 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c -@@ -766,6 +766,20 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id) +@@ -766,6 +766,20 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_ return overrun; } @@ -182,7 +175,7 @@ index 7b73c34..6a74800 100644 spin_lock(¤t->sighand->siglock); list_del(&timer->list); -@@ -920,8 +943,18 @@ static void itimer_delete(struct k_itimer *timer) +@@ -920,8 +943,18 @@ static void itimer_delete(struct k_itime retry_delete: spin_lock_irqsave(&timer->it_lock, flags); @@ -201,6 +194,3 @@ index 7b73c34..6a74800 100644 goto retry_delete; } list_del(&timer->list); --- -1.7.10 - diff --git a/debian/patches/features/all/rt/0134-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch b/debian/patches/features/all/rt/0134-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch index 8f532ad86..118cecebe 100644 --- a/debian/patches/features/all/rt/0134-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch +++ b/debian/patches/features/all/rt/0134-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch @@ -12,6 +12,9 @@ delivery problem for real. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar +[bwh: Forward-ported to 3.2.24: move the code added to run_hrtimer_softirq() + by commit f55a6faa384304c89cfef162768e88374d3312cb ('hrtimer: Provide + clock_was_set_delayed()')] --- include/linux/hrtimer.h | 3 + kernel/hrtimer.c | 190 +++++++++++++++++++++++++++++++++++++++++----- @@ -292,12 +295,19 @@ index 905e2cd2..1dd627b 100644 return; } -@@ -1430,17 +1580,17 @@ void hrtimer_peek_ahead_timers(void) +@@ -1430,24 +1580,24 @@ void hrtimer_peek_ahead_timers(void) local_irq_restore(flags); } -static void run_hrtimer_softirq(struct softirq_action *h) -{ +- struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); +- +- if (cpu_base->clock_was_set) { +- cpu_base->clock_was_set = 0; +- clock_was_set(); +- } +- - hrtimer_peek_ahead_timers(); -} - @@ -309,6 +319,13 @@ index 905e2cd2..1dd627b 100644 +static void run_hrtimer_softirq(struct softirq_action *h) +{ ++ struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); ++ ++ if (cpu_base->clock_was_set) { ++ cpu_base->clock_was_set = 0; ++ clock_was_set(); ++ } ++ + hrtimer_rt_run_pending(); +} + diff --git a/debian/patches/features/all/rt/0278-cpu-rt-Rework-cpu-down-for-PREEMPT_RT.patch b/debian/patches/features/all/rt/0278-cpu-rt-Rework-cpu-down-for-PREEMPT_RT.patch index 0c747fa45..c154fba03 100644 --- a/debian/patches/features/all/rt/0278-cpu-rt-Rework-cpu-down-for-PREEMPT_RT.patch +++ b/debian/patches/features/all/rt/0278-cpu-rt-Rework-cpu-down-for-PREEMPT_RT.patch @@ -54,11 +54,9 @@ Signed-off-by: Thomas Gleixner kernel/sched.c | 82 ++++++++++++++++- 3 files changed, 285 insertions(+), 40 deletions(-) -diff --git a/include/linux/sched.h b/include/linux/sched.h -index 0174e3a..9ca3172 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -1933,6 +1933,10 @@ extern void do_set_cpus_allowed(struct task_struct *p, +@@ -1933,6 +1933,10 @@ extern void do_set_cpus_allowed(struct t extern int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask); @@ -69,7 +67,7 @@ index 0174e3a..9ca3172 100644 #else static inline void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) -@@ -1945,6 +1949,9 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p, +@@ -1945,6 +1949,9 @@ static inline int set_cpus_allowed_ptr(s return -EINVAL; return 0; } @@ -78,9 +76,7 @@ index 0174e3a..9ca3172 100644 +static inline void tell_sched_cpu_down_done(int cpu) { } #endif - #ifndef CONFIG_CPUMASK_OFFSTACK -diff --git a/kernel/cpu.c b/kernel/cpu.c -index 66dfb74..0964e93 100644 + #ifdef CONFIG_NO_HZ --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -46,12 +46,7 @@ static int cpu_hotplug_disabled; @@ -147,7 +143,7 @@ index 66dfb74..0964e93 100644 static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp); /** -@@ -94,18 +111,40 @@ static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp); +@@ -94,18 +111,40 @@ static DEFINE_PER_CPU(struct hotplug_pcp void pin_current_cpu(void) { struct hotplug_pcp *hp; @@ -284,7 +280,7 @@ index 66dfb74..0964e93 100644 /* * Start the sync_unplug_thread on the target cpu and wait for it to * complete. -@@ -154,23 +251,83 @@ static int sync_unplug_thread(void *data) +@@ -154,23 +251,83 @@ static int sync_unplug_thread(void *data static int cpu_unplug_begin(unsigned int cpu) { struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu); @@ -423,7 +419,7 @@ index 66dfb74..0964e93 100644 } #else /* #if CONFIG_HOTPLUG_CPU */ -@@ -371,6 +528,9 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen) +@@ -371,6 +528,9 @@ static int __ref _cpu_down(unsigned int goto out_release; } @@ -433,11 +429,9 @@ index 66dfb74..0964e93 100644 err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu)); if (err) { /* CPU didn't die: tell everyone. Can't complain. */ -diff --git a/kernel/sched.c b/kernel/sched.c -index 4dd1fff..bc2375e 100644 --- a/kernel/sched.c +++ b/kernel/sched.c -@@ -4403,7 +4403,7 @@ void migrate_disable(void) +@@ -4533,7 +4533,7 @@ void migrate_disable(void) { struct task_struct *p = current; @@ -446,7 +440,7 @@ index 4dd1fff..bc2375e 100644 #ifdef CONFIG_SCHED_DEBUG p->migrate_disable_atomic++; #endif -@@ -4434,7 +4434,7 @@ void migrate_enable(void) +@@ -4564,7 +4564,7 @@ void migrate_enable(void) unsigned long flags; struct rq *rq; @@ -455,7 +449,7 @@ index 4dd1fff..bc2375e 100644 #ifdef CONFIG_SCHED_DEBUG p->migrate_disable_atomic--; #endif -@@ -6360,6 +6360,84 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) +@@ -6490,6 +6490,84 @@ void do_set_cpus_allowed(struct task_str cpumask_copy(&p->cpus_allowed, new_mask); } @@ -540,6 +534,3 @@ index 4dd1fff..bc2375e 100644 /* * This is how migration works: * --- -1.7.10 - diff --git a/debian/patches/series b/debian/patches/series index 987d668d7..989a4a9c4 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -62,15 +62,11 @@ bugfix/x86/KVM-nVMX-Fix-warning-causing-idt-vectoring-info-beha.patch features/all/hwmon-it87-Add-IT8728F-support.patch -bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch -bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch - features/all/fs-symlink-restrictions-on-sticky-directories.patch features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch features/all/fs-hardlink-creation-restrictions.patch features/all/fs-hardlink-creation-restrictions-fix.patch features/all/fs-hardlink-creation-restriction-cleanup.patch -bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch # Update all Hyper-V drivers to 3.4-rc1 (no longer staging) features/x86/hyperv/0001-NLS-improve-UTF8-UTF16-string-conversion-routine.patch @@ -171,11 +167,6 @@ features/x86/efi-stub/0015-x86-efi-Fix-endian-issues-and-unaligned-accesses.patc features/x86/efi-stub/0016-x86-boot-Correct-CFLAGS-for-hostprogs.patch features/x86/efi-stub/0017-x86-efi-Add-dedicated-EFI-stub-entry-point.patch -bugfix/all/brcmsmac-INTERMEDIATE-but-not-AMPDU-only-when-tracin.patch -bugfix/all/NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch - -bugfix/all/ext4-Report-max_batch_time-option-correctly.patch - # Update wacom driver to 3.5ish features/all/wacom/0001-Input-wacom-cleanup-feature-report-for-bamboos.patch features/all/wacom/0002-Input-wacom-remove-unused-bamboo-HID-parsing.patch @@ -287,8 +278,6 @@ features/all/codel/0007-fq_codel-should-use-qdisc-backlog-as-threshold.patch features/all/AppArmor-compatibility-patch-for-v5-interface.patch bugfix/all/apparmor-remove-advertising-the-support-of-network-r.patch -bugfix/all/hugepages-fix-use-after-free-bug-in-quota-handling.patch - # netdev features, probably useful for other backports but not needed yet #features/all/define-netdev_features_t.patch #features/all/filter-Allow-to-create-sk-unattached-filters.patch @@ -299,17 +288,6 @@ features/all/hidepid/0002-procfs-add-hidepid-and-gid-mount-options.patch features/all/hidepid/0003-proc-fix-null-pointer-deref-in-proc_pid_permission.patch features/all/hidepid/0004-proc-fix-mount-t-proc-o-AAA.patch -bugfix/all/NFSv4-Reduce-the-footprint-of-the-idmapper.patch -bugfix/all/NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch - -bugfix/all/macvtap-zerocopy-fix-offset-calculation-when-buildin.patch -bugfix/all/macvtap-zerocopy-fix-truesize-underestimation.patch -bugfix/all/macvtap-zerocopy-put-page-when-fail-to-get-all-reque.patch -bugfix/all/macvtap-zerocopy-set-SKBTX_DEV_ZEROCOPY-only-when-sk.patch -bugfix/all/macvtap-zerocopy-validate-vectors-before-building-sk.patch - -bugfix/all/KVM-Fix-buffer-overflow-in-kvm_set_irq.patch - # CPU sysdev removal from 3.3 and x86 CPU auto-loading from 3.4 features/all/cpu-devices/driver-core-implement-sysdev-functionality-for-regul.patch features/all/cpu-devices/cpu-convert-cpu-and-machinecheck-sysdev_class-to-a-r.patch @@ -365,9 +343,7 @@ features/arm/net-drop-NET-dependency-from-HAVE_BPF_JIT.patch # Until next ABI bump debian/driver-core-avoid-ABI-change-for-removal-of-__must_check.patch -bugfix/all/scsi-Silence-unnecessary-warnings-about-ioctl-to-par.patch bugfix/all/udf-Improve-table-length-check-to-avoid-possible-underflow.patch -bugfix/all/epoll-clear-the-tfile_check_list-on-eloop.patch # nouveau update to support Fermi (NVC0+) acceleration features/all/fermi-accel/drm-nouveau-ttm-always-do-buffer-moves-on-kernel-cha.patch @@ -383,8 +359,9 @@ features/all/fermi-accel/drm-nouveau-bump-version-to-1.0.0.patch bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch bugfix/x86/drm-i915-prefer-wide-slow-to-fast-narrow-in-DP-confi.patch bugfix/all/cipso-don-t-follow-a-NULL-pointer-when-setsockopt-is.patch -bugfix/all/atl1c-fix-issue-of-transmit-queue-0-timed-out.patch -bugfix/all/raid5-delayed-stripe-fix.patch -bugfix/all/remove-easily-user-triggerable-bug-from-generic_setlease.patch -bugfix/all/tcp-drop-syn-fin-messages.patch -bugfix/all/fifo-do-not-restart-open-if-it-already-found-a-partner.patch + +# Until next ABI bump +debian/hrtimer-Avoid-ABI-change-in-3.2.24.patch +debian/net-Avoid-ABI-change-in-3.2.24.patch +debian/libsas-Avoid-ABI-change-in-3.2.24.patch +debian/powerpc-cputime-Avoid-ABI-change-in-3.2.24.patch