]> git.pld-linux.org Git - packages/kernel.git/blob - kernel-small_fixes.patch
- fix Oppses related to USB/SAS hot unplugs
[packages/kernel.git] / kernel-small_fixes.patch
1 --- linux-2.6.32/drivers/infiniband/Kconfig~    2009-12-05 00:26:03.663774916 +0100
2 +++ linux-2.6.32/drivers/infiniband/Kconfig     2009-12-05 00:26:05.914179759 +0100
3 @@ -37,7 +37,6 @@
4  config INFINIBAND_ADDR_TRANS
5         bool
6         depends on INET
7 -       depends on !(INFINIBAND = y && IPV6 = m)
8         default y
9  
10  source "drivers/infiniband/hw/mthca/Kconfig"
11 --- linux-2.6.33/scripts/mod/modpost.c~ 2010-02-24 19:52:17.000000000 +0100
12 +++ linux-2.6.33/scripts/mod/modpost.c  2010-03-07 14:26:47.242168558 +0100
13 @@ -15,7 +15,8 @@
14  #include <stdio.h>
15  #include <ctype.h>
16  #include "modpost.h"
17 -#include "../../include/generated/autoconf.h"
18 +// PLD architectures don't use CONFIG_SYMBOL_PREFIX
19 +//#include "../../include/generated/autoconf.h"
20  #include "../../include/linux/license.h"
21  
22  /* Some toolchains use a `_' prefix for all user symbols. */
23
24 commit 87b09f1f25cd1e01d7c50bf423c7fe33027d7511
25 Author: stephen hemminger <shemminger@vyatta.com>
26 Date:   Fri Feb 12 06:58:00 2010 +0000
27
28     sky2: dont enable PME legacy mode
29     
30     This bit is not changed by vendor driver, and should be left alone.
31     The documentation implies this a debug bit.
32       0 = WAKE# only asserted when VMAIN not available
33       1 = WAKE# is depend on wake events and independent of VMAIN.
34     
35     Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
36     Signed-off-by: David S. Miller <davem@davemloft.net>
37
38 diff --git b/drivers/net/sky2.c a/drivers/net/sky2.c
39 index 2494842..edf37aa 100644
40 --- b/drivers/net/sky2.c
41 +++ a/drivers/net/sky2.c
42 @@ -733,6 +733,7 @@ static void sky2_wol_init(struct sky2_port *sky2)
43         unsigned port = sky2->port;
44         enum flow_control save_mode;
45         u16 ctrl;
46 +       u32 reg1;
47  
48         /* Bring hardware out of reset */
49         sky2_write16(hw, B0_CTST, CS_RST_CLR);
50 @@ -786,6 +787,11 @@ static void sky2_wol_init(struct sky2_port *sky2)
51         /* Disable PiG firmware */
52         sky2_write16(hw, B0_CTST, Y2_HW_WOL_OFF);
53  
54 +       /* Turn on legacy PCI-Express PME mode */
55 +       reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
56 +       reg1 |= PCI_Y2_PME_LEGACY;
57 +       sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
58 +
59         /* block receiver */
60         sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET);
61  }
62 Date: Mon, 11 Jul 2011 09:59:57 -0400
63 From: Christoph Hellwig <hch@infradead.org>
64 To: xfs@oss.sgi.com
65 Cc: arekm@maven.pl
66 Subject: [PATCH] xfs: start periodic workers later
67 Message-ID: <20110711135957.GA23737@infradead.org>
68 MIME-Version: 1.0
69 Content-Type: text/plain;
70   charset=us-ascii
71 Content-Disposition: inline
72 User-Agent: Mutt/1.5.21 (2010-09-15)
73
74 Start the periodic sync workers only after we have finished xfs_mountfs
75 and thus fully set up the filesystem structures.  Without this we can
76 call into xfs_qm_sync before the quotainfo strucute is set up if the
77 mount takes unusually long, and probably hit other incomplete states
78 as well.
79
80 Also clean up the xfs_fs_fill_super error path by using consistent
81 label names, and removing an impossible to reach case.
82
83 Reported-by: Arkadiusz Miskiewicz <arekm@maven.pl>
84 Signed-off-by: Christoph Hellwig <hch@lst.de>
85
86 Index: xfs/fs/xfs/linux-2.6/xfs_super.c
87 ===================================================================
88 --- xfs.orig/fs/xfs/linux-2.6/xfs_super.c       2011-07-11 12:02:56.762758869 +0200
89 +++ xfs/fs/xfs/linux-2.6/xfs_super.c    2011-07-11 12:09:20.817344934 +0200
90 @@ -1411,37 +1411,35 @@ xfs_fs_fill_super(
91         sb->s_time_gran = 1;
92         set_posix_acl_flag(sb);
93  
94 -       error = xfs_syncd_init(mp);
95 -       if (error)
96 -               goto out_filestream_unmount;
97 -
98         xfs_inode_shrinker_register(mp);
99  
100         error = xfs_mountfs(mp);
101         if (error)
102 -               goto out_syncd_stop;
103 +               goto out_filestream_unmount;
104 +
105 +       error = xfs_syncd_init(mp);
106 +       if (error)
107 +               goto out_unmount;
108  
109         root = igrab(VFS_I(mp->m_rootip));
110         if (!root) {
111                 error = ENOENT;
112 -               goto fail_unmount;
113 +               goto out_syncd_stop;
114         }
115         if (is_bad_inode(root)) {
116                 error = EINVAL;
117 -               goto fail_vnrele;
118 +               goto out_syncd_stop;
119         }
120         sb->s_root = d_alloc_root(root);
121         if (!sb->s_root) {
122                 error = ENOMEM;
123 -               goto fail_vnrele;
124 +               goto out_iput;
125         }
126  
127         return 0;
128  
129 - out_syncd_stop:
130 -       xfs_inode_shrinker_unregister(mp);
131 -       xfs_syncd_stop(mp);
132   out_filestream_unmount:
133 +       xfs_inode_shrinker_unregister(mp);
134         xfs_filestream_unmount(mp);
135   out_free_sb:
136         xfs_freesb(mp);
137 @@ -1455,17 +1453,12 @@ xfs_fs_fill_super(
138   out:
139         return -error;
140  
141 - fail_vnrele:
142 -       if (sb->s_root) {
143 -               dput(sb->s_root);
144 -               sb->s_root = NULL;
145 -       } else {
146 -               iput(root);
147 -       }
148 -
149 - fail_unmount:
150 -       xfs_inode_shrinker_unregister(mp);
151 + out_iput:
152 +       iput(root);
153 + out_syncd_stop:
154         xfs_syncd_stop(mp);
155 + out_unmount:
156 +       xfs_inode_shrinker_unregister(mp);
157  
158         /*
159          * Blow away any referenced inode in the filestreams cache.
160 On Sat, 2 Jul 2011, Andi Kleen wrote:
161
162 > > The problem is that blk_peek_request() calls scsi_prep_fn(), which 
163 > > does this:
164 > > 
165 > >     struct scsi_device *sdev = q->queuedata;
166 > >     int ret = BLKPREP_KILL;
167 > > 
168 > >     if (req->cmd_type == REQ_TYPE_BLOCK_PC)
169 > >             ret = scsi_setup_blk_pc_cmnd(sdev, req);
170 > >     return scsi_prep_return(q, req, ret);
171 > > 
172 > > It doesn't check to see if sdev is NULL, nor does 
173 > > scsi_setup_blk_pc_cmnd().  That accounts for this error:
174
175 > I actually added a NULL check in scsi_setup_blk_pc_cmnd early on,
176 > but that just caused RCU CPU stalls afterwards and then eventually
177 > a hung system.
178
179 The RCU problem is likely to be a separate issue.  It might even be a 
180 result of the use-after-free problem with the elevator.
181
182 At any rate, it's clear that the crash in the refcounting log you
183 posted occurred because scsi_setup_blk_pc_cmnd() called
184 scsi_prep_state_check(), which tried to dereference the NULL pointer.
185
186 Would you like to try this patch to see if it fixes the problem?  As I 
187 said before, I'm not certain it's the best thing to do, but it worked 
188 on my system.
189
190 Alan Stern
191
192
193
194
195 Index: usb-3.0/drivers/scsi/scsi_lib.c
196 ===================================================================
197 --- usb-3.0.orig/drivers/scsi/scsi_lib.c
198 +++ usb-3.0/drivers/scsi/scsi_lib.c
199 @@ -1247,6 +1247,8 @@ int scsi_prep_fn(struct request_queue *q
200         struct scsi_device *sdev = q->queuedata;
201         int ret = BLKPREP_KILL;
202  
203 +       if (!sdev)
204 +               return ret;
205         if (req->cmd_type == REQ_TYPE_BLOCK_PC)
206                 ret = scsi_setup_blk_pc_cmnd(sdev, req);
207         return scsi_prep_return(q, req, ret);
208 Index: usb-3.0/drivers/scsi/scsi_sysfs.c
209 ===================================================================
210 --- usb-3.0.orig/drivers/scsi/scsi_sysfs.c
211 +++ usb-3.0/drivers/scsi/scsi_sysfs.c
212 @@ -322,6 +322,8 @@ static void scsi_device_dev_release_user
213                 kfree(evt);
214         }
215  
216 +       /* Freeing the queue signals to block that we're done */
217 +       scsi_free_queue(sdev->request_queue);
218         blk_put_queue(sdev->request_queue);
219         /* NULL queue means the device can't be used */
220         sdev->request_queue = NULL;
221 @@ -936,8 +938,6 @@ void __scsi_remove_device(struct scsi_de
222         /* cause the request function to reject all I/O requests */
223         sdev->request_queue->queuedata = NULL;
224  
225 -       /* Freeing the queue signals to block that we're done */
226 -       scsi_free_queue(sdev->request_queue);
227         put_device(dev);
228  }
229  
230
231
232 --
233 To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
234 the body of a message to majordomo@vger.kernel.org
235 More majordomo info at  http://vger.kernel.org/majordomo-info.html
236 Please read the FAQ at  http://www.tux.org/lkml/
237 As reported by Ben Greer and Froncois Romieu. The code path in 
238 the netif_carrier code leads it to try and disable
239 a late workqueue to reenable it immediately
240 netif_carrier_on
241 -> linkwatch_fire_event
242    -> linkwatch_schedule_work
243       -> cancel_delayed_work
244          -> del_timer_sync  
245
246 If __cancel_delayed_work is used instead then there is no
247 problem of waiting for running linkwatch_event.
248
249 There is a race between linkwatch_event running re-scheduling
250 but it is harmless to schedule an extra scan of the linkwatch queue.
251
252 Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
253
254
255 --- a/net/core/link_watch.c     2011-07-22 15:25:31.027533604 -0700
256 +++ b/net/core/link_watch.c     2011-07-22 15:31:27.531520028 -0700
257 @@ -126,7 +126,7 @@ static void linkwatch_schedule_work(int
258                 return;
259  
260         /* It's already running which is good enough. */
261 -       if (!cancel_delayed_work(&linkwatch_work))
262 +       if (!__cancel_delayed_work(&linkwatch_work))
263                 return;
264  
265         /* Otherwise we reschedule it again for immediate execution. */
266
267 --
268 To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
269 the body of a message to majordomo@vger.kernel.org
270 More majordomo info at  http://vger.kernel.org/majordomo-info.html
271 Please read the FAQ at  http://www.tux.org/lkml/
This page took 0.0683859999999999 seconds and 4 git commands to generate.