summaryrefslogtreecommitdiffstats
path: root/freed-ora/current
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2011-10-29 08:43:10 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2011-10-29 08:43:10 +0000
commitf713f558e4aaa7eaa8c4cc51e61671dc051ce28e (patch)
tree873cd1473c41f3eb4f098340f15bfe3a26d53d8c /freed-ora/current
parent4dd78bd36a6331aa7682bb91705c1c34231d2d1a (diff)
downloadlinux-libre-raptor-f713f558e4aaa7eaa8c4cc51e61671dc051ce28e.tar.gz
linux-libre-raptor-f713f558e4aaa7eaa8c4cc51e61671dc051ce28e.zip
2.6.40.8-2.fc15
Diffstat (limited to 'freed-ora/current')
-rw-r--r--freed-ora/current/f15/be2net-move-to-new-vlan-model.patch107
-rw-r--r--freed-ora/current/f15/be2net-non-member-vlan-pkts-not-received-in-promisco.patch63
-rw-r--r--freed-ora/current/f15/benet-remove-bogus-unlikely-on-vlan-check.patch39
-rw-r--r--freed-ora/current/f15/cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch120
-rw-r--r--freed-ora/current/f15/cputimer-Cure-lock-inversion.patch148
-rw-r--r--freed-ora/current/f15/drm-ttm-nouveau-oops-fix.patch40
-rw-r--r--freed-ora/current/f15/epoll-limit-paths.patch465
-rw-r--r--freed-ora/current/f15/fuse-fix-memory-leak.patch70
-rw-r--r--freed-ora/current/f15/hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch315
-rw-r--r--freed-ora/current/f15/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch62
-rw-r--r--freed-ora/current/f15/kernel.spec74
-rw-r--r--freed-ora/current/f15/linux-2.6-debug-taint-vm.patch46
-rw-r--r--freed-ora/current/f15/patch-libre-3.0.7.bz2.sign7
-rw-r--r--freed-ora/current/f15/patch-libre-3.0.8.bz2.sign7
-rw-r--r--freed-ora/current/f15/platform-fix-samsung-brightness-min-max-calculations.patch56
-rw-r--r--freed-ora/current/f15/sources2
-rw-r--r--freed-ora/current/f15/ucvideo-fix-crash-when-linking-entities.patch34
-rw-r--r--freed-ora/current/f15/xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch43
18 files changed, 837 insertions, 861 deletions
diff --git a/freed-ora/current/f15/be2net-move-to-new-vlan-model.patch b/freed-ora/current/f15/be2net-move-to-new-vlan-model.patch
new file mode 100644
index 000000000..781297144
--- /dev/null
+++ b/freed-ora/current/f15/be2net-move-to-new-vlan-model.patch
@@ -0,0 +1,107 @@
+From 1447378e3da1b56bb5c7fb1b1bc9b85e061447e7 Mon Sep 17 00:00:00 2001
+From: Ajit Khaparde <ajit.khaparde@emulex.com>
+Date: Tue, 12 Jul 2011 22:10:01 -0700
+Subject: [PATCH 1/3] be2net: move to new vlan model
+
+Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/benet/be.h | 1 -
+ drivers/net/benet/be_main.c | 34 +++++++++-------------------------
+ 2 files changed, 9 insertions(+), 26 deletions(-)
+
+diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h
+index a7db870..5112000 100644
+--- a/drivers/net/benet/be.h
++++ b/drivers/net/benet/be.h
+@@ -332,7 +332,6 @@ struct be_adapter {
+ u8 eq_next_idx;
+ struct be_drv_stats drv_stats;
+
+- struct vlan_group *vlan_grp;
+ u16 vlans_added;
+ u16 max_vlans; /* Number of vlans supported */
+ u8 vlan_tag[VLAN_N_VID];
+diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
+index a485f7f..146e420 100644
+--- a/drivers/net/benet/be_main.c
++++ b/drivers/net/benet/be_main.c
+@@ -648,7 +648,7 @@ static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
+ AMAP_SET_BITS(struct amap_eth_hdr_wrb, udpcs, hdr, 1);
+ }
+
+- if (adapter->vlan_grp && vlan_tx_tag_present(skb)) {
++ if (vlan_tx_tag_present(skb)) {
+ AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan, hdr, 1);
+ vlan_tag = vlan_tx_tag_get(skb);
+ vlan_prio = (vlan_tag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+@@ -842,13 +842,6 @@ static int be_vid_config(struct be_adapter *adapter, bool vf, u32 vf_num)
+ return status;
+ }
+
+-static void be_vlan_register(struct net_device *netdev, struct vlan_group *grp)
+-{
+- struct be_adapter *adapter = netdev_priv(netdev);
+-
+- adapter->vlan_grp = grp;
+-}
+-
+ static void be_vlan_add_vid(struct net_device *netdev, u16 vid)
+ {
+ struct be_adapter *adapter = netdev_priv(netdev);
+@@ -867,7 +860,6 @@ static void be_vlan_rem_vid(struct net_device *netdev, u16 vid)
+ struct be_adapter *adapter = netdev_priv(netdev);
+
+ adapter->vlans_added--;
+- vlan_group_set_device(adapter->vlan_grp, vid, NULL);
+
+ if (!be_physfn(adapter))
+ return;
+@@ -1196,16 +1188,10 @@ static void be_rx_compl_process(struct be_adapter *adapter,
+ skb->rxhash = rxcp->rss_hash;
+
+
+- if (unlikely(rxcp->vlanf)) {
+- if (!adapter->vlan_grp || adapter->vlans_added == 0) {
+- kfree_skb(skb);
+- return;
+- }
+- vlan_hwaccel_receive_skb(skb, adapter->vlan_grp,
+- rxcp->vlan_tag);
+- } else {
+- netif_receive_skb(skb);
+- }
++ if (unlikely(rxcp->vlanf))
++ __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
++
++ netif_receive_skb(skb);
+ }
+
+ /* Process the RX completion indicated by rxcp when GRO is enabled */
+@@ -1259,11 +1245,10 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,
+ if (adapter->netdev->features & NETIF_F_RXHASH)
+ skb->rxhash = rxcp->rss_hash;
+
+- if (likely(!rxcp->vlanf))
+- napi_gro_frags(&eq_obj->napi);
+- else
+- vlan_gro_frags(&eq_obj->napi, adapter->vlan_grp,
+- rxcp->vlan_tag);
++ if (unlikely(rxcp->vlanf))
++ __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
++
++ napi_gro_frags(&eq_obj->napi);
+ }
+
+ static void be_parse_rx_compl_v1(struct be_adapter *adapter,
+@@ -2901,7 +2886,6 @@ static struct net_device_ops be_netdev_ops = {
+ .ndo_set_mac_address = be_mac_addr_set,
+ .ndo_change_mtu = be_change_mtu,
+ .ndo_validate_addr = eth_validate_addr,
+- .ndo_vlan_rx_register = be_vlan_register,
+ .ndo_vlan_rx_add_vid = be_vlan_add_vid,
+ .ndo_vlan_rx_kill_vid = be_vlan_rem_vid,
+ .ndo_set_vf_mac = be_set_vf_mac,
+--
+1.7.6.4
+
diff --git a/freed-ora/current/f15/be2net-non-member-vlan-pkts-not-received-in-promisco.patch b/freed-ora/current/f15/be2net-non-member-vlan-pkts-not-received-in-promisco.patch
new file mode 100644
index 000000000..866473efd
--- /dev/null
+++ b/freed-ora/current/f15/be2net-non-member-vlan-pkts-not-received-in-promisco.patch
@@ -0,0 +1,63 @@
+From c0e64ef4899df4cedc872871e54e2c069d29e519 Mon Sep 17 00:00:00 2001
+From: Sathya Perla <sathya.perla@emulex.com>
+Date: Tue, 2 Aug 2011 19:57:43 +0000
+Subject: [PATCH] be2net: non-member vlan pkts not received in promiscous mode
+
+While configuring promiscous mode, explicitly set the
+VLAN_PROMISCOUS bit to make this happen. When switching off
+promiscous mode, re-program the vids.
+
+Signed-off-by: Xavier Selvin <xavier.selvin@emulex.com>
+Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/benet/be_cmds.c | 6 ++++--
+ drivers/net/benet/be_main.c | 7 +++++++
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c
+index 1c25dbd..73fd949 100644
+--- a/drivers/net/benet/be_cmds.c
++++ b/drivers/net/benet/be_cmds.c
+@@ -1586,9 +1586,11 @@ int be_cmd_promiscuous_config(struct be_adapter *adapter, bool en)
+ OPCODE_COMMON_NTWK_RX_FILTER, sizeof(*req));
+
+ req->if_id = cpu_to_le32(adapter->if_handle);
+- req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS);
++ req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS
++ | BE_IF_FLAGS_VLAN_PROMISCUOUS);
+ if (en)
+- req->if_flags = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS);
++ req->if_flags = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS
++ | BE_IF_FLAGS_VLAN_PROMISCUOUS);
+
+ sge->pa_hi = cpu_to_le32(upper_32_bits(promiscous_cmd.dma));
+ sge->pa_lo = cpu_to_le32(promiscous_cmd.dma & 0xFFFFFFFF);
+diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
+index 3b2c5e6..32a5b11 100644
+--- a/drivers/net/benet/be_main.c
++++ b/drivers/net/benet/be_main.c
+@@ -728,6 +728,10 @@ static int be_vid_config(struct be_adapter *adapter, bool vf, u32 vf_num)
+ status = be_cmd_vlan_config(adapter, if_handle, vtag, 1, 1, 0);
+ }
+
++ /* No need to further configure vids if in promiscuous mode */
++ if (adapter->promiscuous)
++ return 0;
++
+ if (adapter->vlans_added <= adapter->max_vlans) {
+ /* Construct VLAN Table to give to HW */
+ for (i = 0; i < VLAN_N_VID; i++) {
+@@ -787,6 +791,9 @@ static void be_set_multicast_list(struct net_device *netdev)
+ if (adapter->promiscuous) {
+ adapter->promiscuous = false;
+ be_cmd_promiscuous_config(adapter, false);
++
++ if (adapter->vlans_added)
++ be_vid_config(adapter, false, 0);
+ }
+
+ /* Enable multicast promisc if num configured exceeds what we support */
+--
+1.7.6.4
+
diff --git a/freed-ora/current/f15/benet-remove-bogus-unlikely-on-vlan-check.patch b/freed-ora/current/f15/benet-remove-bogus-unlikely-on-vlan-check.patch
new file mode 100644
index 000000000..08c00817e
--- /dev/null
+++ b/freed-ora/current/f15/benet-remove-bogus-unlikely-on-vlan-check.patch
@@ -0,0 +1,39 @@
+From 82f15998fafe683add83f7a11b2e25f919b3cd2d Mon Sep 17 00:00:00 2001
+From: Jiri Pirko <jpirko@redhat.com>
+Date: Tue, 25 Oct 2011 13:47:16 -0400
+Subject: [PATCH] benet: remove bogus "unlikely" on vlan check
+
+Use of unlikely in this place is wrong. Remove it.
+
+Signed-off-by: Jiri Pirko <jpirko@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Backported-by: Josh Boyer <jwboyer@redhat.com>
+---
+ drivers/net/benet/be_main.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
+index c411bb1..6df0c7e 100644
+--- a/drivers/net/benet/be_main.c
++++ b/drivers/net/benet/be_main.c
+@@ -1192,7 +1192,7 @@ static void be_rx_compl_process(struct be_adapter *adapter,
+ skb->rxhash = rxcp->rss_hash;
+
+
+- if (unlikely(rxcp->vlanf))
++ if (rxcp->vlanf)
+ __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
+
+ netif_receive_skb(skb);
+@@ -1249,7 +1249,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,
+ if (adapter->netdev->features & NETIF_F_RXHASH)
+ skb->rxhash = rxcp->rss_hash;
+
+- if (unlikely(rxcp->vlanf))
++ if (rxcp->vlanf)
+ __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
+
+ napi_gro_frags(&eq_obj->napi);
+--
+1.7.6.4
+
diff --git a/freed-ora/current/f15/cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch b/freed-ora/current/f15/cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch
deleted file mode 100644
index f15a0e952..000000000
--- a/freed-ora/current/f15/cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-Return-Path: kernel-bounces@lists.fedoraproject.org
-Received: from zmta02.collab.prod.int.phx2.redhat.com (LHLO
- zmta02.collab.prod.int.phx2.redhat.com) (10.5.5.32) by
- mail02.corp.redhat.com with LMTP; Thu, 25 Aug 2011 10:45:29 -0400 (EDT)
-Received: from localhost (localhost.localdomain [127.0.0.1])
- by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id D94C212A429;
- Thu, 25 Aug 2011 10:40:08 -0400 (EDT)
-X-Quarantine-ID: <C-k2lztK9Aht>
-Received: from zmta02.collab.prod.int.phx2.redhat.com ([127.0.0.1])
- by localhost (zmta02.collab.prod.int.phx2.redhat.com [127.0.0.1]) (amavisd-new, port 10024)
- with ESMTP id C-k2lztK9Aht; Thu, 25 Aug 2011 10:40:08 -0400 (EDT)
-Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22])
- by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id 99EEE12A424;
- Thu, 25 Aug 2011 10:40:08 -0400 (EDT)
-Received: from mx1.redhat.com (ext-mx12.extmail.prod.ext.phx2.redhat.com [10.5.110.17])
- by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p7PEe7jY023291;
- Thu, 25 Aug 2011 10:40:08 -0400
-Received: from bastion.fedoraproject.org (bastion02.phx2.fedoraproject.org [10.5.126.11])
- by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p7PEe54S022197;
- Thu, 25 Aug 2011 10:40:05 -0400
-Received: from lists.fedoraproject.org (collab1.vpn.fedoraproject.org [192.168.1.21])
- by bastion02.phx2.fedoraproject.org (Postfix) with ESMTP id E3F1D1108EB;
- Thu, 25 Aug 2011 14:40:04 +0000 (UTC)
-Received: from collab1.fedoraproject.org (localhost.localdomain [127.0.0.1])
- by lists.fedoraproject.org (Postfix) with ESMTP id 52AA23267A7;
- Thu, 25 Aug 2011 14:40:04 +0000 (UTC)
-X-Original-To: kernel@lists.fedoraproject.org
-Delivered-To: kernel@lists.fedoraproject.org
-Received: from smtp-mm02.fedoraproject.org (smtp-mm02.fedoraproject.org
- [66.35.62.164])
- by lists.fedoraproject.org (Postfix) with ESMTP id 8FD8232679C
- for <kernel@lists.fedoraproject.org>;
- Thu, 25 Aug 2011 14:40:01 +0000 (UTC)
-Received: from mail-gx0-f173.google.com (mail-gx0-f173.google.com
- [209.85.161.173])
- by smtp-mm02.fedoraproject.org (Postfix) with ESMTP id 42F73E721F
- for <kernel@lists.fedoraproject.org>;
- Thu, 25 Aug 2011 14:40:01 +0000 (UTC)
-Received: by gxk26 with SMTP id 26so2067938gxk.32
- for <kernel@lists.fedoraproject.org>;
- Thu, 25 Aug 2011 07:40:00 -0700 (PDT)
-Received: by 10.91.21.4 with SMTP id y4mr6531700agi.115.1314283200592;
- Thu, 25 Aug 2011 07:40:00 -0700 (PDT)
-Received: from salusa.poochiereds.net (cpe-075-177-182-191.nc.res.rr.com
- [75.177.182.191])
- by mx.google.com with ESMTPS id l13sm579931anj.16.2011.08.25.07.39.59
- (version=SSLv3 cipher=OTHER); Thu, 25 Aug 2011 07:40:00 -0700 (PDT)
-From: Jeff Layton <jlayton@redhat.com>
-To: kernel@lists.fedoraproject.org
-Subject: [PATCH 2/2] CIFS: Fix ERR_PTR dereference in cifs_get_root
-Date: Thu, 25 Aug 2011 10:39:54 -0400
-Message-Id: <1314283194-26086-3-git-send-email-jlayton@redhat.com>
-In-Reply-To: <1314283194-26086-1-git-send-email-jlayton@redhat.com>
-References: <1314283194-26086-1-git-send-email-jlayton@redhat.com>
-X-BeenThere: kernel@lists.fedoraproject.org
-X-Mailman-Version: 2.1.9
-Precedence: list
-List-Id: "Fedora kernel development." <kernel.lists.fedoraproject.org>
-List-Unsubscribe: <https://admin.fedoraproject.org/mailman/listinfo/kernel>,
- <mailto:kernel-request@lists.fedoraproject.org?subject=unsubscribe>
-List-Archive: <http://lists.fedoraproject.org/pipermail/kernel>
-List-Post: <mailto:kernel@lists.fedoraproject.org>
-List-Help: <mailto:kernel-request@lists.fedoraproject.org?subject=help>
-List-Subscribe: <https://admin.fedoraproject.org/mailman/listinfo/kernel>,
- <mailto:kernel-request@lists.fedoraproject.org?subject=subscribe>
-MIME-Version: 1.0
-Content-Type: text/plain; charset="us-ascii"
-Content-Transfer-Encoding: 7bit
-Sender: kernel-bounces@lists.fedoraproject.org
-Errors-To: kernel-bounces@lists.fedoraproject.org
-X-RedHat-Spam-Score: -0.502 (RP_MATCHES_RCVD)
-X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
-X-Scanned-By: MIMEDefang 2.68 on 10.5.110.17
-
-From: Pavel Shilovsky <piastryyy@gmail.com>
-
-move it to the beginning of the loop.
-
-Cc: <stable@kernel.org>
-Signed-off-by: Pavel Shilovsky <piastryyy@gmail.com>
-Reviewed-by: Jeff Layton <jlayton@redhat.com>
----
- fs/cifs/cifsfs.c | 10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
-index fc7e57b..53e7d72 100644
---- a/fs/cifs/cifsfs.c
-+++ b/fs/cifs/cifsfs.c
-@@ -566,6 +566,12 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
- struct inode *dir = dentry->d_inode;
- struct dentry *child;
-
-+ if (!dir) {
-+ dput(dentry);
-+ dentry = ERR_PTR(-ENOENT);
-+ break;
-+ }
-+
- /* skip separators */
- while (*s == sep)
- s++;
-@@ -581,10 +587,6 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
- mutex_unlock(&dir->i_mutex);
- dput(dentry);
- dentry = child;
-- if (!dentry->d_inode) {
-- dput(dentry);
-- dentry = ERR_PTR(-ENOENT);
-- }
- } while (!IS_ERR(dentry));
- _FreeXid(xid);
- kfree(full_path);
---
-1.7.6
-
-_______________________________________________
-kernel mailing list
-kernel@lists.fedoraproject.org
-https://admin.fedoraproject.org/mailman/listinfo/kernel
diff --git a/freed-ora/current/f15/cputimer-Cure-lock-inversion.patch b/freed-ora/current/f15/cputimer-Cure-lock-inversion.patch
deleted file mode 100644
index 23759ad8b..000000000
--- a/freed-ora/current/f15/cputimer-Cure-lock-inversion.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Peter Zijlstra <a.p.zijlstra@chello.nl>
-Newsgroups: gmane.linux.kernel
-Subject: Re: Linux 3.1-rc9
-Date: Tue, 18 Oct 2011 11:05:13 +0200
-Lines: 84
-Approved: news@gmane.org
-Message-ID: <1318928713.21167.4.camel@twins>
-References: <CA+55aFxPNszU5UHFrDDYnshLEMupaviFwhgEsgmPkqpmuWNZ8A@mail.gmail.com>
- <20111007070842.GA27555@hostway.ca> <20111007174848.GA11011@hostway.ca>
- <1318010515.398.8.camel@twins> <20111008005035.GC22843@hostway.ca>
- <1318060551.8395.0.camel@twins> <20111012213555.GC24461@hostway.ca>
- <20111013232521.GA5654@hostway.ca>
- <CA+55aFxxfsFMgqA7kYKukvkCX6Z9HrKOtP-22w5Mc21iQj4c=Q@mail.gmail.com>
- <1318847658.6594.40.camel@twins>
- <CA+55aFxaGKEyhXdHXNxvPrPQ-SGSpbXdfoeXrxfjPx3VXsgvtg@mail.gmail.com>
- <1318874090.4172.84.camel@twins>
- <CA+55aFwCBy=4YK6amE=H-BYu9-boj4Po2Zkgf4V261mCx0DC4A@mail.gmail.com>
- <1318879396.4172.92.camel@twins> <alpine.LFD.2.02.1110172237030.3240@ionos>
- <alpine.LFD.2.02.1110181037120.3240@ionos>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: text/plain; charset="UTF-8"
-Content-Transfer-Encoding: 8BIT
-X-Trace: dough.gmane.org 1318928749 2484 80.91.229.12 (18 Oct 2011 09:05:49 GMT)
-X-Complaints-To: usenet@dough.gmane.org
-NNTP-Posting-Date: Tue, 18 Oct 2011 09:05:49 +0000 (UTC)
-Cc: Linus Torvalds <torvalds@linux-foundation.org>,
- Simon Kirby <sim@hostway.ca>,
- Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
- Dave Jones <davej@redhat.com>,
- Martin Schwidefsky <schwidefsky@de.ibm.com>,
- Ingo Molnar <mingo@elte.hu>
-To: Thomas Gleixner <tglx@linutronix.de>
-Original-X-From: linux-kernel-owner@vger.kernel.org Tue Oct 18 11:05:43 2011
-Return-path: <linux-kernel-owner@vger.kernel.org>
-Envelope-to: glk-linux-kernel-3@lo.gmane.org
-Original-Received: from vger.kernel.org ([209.132.180.67])
- by lo.gmane.org with esmtp (Exim 4.69)
- (envelope-from <linux-kernel-owner@vger.kernel.org>)
- id 1RG5cB-0003K9-2n
- for glk-linux-kernel-3@lo.gmane.org; Tue, 18 Oct 2011 11:05:39 +0200
-Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
- id S1757183Ab1JRJFc (ORCPT <rfc822;glk-linux-kernel-3@m.gmane.org>);
- Tue, 18 Oct 2011 05:05:32 -0400
-Original-Received: from casper.infradead.org ([85.118.1.10]:40399 "EHLO
- casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
- with ESMTP id S1753880Ab1JRJFa convert rfc822-to-8bit (ORCPT
- <rfc822;linux-kernel@vger.kernel.org>);
- Tue, 18 Oct 2011 05:05:30 -0400
-Original-Received: from j77219.upc-j.chello.nl ([24.132.77.219] helo=twins)
- by casper.infradead.org with esmtpsa (Exim 4.76 #1 (Red Hat Linux))
- id 1RG5bu-0008Qu-O5; Tue, 18 Oct 2011 09:05:22 +0000
-Original-Received: by twins (Postfix, from userid 1000)
- id 69952813C82C; Tue, 18 Oct 2011 11:05:13 +0200 (CEST)
-In-Reply-To: <alpine.LFD.2.02.1110181037120.3240@ionos>
-X-Mailer: Evolution 3.0.3-
-Original-Sender: linux-kernel-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <linux-kernel.vger.kernel.org>
-X-Mailing-List: linux-kernel@vger.kernel.org
-Xref: news.gmane.org gmane.linux.kernel:1204676
-Archived-At: <http://permalink.gmane.org/gmane.linux.kernel/1204676>
-
-On Tue, 2011-10-18 at 10:39 +0200, Thomas Gleixner wrote:
-> On Mon, 17 Oct 2011, Thomas Gleixner wrote:
-> > That said, I really need some sleep before I can make a final
-> > judgement on that horror. The call paths are such an intermingled mess
-> > that it's not funny anymore. I do that tomorrow morning first thing.
->
-> The patch is safe and the exit race just existed in my confused tired
-> brain. Peter, can you please provide a changelog. That wants a cc
-> stable as well, because that deadlock causing commit hit 3.0.7 :(
-
----
-Subject: cputimer: Cure lock inversion
-From: Peter Zijlstra <a.p.zijlstra@chello.nl>
-Date: Mon Oct 17 11:50:30 CEST 2011
-
-There's a lock inversion between the cputimer->lock and rq->lock; notably
-the two callchains involved are:
-
- update_rlimit_cpu()
- sighand->siglock
- set_process_cpu_timer()
- cpu_timer_sample_group()
- thread_group_cputimer()
- cputimer->lock
- thread_group_cputime()
- task_sched_runtime()
- ->pi_lock
- rq->lock
-
- scheduler_tick()
- rq->lock
- task_tick_fair()
- update_curr()
- account_group_exec()
- cputimer->lock
-
-Where the first one is enabling a CLOCK_PROCESS_CPUTIME_ID timer, and
-the second one is keeping up-to-date.
-
-This problem was introduced by e8abccb7193 ("posix-cpu-timers: Cure
-SMP accounting oddities").
-
-Cure the problem by removing the cputimer->lock and rq->lock nesting,
-this leaves concurrent enablers doing duplicate work, but the time
-wasted should be on the same order otherwise wasted spinning on the
-lock and the greater-than assignment filter should ensure we preserve
-monotonicity.
-
-Reported-by: Dave Jones <davej@redhat.com>
-Reported-by: Simon Kirby <sim@hostway.ca>
-Cc: stable@kernel.org
-Cc: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
----
- kernel/posix-cpu-timers.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-Index: linux-2.6/kernel/posix-cpu-timers.c
-===================================================================
---- linux-2.6.orig/kernel/posix-cpu-timers.c
-+++ linux-2.6/kernel/posix-cpu-timers.c
-@@ -274,9 +274,7 @@ void thread_group_cputimer(struct task_s
- struct task_cputime sum;
- unsigned long flags;
-
-- spin_lock_irqsave(&cputimer->lock, flags);
- if (!cputimer->running) {
-- cputimer->running = 1;
- /*
- * The POSIX timer interface allows for absolute time expiry
- * values through the TIMER_ABSTIME flag, therefore we have
-@@ -284,8 +282,11 @@ void thread_group_cputimer(struct task_s
- * it.
- */
- thread_group_cputime(tsk, &sum);
-+ spin_lock_irqsave(&cputimer->lock, flags);
-+ cputimer->running = 1;
- update_gt_cputime(&cputimer->cputime, &sum);
-- }
-+ } else
-+ spin_lock_irqsave(&cputimer->lock, flags);
- *times = cputimer->cputime;
- spin_unlock_irqrestore(&cputimer->lock, flags);
- }
-
diff --git a/freed-ora/current/f15/drm-ttm-nouveau-oops-fix.patch b/freed-ora/current/f15/drm-ttm-nouveau-oops-fix.patch
deleted file mode 100644
index e65259e50..000000000
--- a/freed-ora/current/f15/drm-ttm-nouveau-oops-fix.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
-index 2e618b5..9095b5b 100644
---- a/drivers/gpu/drm/ttm/ttm_bo.c
-+++ b/drivers/gpu/drm/ttm/ttm_bo.c
-@@ -390,10 +390,12 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
- * Create and bind a ttm if required.
- */
-
-- if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED) && (bo->ttm == NULL)) {
-- ret = ttm_bo_add_ttm(bo, false);
-- if (ret)
-- goto out_err;
-+ if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
-+ if (bo->ttm == NULL) {
-+ ret = ttm_bo_add_ttm(bo, false);
-+ if (ret)
-+ goto out_err;
-+ }
-
- ret = ttm_tt_set_placement_caching(bo->ttm, mem->placement);
- if (ret)
-diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
-index 77dbf40..ae3c6f5 100644
---- a/drivers/gpu/drm/ttm/ttm_bo_util.c
-+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
-@@ -635,13 +635,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
- if (ret)
- return ret;
-
-- ttm_bo_free_old_node(bo);
- if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
- (bo->ttm != NULL)) {
- ttm_tt_unbind(bo->ttm);
- ttm_tt_destroy(bo->ttm);
- bo->ttm = NULL;
- }
-+ ttm_bo_free_old_node(bo);
- } else {
- /**
- * This should help pipeline ordinary buffer moves.
diff --git a/freed-ora/current/f15/epoll-limit-paths.patch b/freed-ora/current/f15/epoll-limit-paths.patch
new file mode 100644
index 000000000..440db27b9
--- /dev/null
+++ b/freed-ora/current/f15/epoll-limit-paths.patch
@@ -0,0 +1,465 @@
+From 6a4ca79652219cf22da800d990e5b46feaea1ad9 Mon Sep 17 00:00:00 2001
+From: Jason Baron <jbaron@redhat.com>
+Date: Mon, 24 Oct 2011 14:59:02 +1100
+Subject: [PATCH] epoll: limit paths
+
+epoll: limit paths
+
+The current epoll code can be tickled to run basically indefinitely in
+both loop detection path check (on ep_insert()), and in the wakeup paths.
+The programs that tickle this behavior set up deeply linked networks of
+epoll file descriptors that cause the epoll algorithms to traverse them
+indefinitely. A couple of these sample programs have been previously
+posted in this thread: https://lkml.org/lkml/2011/2/25/297.
+
+To fix the loop detection path check algorithms, I simply keep track of
+the epoll nodes that have been already visited. Thus, the loop detection
+becomes proportional to the number of epoll file descriptor and links.
+This dramatically decreases the run-time of the loop check algorithm. In
+one diabolical case I tried it reduced the run-time from 15 mintues (all
+in kernel time) to .3 seconds.
+
+Fixing the wakeup paths could be done at wakeup time in a similar manner
+by keeping track of nodes that have already been visited, but the
+complexity is harder, since there can be multiple wakeups on different
+cpus...Thus, I've opted to limit the number of possible wakeup paths when
+the paths are created.
+
+This is accomplished, by noting that the end file descriptor points that
+are found during the loop detection pass (from the newly added link), are
+actually the sources for wakeup events. I keep a list of these file
+descriptors and limit the number and length of these paths that emanate
+from these 'source file descriptors'. In the current implemetation I
+allow 1000 paths of length 1, 500 of length 2, 100 of length 3, 50 of
+length 4 and 10 of length 5. Note that it is sufficient to check the
+'source file descriptors' reachable from the newly added link, since no
+other 'source file descriptors' will have newly added links. This allows
+us to check only the wakeup paths that may have gotten too long, and not
+re-check all possible wakeup paths on the system.
+
+In terms of the path limit selection, I think its first worth noting that
+the most common case for epoll, is probably the model where you have 1
+epoll file descriptor that is monitoring n number of 'source file
+descriptors'. In this case, each 'source file descriptor' has a 1 path of
+length 1. Thus, I believe that the limits I'm proposing are quite
+reasonable and in fact may be too generous. Thus, I'm hoping that the
+proposed limits will not prevent any workloads that currently work to
+fail.
+
+In terms of locking, I have extended the use of the 'epmutex' to all
+epoll_ctl add and remove operations. Currently its only used in a subset
+of the add paths. I need to hold the epmutex, so that we can correctly
+traverse a coherent graph, to check the number of paths. I believe that
+this additional locking is probably ok, since its in the setup/teardown
+paths, and doesn't affect the running paths, but it certainly is going to
+add some extra overhead. Also, worth noting is that the epmuex was
+recently added to the ep_ctl add operations in the initial path loop
+detection code using the argument that it was not on a critical path.
+
+Another thing to note here, is the length of epoll chains that is allowed.
+Currently, eventpoll.c defines:
+
+/* Maximum number of nesting allowed inside epoll sets */
+#define EP_MAX_NESTS 4
+
+This basically means that I am limited to a graph depth of 5 (EP_MAX_NESTS
++ 1). However, this limit is currently only enforced during the loop
+check detection code, and only when the epoll file descriptors are added
+in a certain order. Thus, this limit is currently easily bypassed. The
+newly added check for wakeup paths, stricly limits the wakeup paths to a
+length of 5, regardless of the order in which ep's are linked together.
+Thus, a side-effect of the new code is a more consistent enforcement of
+the graph depth.
+
+Thus far, I've tested this, using the sample programs previously
+mentioned, which now either return quickly or return -EINVAL. I've also
+testing using the piptest.c epoll tester, which showed no difference in
+performance. I've also created a number of different epoll networks and
+tested that they behave as expectded.
+
+I believe this solves the original diabolical test cases, while still
+preserving the sane epoll nesting.
+
+Signed-off-by: Jason Baron <jbaron@redhat.com>
+Cc: Nelson Elhage <nelhage@ksplice.com>
+Cc: Davide Libenzi <davidel@xmailserver.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+---
+ fs/eventpoll.c | 226 ++++++++++++++++++++++++++++++++++++++++-----
+ include/linux/eventpoll.h | 1 +
+ include/linux/fs.h | 1 +
+ 3 files changed, 203 insertions(+), 25 deletions(-)
+
+diff --git a/fs/eventpoll.c b/fs/eventpoll.c
+index 4a53743..414ac74 100644
+--- a/fs/eventpoll.c
++++ b/fs/eventpoll.c
+@@ -197,6 +197,12 @@ struct eventpoll {
+
+ /* The user that created the eventpoll descriptor */
+ struct user_struct *user;
++
++ struct file *file;
++
++ /* used to optimize loop detection check */
++ int visited;
++ struct list_head visitedllink;
+ };
+
+ /* Wait structure used by the poll hooks */
+@@ -255,6 +261,12 @@ static struct kmem_cache *epi_cache __read_mostly;
+ /* Slab cache used to allocate "struct eppoll_entry" */
+ static struct kmem_cache *pwq_cache __read_mostly;
+
++/* Visited nodes during ep_loop_check(), so we can unset them when we finish */
++LIST_HEAD(visited_list);
++
++/* Files with newly added links, which need a limit on emanating paths */
++LIST_HEAD(tfile_check_list);
++
+ #ifdef CONFIG_SYSCTL
+
+ #include <linux/sysctl.h>
+@@ -276,6 +288,12 @@ ctl_table epoll_table[] = {
+ };
+ #endif /* CONFIG_SYSCTL */
+
++static const struct file_operations eventpoll_fops;
++
++static inline int is_file_epoll(struct file *f)
++{
++ return f->f_op == &eventpoll_fops;
++}
+
+ /* Setup the structure that is used as key for the RB tree */
+ static inline void ep_set_ffd(struct epoll_filefd *ffd,
+@@ -711,12 +729,6 @@ static const struct file_operations eventpoll_fops = {
+ .llseek = noop_llseek,
+ };
+
+-/* Fast test to see if the file is an evenpoll file */
+-static inline int is_file_epoll(struct file *f)
+-{
+- return f->f_op == &eventpoll_fops;
+-}
+-
+ /*
+ * This is called from eventpoll_release() to unlink files from the eventpoll
+ * interface. We need to have this facility to cleanup correctly files that are
+@@ -926,6 +938,96 @@ static void ep_rbtree_insert(struct eventpoll *ep, struct epitem *epi)
+ rb_insert_color(&epi->rbn, &ep->rbr);
+ }
+
++
++
++#define PATH_ARR_SIZE 5
++/* These are the number paths of length 1 to 5, that we are allowing to emanate
++ * from a single file of interest. For example, we allow 1000 paths of length
++ * 1, to emanate from each file of interest. This essentially represents the
++ * potential wakeup paths, which need to be limited in order to avoid massive
++ * uncontrolled wakeup storms. The common use case should be a single ep which
++ * is connected to n file sources. In this case each file source has 1 path
++ * of length 1. Thus, the numbers below should be more than sufficient.
++ */
++int path_limits[PATH_ARR_SIZE] = { 1000, 500, 100, 50, 10 };
++int path_count[PATH_ARR_SIZE];
++
++static int path_count_inc(int nests)
++{
++ if (++path_count[nests] > path_limits[nests])
++ return -1;
++ return 0;
++}
++
++static void path_count_init(void)
++{
++ int i;
++
++ for (i = 0; i < PATH_ARR_SIZE; i++)
++ path_count[i] = 0;
++}
++
++static int reverse_path_check_proc(void *priv, void *cookie, int call_nests)
++{
++ int error = 0;
++ struct file *file = priv;
++ struct file *child_file;
++ struct epitem *epi;
++
++ list_for_each_entry(epi, &file->f_ep_links, fllink) {
++ child_file = epi->ep->file;
++ if (is_file_epoll(child_file)) {
++ if (list_empty(&child_file->f_ep_links)) {
++ if (path_count_inc(call_nests)) {
++ error = -1;
++ break;
++ }
++ } else {
++ error = ep_call_nested(&poll_loop_ncalls,
++ EP_MAX_NESTS,
++ reverse_path_check_proc,
++ child_file, child_file,
++ current);
++ }
++ if (error != 0)
++ break;
++ } else {
++ printk(KERN_ERR "reverse_path_check_proc: "
++ "file is not an ep!\n");
++ }
++ }
++ return error;
++}
++
++/**
++ * reverse_path_check - The tfile_check_list is list of file *, which have
++ * links that are proposed to be newly added. We need to
++ * make sure that those added links don't add too many
++ * paths such that we will spend all our time waking up
++ * eventpoll objects.
++ *
++ * Returns: Returns zero if the proposed links don't create too many paths,
++ * -1 otherwise.
++ */
++static int reverse_path_check(void)
++{
++ int length = 0;
++ int error = 0;
++ struct file *current_file;
++
++ /* let's call this for all tfiles */
++ list_for_each_entry(current_file, &tfile_check_list, f_tfile_llink) {
++ length++;
++ path_count_init();
++ error = ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
++ reverse_path_check_proc, current_file,
++ current_file, current);
++ if (error)
++ break;
++ }
++ return error;
++}
++
+ /*
+ * Must be called with "mtx" held.
+ */
+@@ -987,6 +1089,11 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
+ */
+ ep_rbtree_insert(ep, epi);
+
++ /* now check if we've created too many backpaths */
++ error = -EINVAL;
++ if (reverse_path_check())
++ goto error_remove_epi;
++
+ /* We have to drop the new item inside our item list to keep track of it */
+ spin_lock_irqsave(&ep->lock, flags);
+
+@@ -1011,6 +1118,14 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
+
+ return 0;
+
++error_remove_epi:
++ spin_lock(&tfile->f_lock);
++ if (ep_is_linked(&epi->fllink))
++ list_del_init(&epi->fllink);
++ spin_unlock(&tfile->f_lock);
++
++ rb_erase(&epi->rbn, &ep->rbr);
++
+ error_unregister:
+ ep_unregister_pollwait(ep, epi);
+
+@@ -1275,18 +1390,35 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
+ int error = 0;
+ struct file *file = priv;
+ struct eventpoll *ep = file->private_data;
++ struct eventpoll *ep_tovisit;
+ struct rb_node *rbp;
+ struct epitem *epi;
+
+ mutex_lock_nested(&ep->mtx, call_nests + 1);
++ ep->visited = 1;
++ list_add(&ep->visitedllink, &visited_list);
+ for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
+ epi = rb_entry(rbp, struct epitem, rbn);
+ if (unlikely(is_file_epoll(epi->ffd.file))) {
++ ep_tovisit = epi->ffd.file->private_data;
++ if (ep_tovisit->visited)
++ continue;
+ error = ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
+- ep_loop_check_proc, epi->ffd.file,
+- epi->ffd.file->private_data, current);
++ ep_loop_check_proc, epi->ffd.file,
++ ep_tovisit, current);
+ if (error != 0)
+ break;
++ } else {
++ /* if we've reached a file that is not associated with
++ * an ep, then then we need to check if the newly added
++ * links are going to add too many wakeup paths. We do
++ * this by adding it to the tfile_check_list, if it's
++ * not already there, and calling reverse_path_check()
++ * during ep_insert()
++ */
++ if (list_empty(&epi->ffd.file->f_tfile_llink))
++ list_add(&epi->ffd.file->f_tfile_llink,
++ &tfile_check_list);
+ }
+ }
+ mutex_unlock(&ep->mtx);
+@@ -1307,8 +1439,30 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
+ */
+ static int ep_loop_check(struct eventpoll *ep, struct file *file)
+ {
+- return ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
++ int ret;
++ struct eventpoll *ep_cur, *ep_next;
++
++ ret = ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
+ ep_loop_check_proc, file, ep, current);
++ /* clear visited list */
++ list_for_each_entry_safe(ep_cur, ep_next, &visited_list, visitedllink) {
++ ep_cur->visited = 0;
++ list_del(&ep_cur->visitedllink);
++ }
++ return ret;
++}
++
++static void clear_tfile_check_list(void)
++{
++ struct file *file;
++
++ /* first clear the tfile_check_list */
++ while (!list_empty(&tfile_check_list)) {
++ file = list_first_entry(&tfile_check_list, struct file,
++ f_tfile_llink);
++ list_del_init(&file->f_tfile_llink);
++ }
++ INIT_LIST_HEAD(&tfile_check_list);
+ }
+
+ /*
+@@ -1316,8 +1470,9 @@ static int ep_loop_check(struct eventpoll *ep, struct file *file)
+ */
+ SYSCALL_DEFINE1(epoll_create1, int, flags)
+ {
+- int error;
++ int error, fd;
+ struct eventpoll *ep = NULL;
++ struct file *file;
+
+ /* Check the EPOLL_* constant for consistency. */
+ BUILD_BUG_ON(EPOLL_CLOEXEC != O_CLOEXEC);
+@@ -1334,11 +1489,25 @@ SYSCALL_DEFINE1(epoll_create1, int, flags)
+ * Creates all the items needed to setup an eventpoll file. That is,
+ * a file structure and a free file descriptor.
+ */
+- error = anon_inode_getfd("[eventpoll]", &eventpoll_fops, ep,
++ fd = get_unused_fd_flags(O_RDWR | (flags & O_CLOEXEC));
++ if (fd < 0) {
++ error = fd;
++ goto out_free_ep;
++ }
++ file = anon_inode_getfile("[eventpoll]", &eventpoll_fops, ep,
+ O_RDWR | (flags & O_CLOEXEC));
+- if (error < 0)
+- ep_free(ep);
+-
++ if (IS_ERR(file)) {
++ error = PTR_ERR(file);
++ goto out_free_fd;
++ }
++ fd_install(fd, file);
++ ep->file = file;
++ return fd;
++
++out_free_fd:
++ put_unused_fd(fd);
++out_free_ep:
++ ep_free(ep);
+ return error;
+ }
+
+@@ -1404,21 +1573,27 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
+ /*
+ * When we insert an epoll file descriptor, inside another epoll file
+ * descriptor, there is the change of creating closed loops, which are
+- * better be handled here, than in more critical paths.
++ * better be handled here, than in more critical paths. While we are
++ * checking for loops we also determine the list of files reachable
++ * and hang them on the tfile_check_list, so we can check that we
++ * haven't created too many possible wakeup paths.
+ *
+- * We hold epmutex across the loop check and the insert in this case, in
+- * order to prevent two separate inserts from racing and each doing the
+- * insert "at the same time" such that ep_loop_check passes on both
+- * before either one does the insert, thereby creating a cycle.
++ * We need to hold the epmutex across both ep_insert and ep_remove
++ * b/c we want to make sure we are looking at a coherent view of
++ * epoll network.
+ */
+- if (unlikely(is_file_epoll(tfile) && op == EPOLL_CTL_ADD)) {
++ if (op == EPOLL_CTL_ADD || op == EPOLL_CTL_DEL) {
+ mutex_lock(&epmutex);
+ did_lock_epmutex = 1;
+- error = -ELOOP;
+- if (ep_loop_check(ep, tfile) != 0)
+- goto error_tgt_fput;
+ }
+-
++ if (op == EPOLL_CTL_ADD) {
++ if (is_file_epoll(tfile)) {
++ error = -ELOOP;
++ if (ep_loop_check(ep, tfile) != 0)
++ goto error_tgt_fput;
++ } else
++ list_add(&tfile->f_tfile_llink, &tfile_check_list);
++ }
+
+ mutex_lock_nested(&ep->mtx, 0);
+
+@@ -1437,6 +1612,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
+ error = ep_insert(ep, &epds, tfile, fd);
+ } else
+ error = -EEXIST;
++ clear_tfile_check_list();
+ break;
+ case EPOLL_CTL_DEL:
+ if (epi)
+@@ -1455,7 +1631,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
+ mutex_unlock(&ep->mtx);
+
+ error_tgt_fput:
+- if (unlikely(did_lock_epmutex))
++ if (did_lock_epmutex)
+ mutex_unlock(&epmutex);
+
+ fput(tfile);
+diff --git a/include/linux/eventpoll.h b/include/linux/eventpoll.h
+index f362733..657ab55 100644
+--- a/include/linux/eventpoll.h
++++ b/include/linux/eventpoll.h
+@@ -61,6 +61,7 @@ struct file;
+ static inline void eventpoll_init_file(struct file *file)
+ {
+ INIT_LIST_HEAD(&file->f_ep_links);
++ INIT_LIST_HEAD(&file->f_tfile_llink);
+ }
+
+
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 277f497..93778e0 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -985,6 +985,7 @@ struct file {
+ #ifdef CONFIG_EPOLL
+ /* Used by fs/eventpoll.c to link all the hooks to this file */
+ struct list_head f_ep_links;
++ struct list_head f_tfile_llink;
+ #endif /* #ifdef CONFIG_EPOLL */
+ struct address_space *f_mapping;
+ #ifdef CONFIG_DEBUG_WRITECOUNT
+--
+1.7.6.4
+
diff --git a/freed-ora/current/f15/fuse-fix-memory-leak.patch b/freed-ora/current/f15/fuse-fix-memory-leak.patch
deleted file mode 100644
index c52069bee..000000000
--- a/freed-ora/current/f15/fuse-fix-memory-leak.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 4078129ec09990936702ab5274e05d139d7f7dcd Mon Sep 17 00:00:00 2001
-From: Miklos Szeredi <mszeredi@suse.cz>
-Date: Mon, 12 Sep 2011 09:38:03 +0200
-Subject: [PATCH] fuse: fix memory leak
-
-kmemleak is reporting that 32 bytes are being leaked by FUSE:
-
- unreferenced object 0xe373b270 (size 32):
- comm "fusermount", pid 1207, jiffies 4294707026 (age 2675.187s)
- hex dump (first 32 bytes):
- 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
- 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- backtrace:
- [<b05517d7>] kmemleak_alloc+0x27/0x50
- [<b0196435>] kmem_cache_alloc+0xc5/0x180
- [<b02455be>] fuse_alloc_forget+0x1e/0x20
- [<b0245670>] fuse_alloc_inode+0xb0/0xd0
- [<b01b1a8c>] alloc_inode+0x1c/0x80
- [<b01b290f>] iget5_locked+0x8f/0x1a0
- [<b0246022>] fuse_iget+0x72/0x1a0
- [<b02461da>] fuse_get_root_inode+0x8a/0x90
- [<b02465cf>] fuse_fill_super+0x3ef/0x590
- [<b019e56f>] mount_nodev+0x3f/0x90
- [<b0244e95>] fuse_mount+0x15/0x20
- [<b019d1bc>] mount_fs+0x1c/0xc0
- [<b01b5811>] vfs_kern_mount+0x41/0x90
- [<b01b5af9>] do_kern_mount+0x39/0xd0
- [<b01b7585>] do_mount+0x2e5/0x660
- [<b01b7966>] sys_mount+0x66/0xa0
-
-This leak report is consistent and happens once per boot on
-3.1.0-rc5-dirty.
-
-This happens if a FORGET request is queued after the fuse device was
-released.
-
-Reported-by: Sitsofe Wheeler <sitsofe@yahoo.com>
-Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
-Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
- fs/fuse/dev.c | 12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
-index 168a80f..5cb8614 100644
---- a/fs/fuse/dev.c
-+++ b/fs/fuse/dev.c
-@@ -258,10 +258,14 @@ void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,
- forget->forget_one.nlookup = nlookup;
-
- spin_lock(&fc->lock);
-- fc->forget_list_tail->next = forget;
-- fc->forget_list_tail = forget;
-- wake_up(&fc->waitq);
-- kill_fasync(&fc->fasync, SIGIO, POLL_IN);
-+ if (fc->connected) {
-+ fc->forget_list_tail->next = forget;
-+ fc->forget_list_tail = forget;
-+ wake_up(&fc->waitq);
-+ kill_fasync(&fc->fasync, SIGIO, POLL_IN);
-+ } else {
-+ kfree(forget);
-+ }
- spin_unlock(&fc->lock);
- }
-
---
-1.7.6.4
-
diff --git a/freed-ora/current/f15/hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch b/freed-ora/current/f15/hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch
deleted file mode 100644
index c81bf91d1..000000000
--- a/freed-ora/current/f15/hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch
+++ /dev/null
@@ -1,315 +0,0 @@
-From 6596528e391ad978a6a120142cba97a1d7324cb6 Mon Sep 17 00:00:00 2001
-From: Seth Forshee <seth.forshee@canonical.com>
-Date: Mon, 18 Jul 2011 08:06:23 -0700
-Subject: [PATCH] hfsplus: ensure bio requests are not smaller than the
- hardware sectors
-
-Currently all bio requests are 512 bytes, which may fail for media
-whose physical sector size is larger than this. Ensure these
-requests are not smaller than the block device logical block size.
-
-BugLink: http://bugs.launchpad.net/bugs/734883
-Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
-Signed-off-by: Christoph Hellwig <hch@lst.de>
----
- fs/hfsplus/hfsplus_fs.h | 16 ++++++++-
- fs/hfsplus/part_tbl.c | 32 ++++++++++--------
- fs/hfsplus/super.c | 12 +++---
- fs/hfsplus/wrapper.c | 83 +++++++++++++++++++++++++++++++++++-----------
- 4 files changed, 101 insertions(+), 42 deletions(-)
-
-diff --git a/fs/hfsplus/hfsplus_fs.h b/fs/hfsplus/hfsplus_fs.h
-index 0bebf74..81dfd1e 100644
---- a/fs/hfsplus/hfsplus_fs.h
-+++ b/fs/hfsplus/hfsplus_fs.h
-@@ -13,6 +13,7 @@
- #include <linux/fs.h>
- #include <linux/mutex.h>
- #include <linux/buffer_head.h>
-+#include <linux/blkdev.h>
- #include "hfsplus_raw.h"
-
- #define DBG_BNODE_REFS 0x00000001
-@@ -110,7 +111,9 @@ struct hfsplus_vh;
- struct hfs_btree;
-
- struct hfsplus_sb_info {
-+ void *s_vhdr_buf;
- struct hfsplus_vh *s_vhdr;
-+ void *s_backup_vhdr_buf;
- struct hfsplus_vh *s_backup_vhdr;
- struct hfs_btree *ext_tree;
- struct hfs_btree *cat_tree;
-@@ -258,6 +261,15 @@ struct hfsplus_readdir_data {
- struct hfsplus_cat_key key;
- };
-
-+/*
-+ * Find minimum acceptible I/O size for an hfsplus sb.
-+ */
-+static inline unsigned short hfsplus_min_io_size(struct super_block *sb)
-+{
-+ return max_t(unsigned short, bdev_logical_block_size(sb->s_bdev),
-+ HFSPLUS_SECTOR_SIZE);
-+}
-+
- #define hfs_btree_open hfsplus_btree_open
- #define hfs_btree_close hfsplus_btree_close
- #define hfs_btree_write hfsplus_btree_write
-@@ -436,8 +448,8 @@ int hfsplus_compare_dentry(const struct dentry *parent,
- /* wrapper.c */
- int hfsplus_read_wrapper(struct super_block *);
- int hfs_part_find(struct super_block *, sector_t *, sector_t *);
--int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,
-- void *data, int rw);
-+int hfsplus_submit_bio(struct super_block *sb, sector_t sector,
-+ void *buf, void **data, int rw);
-
- /* time macros */
- #define __hfsp_mt2ut(t) (be32_to_cpu(t) - 2082844800U)
-diff --git a/fs/hfsplus/part_tbl.c b/fs/hfsplus/part_tbl.c
-index 40ad88c..eb355d8 100644
---- a/fs/hfsplus/part_tbl.c
-+++ b/fs/hfsplus/part_tbl.c
-@@ -88,11 +88,12 @@ static int hfs_parse_old_pmap(struct super_block *sb, struct old_pmap *pm,
- return -ENOENT;
- }
-
--static int hfs_parse_new_pmap(struct super_block *sb, struct new_pmap *pm,
-- sector_t *part_start, sector_t *part_size)
-+static int hfs_parse_new_pmap(struct super_block *sb, void *buf,
-+ struct new_pmap *pm, sector_t *part_start, sector_t *part_size)
- {
- struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb);
- int size = be32_to_cpu(pm->pmMapBlkCnt);
-+ int buf_size = hfsplus_min_io_size(sb);
- int res;
- int i = 0;
-
-@@ -107,11 +108,14 @@ static int hfs_parse_new_pmap(struct super_block *sb, struct new_pmap *pm,
- if (++i >= size)
- return -ENOENT;
-
-- res = hfsplus_submit_bio(sb->s_bdev,
-- *part_start + HFS_PMAP_BLK + i,
-- pm, READ);
-- if (res)
-- return res;
-+ pm = (struct new_pmap *)((u8 *)pm + HFSPLUS_SECTOR_SIZE);
-+ if ((u8 *)pm - (u8 *)buf >= buf_size) {
-+ res = hfsplus_submit_bio(sb,
-+ *part_start + HFS_PMAP_BLK + i,
-+ buf, (void **)&pm, READ);
-+ if (res)
-+ return res;
-+ }
- } while (pm->pmSig == cpu_to_be16(HFS_NEW_PMAP_MAGIC));
-
- return -ENOENT;
-@@ -124,15 +128,15 @@ static int hfs_parse_new_pmap(struct super_block *sb, struct new_pmap *pm,
- int hfs_part_find(struct super_block *sb,
- sector_t *part_start, sector_t *part_size)
- {
-- void *data;
-+ void *buf, *data;
- int res;
-
-- data = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);
-- if (!data)
-+ buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL);
-+ if (!buf)
- return -ENOMEM;
-
-- res = hfsplus_submit_bio(sb->s_bdev, *part_start + HFS_PMAP_BLK,
-- data, READ);
-+ res = hfsplus_submit_bio(sb, *part_start + HFS_PMAP_BLK,
-+ buf, &data, READ);
- if (res)
- goto out;
-
-@@ -141,13 +145,13 @@ int hfs_part_find(struct super_block *sb,
- res = hfs_parse_old_pmap(sb, data, part_start, part_size);
- break;
- case HFS_NEW_PMAP_MAGIC:
-- res = hfs_parse_new_pmap(sb, data, part_start, part_size);
-+ res = hfs_parse_new_pmap(sb, buf, data, part_start, part_size);
- break;
- default:
- res = -ENOENT;
- break;
- }
- out:
-- kfree(data);
-+ kfree(buf);
- return res;
- }
-diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
-index 84f56e1..c106ca2 100644
---- a/fs/hfsplus/super.c
-+++ b/fs/hfsplus/super.c
-@@ -203,17 +203,17 @@ int hfsplus_sync_fs(struct super_block *sb, int wait)
- write_backup = 1;
- }
-
-- error2 = hfsplus_submit_bio(sb->s_bdev,
-+ error2 = hfsplus_submit_bio(sb,
- sbi->part_start + HFSPLUS_VOLHEAD_SECTOR,
-- sbi->s_vhdr, WRITE_SYNC);
-+ sbi->s_vhdr_buf, NULL, WRITE_SYNC);
- if (!error)
- error = error2;
- if (!write_backup)
- goto out;
-
-- error2 = hfsplus_submit_bio(sb->s_bdev,
-+ error2 = hfsplus_submit_bio(sb,
- sbi->part_start + sbi->sect_count - 2,
-- sbi->s_backup_vhdr, WRITE_SYNC);
-+ sbi->s_backup_vhdr_buf, NULL, WRITE_SYNC);
- if (!error)
- error2 = error;
- out:
-@@ -257,8 +257,8 @@ static void hfsplus_put_super(struct super_block *sb)
- hfs_btree_close(sbi->ext_tree);
- iput(sbi->alloc_file);
- iput(sbi->hidden_dir);
-- kfree(sbi->s_vhdr);
-- kfree(sbi->s_backup_vhdr);
-+ kfree(sbi->s_vhdr_buf);
-+ kfree(sbi->s_backup_vhdr_buf);
- unload_nls(sbi->nls);
- kfree(sb->s_fs_info);
- sb->s_fs_info = NULL;
-diff --git a/fs/hfsplus/wrapper.c b/fs/hfsplus/wrapper.c
-index 2f933e8..10e515a 100644
---- a/fs/hfsplus/wrapper.c
-+++ b/fs/hfsplus/wrapper.c
-@@ -31,25 +31,67 @@ static void hfsplus_end_io_sync(struct bio *bio, int err)
- complete(bio->bi_private);
- }
-
--int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,
-- void *data, int rw)
-+/*
-+ * hfsplus_submit_bio - Perfrom block I/O
-+ * @sb: super block of volume for I/O
-+ * @sector: block to read or write, for blocks of HFSPLUS_SECTOR_SIZE bytes
-+ * @buf: buffer for I/O
-+ * @data: output pointer for location of requested data
-+ * @rw: direction of I/O
-+ *
-+ * The unit of I/O is hfsplus_min_io_size(sb), which may be bigger than
-+ * HFSPLUS_SECTOR_SIZE, and @buf must be sized accordingly. On reads
-+ * @data will return a pointer to the start of the requested sector,
-+ * which may not be the same location as @buf.
-+ *
-+ * If @sector is not aligned to the bdev logical block size it will
-+ * be rounded down. For writes this means that @buf should contain data
-+ * that starts at the rounded-down address. As long as the data was
-+ * read using hfsplus_submit_bio() and the same buffer is used things
-+ * will work correctly.
-+ */
-+int hfsplus_submit_bio(struct super_block *sb, sector_t sector,
-+ void *buf, void **data, int rw)
- {
- DECLARE_COMPLETION_ONSTACK(wait);
- struct bio *bio;
- int ret = 0;
-+ unsigned int io_size;
-+ loff_t start;
-+ int offset;
-+
-+ /*
-+ * Align sector to hardware sector size and find offset. We
-+ * assume that io_size is a power of two, which _should_
-+ * be true.
-+ */
-+ io_size = hfsplus_min_io_size(sb);
-+ start = (loff_t)sector << HFSPLUS_SECTOR_SHIFT;
-+ offset = start & (io_size - 1);
-+ sector &= ~((io_size >> HFSPLUS_SECTOR_SHIFT) - 1);
-
- bio = bio_alloc(GFP_NOIO, 1);
- bio->bi_sector = sector;
-- bio->bi_bdev = bdev;
-+ bio->bi_bdev = sb->s_bdev;
- bio->bi_end_io = hfsplus_end_io_sync;
- bio->bi_private = &wait;
-
-- /*
-- * We always submit one sector at a time, so bio_add_page must not fail.
-- */
-- if (bio_add_page(bio, virt_to_page(data), HFSPLUS_SECTOR_SIZE,
-- offset_in_page(data)) != HFSPLUS_SECTOR_SIZE)
-- BUG();
-+ if (!(rw & WRITE) && data)
-+ *data = (u8 *)buf + offset;
-+
-+ while (io_size > 0) {
-+ unsigned int page_offset = offset_in_page(buf);
-+ unsigned int len = min_t(unsigned int, PAGE_SIZE - page_offset,
-+ io_size);
-+
-+ ret = bio_add_page(bio, virt_to_page(buf), len, page_offset);
-+ if (ret != len) {
-+ ret = -EIO;
-+ goto out;
-+ }
-+ io_size -= len;
-+ buf = (u8 *)buf + len;
-+ }
-
- submit_bio(rw, bio);
- wait_for_completion(&wait);
-@@ -57,8 +99,9 @@ int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,
- if (!bio_flagged(bio, BIO_UPTODATE))
- ret = -EIO;
-
-+out:
- bio_put(bio);
-- return ret;
-+ return ret < 0 ? ret : 0;
- }
-
- static int hfsplus_read_mdb(void *bufptr, struct hfsplus_wd *wd)
-@@ -143,17 +186,17 @@ int hfsplus_read_wrapper(struct super_block *sb)
- goto out;
-
- error = -ENOMEM;
-- sbi->s_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);
-- if (!sbi->s_vhdr)
-+ sbi->s_vhdr_buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL);
-+ if (!sbi->s_vhdr_buf)
- goto out;
-- sbi->s_backup_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);
-- if (!sbi->s_backup_vhdr)
-+ sbi->s_backup_vhdr_buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL);
-+ if (!sbi->s_backup_vhdr_buf)
- goto out_free_vhdr;
-
- reread:
-- error = hfsplus_submit_bio(sb->s_bdev,
-- part_start + HFSPLUS_VOLHEAD_SECTOR,
-- sbi->s_vhdr, READ);
-+ error = hfsplus_submit_bio(sb, part_start + HFSPLUS_VOLHEAD_SECTOR,
-+ sbi->s_vhdr_buf, (void **)&sbi->s_vhdr,
-+ READ);
- if (error)
- goto out_free_backup_vhdr;
-
-@@ -183,9 +226,9 @@ reread:
- goto reread;
- }
-
-- error = hfsplus_submit_bio(sb->s_bdev,
-- part_start + part_size - 2,
-- sbi->s_backup_vhdr, READ);
-+ error = hfsplus_submit_bio(sb, part_start + part_size - 2,
-+ sbi->s_backup_vhdr_buf,
-+ (void **)&sbi->s_backup_vhdr, READ);
- if (error)
- goto out_free_backup_vhdr;
-
---
-1.7.6
-
diff --git a/freed-ora/current/f15/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch b/freed-ora/current/f15/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch
deleted file mode 100644
index cf87d2ad3..000000000
--- a/freed-ora/current/f15/hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 35d851df23b093ee027f827fed2213ae5e88fc7a Mon Sep 17 00:00:00 2001
-From: Jiri Kosina <jkosina@suse.cz>
-Date: Thu, 25 Aug 2011 14:21:37 +0200
-Subject: [PATCH] HID: magicmouse: ignore 'ivalid report id' while switching
- modes, v2
-
-This is basically a more generic respin of 23746a6 ("HID: magicmouse: ignore
-'ivalid report id' while switching modes") which got reverted later by
-c3a492.
-
-It turns out that on some configurations, this is actually still the case
-and we are not able to detect in runtime.
-
-The device reponds with 'invalid report id' when feature report switching it
-into multitouch mode is sent to it.
-
-This has been silently ignored before 0825411ade ("HID: bt: Wait for ACK
-on Sent Reports"), but since this commit, it propagates -EIO from the _raw
-callback .
-
-So let the driver ignore -EIO as response to 0xd7,0x01 report, as that's
-how the device reacts in normal mode.
-
-Sad, but following reality.
-
-This fixes https://bugzilla.kernel.org/show_bug.cgi?id=35022
-
-Reported-by: Chase Douglas <chase.douglas@canonical.com>
-Reported-by: Jaikumar Ganesh <jaikumarg@android.com>
-Tested-by: Chase Douglas <chase.douglas@canonical.com>
-Tested-by: Jaikumar Ganesh <jaikumarg@android.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
----
- drivers/hid/hid-magicmouse.c | 10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
-index b5bdab3..f0fbd7b 100644
---- a/drivers/hid/hid-magicmouse.c
-+++ b/drivers/hid/hid-magicmouse.c
-@@ -537,9 +537,17 @@ static int magicmouse_probe(struct hid_device *hdev,
- }
- report->size = 6;
-
-+ /*
-+ * Some devices repond with 'invalid report id' when feature
-+ * report switching it into multitouch mode is sent to it.
-+ *
-+ * This results in -EIO from the _raw low-level transport callback,
-+ * but there seems to be no other way of switching the mode.
-+ * Thus the super-ugly hacky success check below.
-+ */
- ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature),
- HID_FEATURE_REPORT);
-- if (ret != sizeof(feature)) {
-+ if (ret != -EIO && ret != sizeof(feature)) {
- hid_err(hdev, "unable to request touch data (%d)\n", ret);
- goto err_stop_hw;
- }
---
-1.7.5.4
-
diff --git a/freed-ora/current/f15/kernel.spec b/freed-ora/current/f15/kernel.spec
index b89a40362..899a6e26a 100644
--- a/freed-ora/current/f15/kernel.spec
+++ b/freed-ora/current/f15/kernel.spec
@@ -42,7 +42,7 @@ Summary: The Linux kernel
# When changing real_sublevel below, reset this by hand to 1
# (or to 0 and then use rpmdev-bumpspec).
#
-%global baserelease 3
+%global baserelease 2
%global fedora_build %{baserelease}
# real_sublevel is the 3.x kernel version we're starting with
@@ -65,7 +65,7 @@ Summary: The Linux kernel
#define libres .
# Do we have a -stable update to apply?
-%define stable_update 7
+%define stable_update 8
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -638,7 +638,6 @@ Patch1500: fix_xen_guest_on_old_EC2.patch
# nouveau + drm fixes
Patch1810: drm-nouveau-updates.patch
-Patch1811: drm-ttm-nouveau-oops-fix.patch
# intel drm is all merged upstream
Patch1824: drm-intel-next.patch
# make sure the lvds comes back on lid open
@@ -679,7 +678,6 @@ Patch12016: disable-i8042-check-on-apple-mac.patch
Patch12023: ums-realtek-driver-uses-stack-memory-for-DMA.patch
Patch12024: usb-add-quirk-for-logitech-webcams.patch
Patch12025: crypto-register-cryptd-first.patch
-Patch12026: cputimer-Cure-lock-inversion.patch
Patch12027: x86-efi-Calling-__pa-with-an-ioremap-address-is-invalid.patch
Patch12028: x86-p4-make-watchdog-and-perf-work-together.patch
@@ -690,7 +688,7 @@ Patch12204: linux-2.6-enable-more-pci-autosuspend.patch
Patch12303: dmar-disable-when-ricoh-multifunction.patch
Patch13001: epoll-fix-spurious-lockdep-warnings.patch
-Patch13002: hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch
+Patch13002: epoll-limit-paths.patch
Patch13010: iwlagn-check-for-priv--txq-in-iwlagn_wait_tx_queue_empty.patch
@@ -711,18 +709,9 @@ Patch21003: TEGRA-2.6.40.2-enable-USB-ports.patch
# rhbz#719607
Patch21004: vfs-fix-automount-for-negative-autofs-dentries.patch
-# rhbz#727927 rhbz#731278 rhbz#732934
-Patch21005: cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch
-
-# rhbz #735437
-Patch21007: ucvideo-fix-crash-when-linking-entities.patch
-
# rhbz #740645
Patch21011: md-dont-delay-reboot-by-1-second-if-no-MD-devices.patch
-# rhbz #714381
-Patch21012: hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch
-
# rhbz #496975
Patch21013: Platform-fix-samsung-laptop-DMI-identification-for-N.patch
@@ -736,13 +725,21 @@ Patch21017: binfmt_elf-fix-PIE-execution-with-random-disabled.patch
#rhbz #722509
Patch21018: mmc-Always-check-for-lower-base-frequency-quirk-for-.patch
-#rhbz #745241
-Patch21019: fuse-fix-memory-leak.patch
-
#rhbz #735946
Patch21020: 0001-mm-vmscan-Limit-direct-reclaim-for-higher-order-allo.patch
Patch21021: 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
+#rhbz 737108
+Patch21030: platform-fix-samsung-brightness-min-max-calculations.patch
+
+#rhbz 748691
+Patch21040: be2net-move-to-new-vlan-model.patch
+Patch21041: be2net-non-member-vlan-pkts-not-received-in-promisco.patch
+Patch21042: benet-remove-bogus-unlikely-on-vlan-check.patch
+
+#rhbz 749166
+Patch21050: xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
+
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1190,6 +1187,7 @@ ApplyPatch linux-2.6-32bit-mmap-exec-randomization.patch
# ext4
# xfs
+ApplyPatch xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
# btrfs
@@ -1267,7 +1265,6 @@ ApplyPatch linux-2.6-e1000-ich9-montevina.patch
ApplyPatch fix_xen_guest_on_old_EC2.patch
# DRM core
-ApplyPatch drm-ttm-nouveau-oops-fix.patch
# Nouveau DRM
ApplyOptionalPatch drm-nouveau-updates.patch
@@ -1307,7 +1304,6 @@ ApplyPatch add-appleir-usb-driver.patch
ApplyPatch ums-realtek-driver-uses-stack-memory-for-DMA.patch
ApplyPatch usb-add-quirk-for-logitech-webcams.patch
ApplyPatch crypto-register-cryptd-first.patch
-ApplyPatch cputimer-Cure-lock-inversion.patch
ApplyPatch x86-efi-Calling-__pa-with-an-ioremap-address-is-invalid.patch
ApplyPatch x86-p4-make-watchdog-and-perf-work-together.patch
@@ -1315,8 +1311,7 @@ ApplyPatch x86-p4-make-watchdog-and-perf-work-together.patch
ApplyPatch dmar-disable-when-ricoh-multifunction.patch
ApplyPatch epoll-fix-spurious-lockdep-warnings.patch
-
-ApplyPatch hfsplus-ensure-bio-requests-are-not-smaller-than-the.patch
+ApplyPatch epoll-limit-paths.patch
ApplyPatch iwlagn-check-for-priv--txq-in-iwlagn_wait_tx_queue_empty.patch
@@ -1325,19 +1320,9 @@ ApplyPatch utrace.patch
# rhbz#719607
ApplyPatch vfs-fix-automount-for-negative-autofs-dentries.patch
-# rhbz#727927 rhbz#731278 rhbz#732934
-# cifs-possible-memory-corruption-on-mount.patch is already queued for 3.0.4
-ApplyPatch cifs-fix-ERR_PTR-dereference-in-cifs_get_root.patch
-
-#rhbz 735437
-ApplyPatch ucvideo-fix-crash-when-linking-entities.patch
-
#rhbz 740645
ApplyPatch md-dont-delay-reboot-by-1-second-if-no-MD-devices.patch
-# rhbz #714381
-ApplyPatch hid-magicmouse-ignore-ivalid-report-id-while-switching-modes-v2.patch
-
# rhbz #496675
ApplyPatch Platform-fix-samsung-laptop-DMI-identification-for-N.patch
@@ -1351,13 +1336,18 @@ ApplyPatch binfmt_elf-fix-PIE-execution-with-random-disabled.patch
#rhbz #722509
ApplyPatch mmc-Always-check-for-lower-base-frequency-quirk-for-.patch
-#rhbz #745241
-ApplyPatch fuse-fix-memory-leak.patch
-
#rhbz #735946
ApplyPatch 0001-mm-vmscan-Limit-direct-reclaim-for-higher-order-allo.patch
ApplyPatch 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
+#rhbz 737108
+ApplyPatch platform-fix-samsung-brightness-min-max-calculations.patch
+
+#rhbz 748691
+ApplyPatch be2net-move-to-new-vlan-model.patch
+ApplyPatch be2net-non-member-vlan-pkts-not-received-in-promisco.patch
+ApplyPatch benet-remove-bogus-unlikely-on-vlan-check.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -1978,6 +1968,22 @@ fi
# and build.
%changelog
+* Wed Oct 26 2011 Josh Boyer <jwboyer@redhat.com> 2.6.40.8-2
+- CVE-2011-4077: xfs: potential buffer overflow in xfs_readlink() (rhbz 749166)
+
+* Tue Oct 25 2011 Josh Boyer <jwboyer@redhat.com>
+- CVE-2011-3347: be2net: promiscuous mode and non-member VLAN packets DoS (rhbz 748691)
+- CVE-2011-1083: excessive in kernel CPU consumption when creating large nested epoll structures (rhbz 748668)
+
+* Tue Oct 25 2011 Josh Boyer <jwboyer@redhat.com>
+- Linux 3.0.8 stable release
+
+* Mon Oct 24 2011 Chuck Ebbert <cebbert@redhat.com>
+- Add patch from LKML to fix Samsung notebook brightness flicker (rhbz 737108)
+
+* Mon Oct 24 2011 Dave Jones <davej@redhat.com>
+- Print modules list from bad_page()
+
* Mon Oct 24 2011 Josh Boyer <jwboyer@redhat.com> 2.6.40.7-3
- Backport 3 fixed from linux-next to fix dib0700 playback (rhbz 733827)
diff --git a/freed-ora/current/f15/linux-2.6-debug-taint-vm.patch b/freed-ora/current/f15/linux-2.6-debug-taint-vm.patch
index ee367d45a..672509db2 100644
--- a/freed-ora/current/f15/linux-2.6-debug-taint-vm.patch
+++ b/freed-ora/current/f15/linux-2.6-debug-taint-vm.patch
@@ -1,31 +1,20 @@
-From b04c57d9dc889462951312be2ac81ff6c702e954 Mon Sep 17 00:00:00 2001
-From: Kyle McMartin <kyle@phobos.i.jkkm.org>
-Date: Wed, 8 Jul 2009 13:05:09 -0400
-Subject: [PATCH 3/6] fedora: linux-2.6-debug-taint-vm.patch
-
----
- kernel/panic.c | 4 +++-
- mm/slab.c | 8 ++++----
- mm/slub.c | 2 +-
- 4 files changed, 11 insertions(+), 8 deletions(-)
-
-diff --git a/kernel/panic.c b/kernel/panic.c
-index 984b3ec..6d1c3be 100644
---- a/kernel/panic.c
-+++ b/kernel/panic.c
-@@ -199,6 +199,7 @@ const char *print_tainted(void)
+diff --git a/mm/page_alloc.c b/mm/page_alloc.c
+index 4e8985a..70d0853 100644
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -318,6 +318,7 @@ static void bad_page(struct page *page)
+ current->comm, page_to_pfn(page));
+ dump_page(page);
- return buf;
- }
-+EXPORT_SYMBOL(print_tainted);
-
- int test_taint(unsigned flag)
- {
++ print_modules();
+ dump_stack();
+ out:
+ /* Leave bad fields for debug, except PageBuddy could make trouble */
diff --git a/mm/slab.c b/mm/slab.c
-index e74a16e..7bc287e 100644
+index d96e223..6f8905b 100644
--- a/mm/slab.c
+++ b/mm/slab.c
-@@ -1803,8 +1803,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
+@@ -1886,8 +1886,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
/* Print header */
if (lines == 0) {
printk(KERN_ERR
@@ -36,7 +25,7 @@ index e74a16e..7bc287e 100644
print_objinfo(cachep, objp, 0);
}
/* Hexdump the affected line */
-@@ -2902,8 +2902,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
+@@ -2985,8 +2985,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
if (entries != cachep->num - slabp->inuse) {
bad:
printk(KERN_ERR "slab: Internal list corruption detected in "
@@ -48,10 +37,10 @@ index e74a16e..7bc287e 100644
i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
i++) {
diff --git a/mm/slub.c b/mm/slub.c
-index 819f056..8eff0f4 100644
+index 35f351f..e7ccb39 100644
--- a/mm/slub.c
+++ b/mm/slub.c
-@@ -433,7 +433,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
+@@ -472,7 +472,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
va_end(args);
printk(KERN_ERR "========================================"
"=====================================\n");
@@ -60,6 +49,3 @@ index 819f056..8eff0f4 100644
printk(KERN_ERR "----------------------------------------"
"-------------------------------------\n\n");
}
---
-1.6.2.5
-
diff --git a/freed-ora/current/f15/patch-libre-3.0.7.bz2.sign b/freed-ora/current/f15/patch-libre-3.0.7.bz2.sign
deleted file mode 100644
index 82af23180..000000000
--- a/freed-ora/current/f15/patch-libre-3.0.7.bz2.sign
+++ /dev/null
@@ -1,7 +0,0 @@
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.17 (GNU/Linux)
-
-iEYEABECAAYFAk6cfw0ACgkQvLfPh359R6eQQgCfRLUGHDAmUn60+ql2mBXA2LJP
-LDMAn2toF2zJXzvpPmr0qs5dvCFlEsv2
-=Y6O+
------END PGP SIGNATURE-----
diff --git a/freed-ora/current/f15/patch-libre-3.0.8.bz2.sign b/freed-ora/current/f15/patch-libre-3.0.8.bz2.sign
new file mode 100644
index 000000000..591107a5d
--- /dev/null
+++ b/freed-ora/current/f15/patch-libre-3.0.8.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.17 (GNU/Linux)
+
+iEYEABECAAYFAk6nYCUACgkQvLfPh359R6cIRACgpiDm4CBrSVSNAqvIGEhaZx2o
+NLAAoIEttwPjLpSB1Vri0Nie+TKTwxDg
+=F7EA
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/f15/platform-fix-samsung-brightness-min-max-calculations.patch b/freed-ora/current/f15/platform-fix-samsung-brightness-min-max-calculations.patch
new file mode 100644
index 000000000..6a2c3b8cc
--- /dev/null
+++ b/freed-ora/current/f15/platform-fix-samsung-brightness-min-max-calculations.patch
@@ -0,0 +1,56 @@
+From: Jason Stubbs <jasonbstubbs@gmail.com>
+Subject: [PATCH] platform: fix samsung brightness min/max calculations
+
+For one of the SABI configs, the valid brightness levels are 1 through 8 with
+0 being reserved for the BIOS. To make the range 0-based, the driver is meant
+to offset values to/from userspace by 1 giving valid levels of 0 through 7.
+
+Currently, the driver is reporting a max brightness of 8 and doing the offset
+the wrong way such that setting a brightness of 8 will set as 7 in hardware
+while setting a brightness of 0 will attempt (and fail) to set as -1 in
+hardware.
+
+This patch fixes these calculations as well as a potential miscalculation due
+to an assumption of min_brightness being either 0 or 1.
+
+Signed-off-by: Jason Stubbs <jasonbstubbs@gmail.com>
+Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
+
+---
+Originally posted here, context fixed to apply to 3.0/3.1:
+[ https://lkml.org/lkml/2011/5/11/548 ]
+
+diff a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
+--- a/drivers/platform/x86/samsung-laptop.c
++++ b/drivers/platform/x86/samsung-laptop.c
+@@ -370,15 +370,17 @@ static u8 read_brightness(void)
+ &sretval);
+ if (!retval) {
+ user_brightness = sretval.retval[0];
+- if (user_brightness != 0)
++ if (user_brightness > sabi_config->min_brightness)
+ user_brightness -= sabi_config->min_brightness;
++ else
++ user_brightness = 0;
+ }
+ return user_brightness;
+ }
+
+ static void set_brightness(u8 user_brightness)
+ {
+- u8 user_level = user_brightness - sabi_config->min_brightness;
++ u8 user_level = user_brightness + sabi_config->min_brightness;
+
+ sabi_set_command(sabi_config->commands.set_brightness, user_level);
+ }
+@@ -802,7 +804,8 @@ static int __init samsung_init(void)
+ /* create a backlight device to talk to this one */
+ memset(&props, 0, sizeof(struct backlight_properties));
+ props.type = BACKLIGHT_PLATFORM;
+- props.max_brightness = sabi_config->max_brightness;
++ props.max_brightness = sabi_config->max_brightness -
++ sabi_config->min_brightness;
+ backlight_device = backlight_device_register("samsung", &sdev->dev,
+ NULL, &backlight_ops,
+ &props);
+_
diff --git a/freed-ora/current/f15/sources b/freed-ora/current/f15/sources
index 156e60b03..c8cb40c70 100644
--- a/freed-ora/current/f15/sources
+++ b/freed-ora/current/f15/sources
@@ -1,2 +1,2 @@
0bb0fee9a7170014074941d1b089d73b linux-3.0-libre.tar.bz2
-921caf55697235521e7809786f5d8eb7 patch-libre-3.0.7.bz2
+f47e04e7aa8fe03a5a90eb45ef3c85a6 patch-libre-3.0.8.bz2
diff --git a/freed-ora/current/f15/ucvideo-fix-crash-when-linking-entities.patch b/freed-ora/current/f15/ucvideo-fix-crash-when-linking-entities.patch
deleted file mode 100644
index 69f86d64c..000000000
--- a/freed-ora/current/f15/ucvideo-fix-crash-when-linking-entities.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-The uvc_mc_register_entity() function wrongfully selects the
-media_entity associated with a UVC entity when creating links. This
-results in access to uninitialized media_entity structures and can hit a
-BUG_ON statement in media_entity_create_link(). Fix it.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
----
- drivers/media/video/uvc/uvc_entity.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-This patch should fix a v3.0 regression that results in a kernel crash as
-reported in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637740 and
-https://bugzilla.redhat.com/show_bug.cgi?id=735437.
-
-Test results will be welcome.
-
-diff --git a/drivers/media/video/uvc/uvc_entity.c b/drivers/media/video/uvc/uvc_entity.c
-index 48fea37..29e2399 100644
---- a/drivers/media/video/uvc/uvc_entity.c
-+++ b/drivers/media/video/uvc/uvc_entity.c
-@@ -49,7 +49,7 @@ static int uvc_mc_register_entity(struct uvc_video_chain *chain,
- if (remote == NULL)
- return -EINVAL;
-
-- source = (UVC_ENTITY_TYPE(remote) != UVC_TT_STREAMING)
-+ source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
- ? (remote->vdev ? &remote->vdev->entity : NULL)
- : &remote->subdev.entity;
- if (source == NULL)
---
-Regards,
-
-Laurent Pinchart
-
diff --git a/freed-ora/current/f15/xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch b/freed-ora/current/f15/xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
new file mode 100644
index 000000000..319f80dc5
--- /dev/null
+++ b/freed-ora/current/f15/xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
@@ -0,0 +1,43 @@
+From cbee73333a2d05c274240dff5de1b4bb74bfb497 Mon Sep 17 00:00:00 2001
+From: Carlos Maiolino <cmaiolino@redhat.com>
+Date: Tue, 18 Oct 2011 02:18:58 -0200
+Subject: [PATCH] Fix possible memory corruption in xfs_readlink
+
+Fixes a possible memory corruption when the link is larger than
+MAXPATHLEN and XFS_DEBUG is not enabled. This also remove the
+S_ISLNK assert, since the inode mode is checked previously in
+xfs_readlink_by_handle() and via VFS.
+
+Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
+---
+ fs/xfs/xfs_vnodeops.c | 10 +++++++---
+ 1 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
+index 6197207..111870b 100644
+--- a/fs/xfs/xfs_vnodeops.c
++++ b/fs/xfs/xfs_vnodeops.c
+@@ -545,13 +545,17 @@ xfs_readlink(
+
+ xfs_ilock(ip, XFS_ILOCK_SHARED);
+
+- ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFLNK);
+- ASSERT(ip->i_d.di_size <= MAXPATHLEN);
+-
+ pathlen = ip->i_d.di_size;
+ if (!pathlen)
+ goto out;
+
++ if (pathlen > MAXPATHLEN) {
++ xfs_alert(mp, "%s: inode (%llu) symlink length (%d) too long",
++ __func__, (unsigned long long)ip->i_ino, pathlen);
++ ASSERT(0);
++ return XFS_ERROR(EFSCORRUPTED);
++ }
++
+ if (ip->i_df.if_flags & XFS_IFINLINE) {
+ memcpy(link, ip->i_df.if_u1.if_data, pathlen);
+ link[pathlen] = '\0';
+--
+1.7.6.4
+
OpenPOWER on IntegriCloud