]>
Commit | Line | Data |
---|---|---|
08aa9d92 | 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 | } | |
23929ec1 | 62 | On Sat, 2 Jul 2011, Andi Kleen wrote: |
2c2cf492 | 63 | |
23929ec1 JR |
64 | > > The problem is that blk_peek_request() calls scsi_prep_fn(), which |
65 | > > does this: | |
66 | > > | |
67 | > > struct scsi_device *sdev = q->queuedata; | |
68 | > > int ret = BLKPREP_KILL; | |
69 | > > | |
70 | > > if (req->cmd_type == REQ_TYPE_BLOCK_PC) | |
71 | > > ret = scsi_setup_blk_pc_cmnd(sdev, req); | |
72 | > > return scsi_prep_return(q, req, ret); | |
73 | > > | |
74 | > > It doesn't check to see if sdev is NULL, nor does | |
75 | > > scsi_setup_blk_pc_cmnd(). That accounts for this error: | |
76 | > | |
77 | > I actually added a NULL check in scsi_setup_blk_pc_cmnd early on, | |
78 | > but that just caused RCU CPU stalls afterwards and then eventually | |
79 | > a hung system. | |
80 | ||
81 | The RCU problem is likely to be a separate issue. It might even be a | |
82 | result of the use-after-free problem with the elevator. | |
83 | ||
84 | At any rate, it's clear that the crash in the refcounting log you | |
85 | posted occurred because scsi_setup_blk_pc_cmnd() called | |
86 | scsi_prep_state_check(), which tried to dereference the NULL pointer. | |
87 | ||
88 | Would you like to try this patch to see if it fixes the problem? As I | |
89 | said before, I'm not certain it's the best thing to do, but it worked | |
90 | on my system. | |
91 | ||
92 | Alan Stern | |
93 | ||
94 | ||
95 | ||
96 | ||
97 | Index: usb-3.0/drivers/scsi/scsi_lib.c | |
98 | =================================================================== | |
99 | --- usb-3.0.orig/drivers/scsi/scsi_lib.c | |
100 | +++ usb-3.0/drivers/scsi/scsi_lib.c | |
101 | @@ -1247,6 +1247,8 @@ int scsi_prep_fn(struct request_queue *q | |
102 | struct scsi_device *sdev = q->queuedata; | |
103 | int ret = BLKPREP_KILL; | |
104 | ||
105 | + if (!sdev) | |
106 | + return ret; | |
107 | if (req->cmd_type == REQ_TYPE_BLOCK_PC) | |
108 | ret = scsi_setup_blk_pc_cmnd(sdev, req); | |
109 | return scsi_prep_return(q, req, ret); | |
110 | Index: usb-3.0/drivers/scsi/scsi_sysfs.c | |
111 | =================================================================== | |
112 | --- usb-3.0.orig/drivers/scsi/scsi_sysfs.c | |
113 | +++ usb-3.0/drivers/scsi/scsi_sysfs.c | |
114 | @@ -322,6 +322,8 @@ static void scsi_device_dev_release_user | |
115 | kfree(evt); | |
116 | } | |
117 | ||
118 | + /* Freeing the queue signals to block that we're done */ | |
119 | + scsi_free_queue(sdev->request_queue); | |
120 | blk_put_queue(sdev->request_queue); | |
121 | /* NULL queue means the device can't be used */ | |
122 | sdev->request_queue = NULL; | |
123 | @@ -936,8 +938,6 @@ void __scsi_remove_device(struct scsi_de | |
124 | /* cause the request function to reject all I/O requests */ | |
125 | sdev->request_queue->queuedata = NULL; | |
126 | ||
127 | - /* Freeing the queue signals to block that we're done */ | |
128 | - scsi_free_queue(sdev->request_queue); | |
129 | put_device(dev); | |
130 | } | |
131 | ||
132 | ||
133 | ||
23929ec1 JR |
134 | -- |
135 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
136 | the body of a message to majordomo@vger.kernel.org | |
137 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
138 | Please read the FAQ at http://www.tux.org/lkml/ | |
2136e199 AM |
139 | --- linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh~ 2011-07-22 04:17:23.000000000 +0200 |
140 | +++ linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh 2011-08-25 21:26:04.799150642 +0200 | |
141 | @@ -9,6 +9,12 @@ | |
142 | $cc -print-file-name=lib${lib}.${ext} | grep -q / | |
143 | if [ $? -eq 0 ]; then | |
144 | echo "-l${lib}" | |
145 | + for libt in tinfow tinfo ; do | |
146 | + $cc -print-file-name=lib${libt}.${ext} | grep -q / | |
147 | + if [ $? -eq 0 ]; then | |
148 | + echo "-l${libt}" | |
149 | + fi | |
150 | + done | |
151 | exit | |
152 | fi | |
153 | done | |
44c0f99c | 154 | |
e0470645 | 155 | |
c8aa6c21 | 156 | |
5a5cc62f AM |
157 | commit 745718132c3c7cac98a622b610e239dcd5217f71 |
158 | Author: Hannes Reinecke <hare@suse.de> | |
159 | Date: Wed Nov 9 08:39:24 2011 +0100 | |
160 | ||
161 | [SCSI] Silencing 'killing requests for dead queue' | |
162 | ||
163 | When we tear down a device we try to flush all outstanding | |
164 | commands in scsi_free_queue(). However the check in | |
165 | scsi_request_fn() is imperfect as it only signals that | |
166 | we _might start_ aborting commands, not that we've actually | |
167 | aborted some. | |
168 | So move the printk inside the scsi_kill_request function, | |
169 | this will also give us a hint about which commands are aborted. | |
170 | ||
171 | Signed-off-by: Hannes Reinecke <hare@suse.de> | |
172 | Signed-off-by: James Bottomley <JBottomley@Parallels.com> | |
173 | ||
174 | diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c | |
175 | index 06bc265..f85cfa6 100644 | |
176 | --- a/drivers/scsi/scsi_lib.c | |
177 | +++ b/drivers/scsi/scsi_lib.c | |
178 | @@ -1409,6 +1409,8 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) | |
179 | ||
180 | blk_start_request(req); | |
181 | ||
182 | + scmd_printk(KERN_INFO, cmd, "killing request\n"); | |
183 | + | |
184 | sdev = cmd->device; | |
185 | starget = scsi_target(sdev); | |
186 | shost = sdev->host; | |
187 | @@ -1490,7 +1492,6 @@ static void scsi_request_fn(struct request_queue *q) | |
188 | struct request *req; | |
189 | ||
190 | if (!sdev) { | |
191 | - printk("scsi: killing requests for dead queue\n"); | |
192 | while ((req = blk_peek_request(q)) != NULL) | |
193 | scsi_kill_request(req, q); | |
194 | return; | |
b508a2a9 AM |
195 | >From 4467601416e23740fc940c31b1fffacbcb69b4a0 Mon Sep 17 00:00:00 2001 |
196 | From: Corey Minyard <cminyard@mvista.com> | |
197 | Date: Mon, 21 Nov 2011 14:26:20 -0600 | |
198 | Subject: [PATCH] ipmi_watchdog: Restore settings when BMC reset | |
199 | ||
200 | If the BMC gets reset, it will return 0x80 response errors. In this case, | |
201 | it is probably a good idea to restore the IPMI settings. | |
202 | --- | |
203 | drivers/char/ipmi/ipmi_watchdog.c | 41 ++++++++++++++++++++++++++++++++++-- | |
204 | 1 files changed, 38 insertions(+), 3 deletions(-) | |
205 | ||
206 | diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c | |
207 | index c2917ffa..34767a6 100644 | |
208 | --- a/drivers/char/ipmi/ipmi_watchdog.c | |
209 | +++ b/drivers/char/ipmi/ipmi_watchdog.c | |
210 | @@ -139,6 +139,8 @@ | |
211 | #define IPMI_WDOG_SET_TIMER 0x24 | |
212 | #define IPMI_WDOG_GET_TIMER 0x25 | |
213 | ||
214 | +#define IPMI_WDOG_TIMER_NOT_INIT_RESP 0x80 | |
215 | + | |
216 | /* These are here until the real ones get into the watchdog.h interface. */ | |
217 | #ifndef WDIOC_GETTIMEOUT | |
218 | #define WDIOC_GETTIMEOUT _IOW(WATCHDOG_IOCTL_BASE, 20, int) | |
219 | @@ -596,6 +598,7 @@ static int ipmi_heartbeat(void) | |
220 | struct kernel_ipmi_msg msg; | |
221 | int rv; | |
222 | struct ipmi_system_interface_addr addr; | |
223 | + int timeout_retries = 0; | |
224 | ||
225 | if (ipmi_ignore_heartbeat) | |
226 | return 0; | |
227 | @@ -616,6 +619,7 @@ static int ipmi_heartbeat(void) | |
228 | ||
229 | mutex_lock(&heartbeat_lock); | |
230 | ||
231 | +restart: | |
232 | atomic_set(&heartbeat_tofree, 2); | |
233 | ||
234 | /* | |
235 | @@ -653,7 +657,33 @@ static int ipmi_heartbeat(void) | |
236 | /* Wait for the heartbeat to be sent. */ | |
237 | wait_for_completion(&heartbeat_wait); | |
238 | ||
239 | - if (heartbeat_recv_msg.msg.data[0] != 0) { | |
240 | + if (heartbeat_recv_msg.msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) { | |
241 | + timeout_retries++; | |
242 | + if (timeout_retries > 3) { | |
243 | + printk(KERN_ERR PFX ": Unable to restore the IPMI" | |
244 | + " watchdog's settings, giving up.\n"); | |
245 | + rv = -EIO; | |
246 | + goto out_unlock; | |
247 | + } | |
248 | + | |
249 | + /* | |
250 | + * The timer was not initialized, that means the BMC was | |
251 | + * probably reset and lost the watchdog information. Attempt | |
252 | + * to restore the timer's info. Note that we still hold | |
253 | + * the heartbeat lock, to keep a heartbeat from happening | |
254 | + * in this process, so must say no heartbeat to avoid a | |
255 | + * deadlock on this mutex. | |
256 | + */ | |
257 | + rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); | |
258 | + if (rv) { | |
259 | + printk(KERN_ERR PFX ": Unable to send the command to" | |
260 | + " set the watchdog's settings, giving up.\n"); | |
261 | + goto out_unlock; | |
262 | + } | |
263 | + | |
264 | + /* We might need a new heartbeat, so do it now */ | |
265 | + goto restart; | |
266 | + } else if (heartbeat_recv_msg.msg.data[0] != 0) { | |
267 | /* | |
268 | * Got an error in the heartbeat response. It was already | |
269 | * reported in ipmi_wdog_msg_handler, but we should return | |
270 | @@ -662,6 +692,7 @@ static int ipmi_heartbeat(void) | |
271 | rv = -EINVAL; | |
272 | } | |
273 | ||
274 | +out_unlock: | |
275 | mutex_unlock(&heartbeat_lock); | |
276 | ||
277 | return rv; | |
278 | @@ -922,11 +953,15 @@ static struct miscdevice ipmi_wdog_miscdev = { | |
279 | static void ipmi_wdog_msg_handler(struct ipmi_recv_msg *msg, | |
280 | void *handler_data) | |
281 | { | |
282 | - if (msg->msg.data[0] != 0) { | |
283 | + if (msg->msg.cmd == IPMI_WDOG_RESET_TIMER && | |
284 | + msg->msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) | |
285 | + printk(KERN_INFO PFX "response: The IPMI controller appears" | |
286 | + " to have been reset, will attempt to reinitialize" | |
287 | + " the watchdog timer\n"); | |
288 | + else if (msg->msg.data[0] != 0) | |
289 | printk(KERN_ERR PFX "response: Error %x on cmd %x\n", | |
290 | msg->msg.data[0], | |
291 | msg->msg.cmd); | |
292 | - } | |
293 | ||
294 | ipmi_free_recv_msg(msg); | |
295 | } | |
296 | -- | |
297 | 1.7.4.1 | |
298 |