Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.37-r1/0103-2.6.37.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1311 - (show annotations) (download)
Tue Apr 12 14:29:09 2011 UTC (13 years ago) by niro
File size: 27766 byte(s)
kernel 2.6.37-alx-r1
1 diff --git a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c
2 index 4f6f679..4a5a42b 100644
3 --- a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c
4 +++ b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c
5 @@ -195,7 +195,7 @@ static unsigned int pcc_get_freq(unsigned int cpu)
6 cmd_incomplete:
7 iowrite16(0, &pcch_hdr->status);
8 spin_unlock(&pcc_lock);
9 - return -EINVAL;
10 + return 0;
11 }
12
13 static int pcc_cpufreq_target(struct cpufreq_policy *policy,
14 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
15 index ad2520b..e0d9473 100644
16 --- a/drivers/char/virtio_console.c
17 +++ b/drivers/char/virtio_console.c
18 @@ -387,6 +387,10 @@ static void discard_port_data(struct port *port)
19 unsigned int len;
20 int ret;
21
22 + if (!port->portdev) {
23 + /* Device has been unplugged. vqs are already gone. */
24 + return;
25 + }
26 vq = port->in_vq;
27 if (port->inbuf)
28 buf = port->inbuf;
29 @@ -469,6 +473,10 @@ static void reclaim_consumed_buffers(struct port *port)
30 void *buf;
31 unsigned int len;
32
33 + if (!port->portdev) {
34 + /* Device has been unplugged. vqs are already gone. */
35 + return;
36 + }
37 while ((buf = virtqueue_get_buf(port->out_vq, &len))) {
38 kfree(buf);
39 port->outvq_full = false;
40 diff --git a/drivers/hid/hid-mosart.c b/drivers/hid/hid-mosart.c
41 index 251eaa4..eec4c4a 100644
42 --- a/drivers/hid/hid-mosart.c
43 +++ b/drivers/hid/hid-mosart.c
44 @@ -90,6 +90,10 @@ static int mosart_input_mapping(struct hid_device *hdev, struct hid_input *hi,
45 case 0xff000000:
46 /* ignore HID features */
47 return -1;
48 +
49 + case HID_UP_BUTTON:
50 + /* ignore buttons */
51 + return -1;
52 }
53
54 return 0;
55 diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c
56 index e06acd1..535cc69 100644
57 --- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
58 +++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
59 @@ -870,6 +870,23 @@ static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap)
60 return 0;
61 }
62
63 +static int stk7700p_pid_filter(struct dvb_usb_adapter *adapter, int index,
64 + u16 pid, int onoff)
65 +{
66 + struct dib0700_state *st = adapter->dev->priv;
67 + if (st->is_dib7000pc)
68 + return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
69 + return dib7000m_pid_filter(adapter->fe, index, pid, onoff);
70 +}
71 +
72 +static int stk7700p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
73 +{
74 + struct dib0700_state *st = adapter->dev->priv;
75 + if (st->is_dib7000pc)
76 + return dib7000p_pid_filter_ctrl(adapter->fe, onoff);
77 + return dib7000m_pid_filter_ctrl(adapter->fe, onoff);
78 +}
79 +
80 static int stk70x0p_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
81 {
82 return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
83 @@ -1875,8 +1892,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
84 {
85 .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
86 .pid_filter_count = 32,
87 - .pid_filter = stk70x0p_pid_filter,
88 - .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
89 + .pid_filter = stk7700p_pid_filter,
90 + .pid_filter_ctrl = stk7700p_pid_filter_ctrl,
91 .frontend_attach = stk7700p_frontend_attach,
92 .tuner_attach = stk7700p_tuner_attach,
93
94 diff --git a/drivers/media/dvb/frontends/dib7000m.c b/drivers/media/dvb/frontends/dib7000m.c
95 index 0f09fd3..f01279f 100644
96 --- a/drivers/media/dvb/frontends/dib7000m.c
97 +++ b/drivers/media/dvb/frontends/dib7000m.c
98 @@ -1285,6 +1285,25 @@ struct i2c_adapter * dib7000m_get_i2c_master(struct dvb_frontend *demod, enum di
99 }
100 EXPORT_SYMBOL(dib7000m_get_i2c_master);
101
102 +int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff)
103 +{
104 + struct dib7000m_state *state = fe->demodulator_priv;
105 + u16 val = dib7000m_read_word(state, 294 + state->reg_offs) & 0xffef;
106 + val |= (onoff & 0x1) << 4;
107 + dprintk("PID filter enabled %d", onoff);
108 + return dib7000m_write_word(state, 294 + state->reg_offs, val);
109 +}
110 +EXPORT_SYMBOL(dib7000m_pid_filter_ctrl);
111 +
112 +int dib7000m_pid_filter(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff)
113 +{
114 + struct dib7000m_state *state = fe->demodulator_priv;
115 + dprintk("PID filter: index %x, PID %d, OnOff %d", id, pid, onoff);
116 + return dib7000m_write_word(state, 300 + state->reg_offs + id,
117 + onoff ? (1 << 13) | pid : 0);
118 +}
119 +EXPORT_SYMBOL(dib7000m_pid_filter);
120 +
121 #if 0
122 /* used with some prototype boards */
123 int dib7000m_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods,
124 diff --git a/drivers/media/dvb/frontends/dib7000m.h b/drivers/media/dvb/frontends/dib7000m.h
125 index 113819c..81fcf22 100644
126 --- a/drivers/media/dvb/frontends/dib7000m.h
127 +++ b/drivers/media/dvb/frontends/dib7000m.h
128 @@ -46,6 +46,8 @@ extern struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
129 extern struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *,
130 enum dibx000_i2c_interface,
131 int);
132 +extern int dib7000m_pid_filter(struct dvb_frontend *, u8 id, u16 pid, u8 onoff);
133 +extern int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff);
134 #else
135 static inline
136 struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
137 @@ -63,6 +65,19 @@ struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *demod,
138 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
139 return NULL;
140 }
141 +static inline int dib7000m_pid_filter(struct dvb_frontend *fe, u8 id,
142 + u16 pid, u8 onoff)
143 +{
144 + printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
145 + return -ENODEV;
146 +}
147 +
148 +static inline int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe,
149 + uint8_t onoff)
150 +{
151 + printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
152 + return -ENODEV;
153 +}
154 #endif
155
156 /* TODO
157 diff --git a/drivers/media/video/cx23885/cx23885-i2c.c b/drivers/media/video/cx23885/cx23885-i2c.c
158 index ed3d8f5..1007f80 100644
159 --- a/drivers/media/video/cx23885/cx23885-i2c.c
160 +++ b/drivers/media/video/cx23885/cx23885-i2c.c
161 @@ -122,10 +122,6 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
162
163 if (!i2c_wait_done(i2c_adap))
164 goto eio;
165 - if (!i2c_slave_did_ack(i2c_adap)) {
166 - retval = -ENXIO;
167 - goto err;
168 - }
169 if (i2c_debug) {
170 printk(" <W %02x %02x", msg->addr << 1, msg->buf[0]);
171 if (!(ctrl & I2C_NOSTOP))
172 @@ -209,10 +205,6 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
173
174 if (!i2c_wait_done(i2c_adap))
175 goto eio;
176 - if (cnt == 0 && !i2c_slave_did_ack(i2c_adap)) {
177 - retval = -ENXIO;
178 - goto err;
179 - }
180 msg->buf[cnt] = cx_read(bus->reg_rdata) & 0xff;
181 if (i2c_debug) {
182 dprintk(1, " %02x", msg->buf[cnt]);
183 diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
184 index f164618..a201d9c 100644
185 --- a/drivers/media/video/cx25840/cx25840-core.c
186 +++ b/drivers/media/video/cx25840/cx25840-core.c
187 @@ -2031,7 +2031,8 @@ static int cx25840_probe(struct i2c_client *client,
188 kfree(state);
189 return err;
190 }
191 - v4l2_ctrl_cluster(2, &state->volume);
192 + if (!is_cx2583x(state))
193 + v4l2_ctrl_cluster(2, &state->volume);
194 v4l2_ctrl_handler_setup(&state->hdl);
195
196 cx25840_ir_probe(sd);
197 diff --git a/drivers/media/video/ivtv/ivtv-irq.c b/drivers/media/video/ivtv/ivtv-irq.c
198 index 9b4faf0..9c29e96 100644
199 --- a/drivers/media/video/ivtv/ivtv-irq.c
200 +++ b/drivers/media/video/ivtv/ivtv-irq.c
201 @@ -628,22 +628,66 @@ static void ivtv_irq_enc_pio_complete(struct ivtv *itv)
202 static void ivtv_irq_dma_err(struct ivtv *itv)
203 {
204 u32 data[CX2341X_MBOX_MAX_DATA];
205 + u32 status;
206
207 del_timer(&itv->dma_timer);
208 +
209 ivtv_api_get_data(&itv->enc_mbox, IVTV_MBOX_DMA_END, 2, data);
210 + status = read_reg(IVTV_REG_DMASTATUS);
211 IVTV_DEBUG_WARN("DMA ERROR %08x %08x %08x %d\n", data[0], data[1],
212 - read_reg(IVTV_REG_DMASTATUS), itv->cur_dma_stream);
213 - write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, IVTV_REG_DMASTATUS);
214 + status, itv->cur_dma_stream);
215 + /*
216 + * We do *not* write back to the IVTV_REG_DMASTATUS register to
217 + * clear the error status, if either the encoder write (0x02) or
218 + * decoder read (0x01) bus master DMA operation do not indicate
219 + * completed. We can race with the DMA engine, which may have
220 + * transitioned to completed status *after* we read the register.
221 + * Setting a IVTV_REG_DMASTATUS flag back to "busy" status, after the
222 + * DMA engine has completed, will cause the DMA engine to stop working.
223 + */
224 + status &= 0x3;
225 + if (status == 0x3)
226 + write_reg(status, IVTV_REG_DMASTATUS);
227 +
228 if (!test_bit(IVTV_F_I_UDMA, &itv->i_flags) &&
229 itv->cur_dma_stream >= 0 && itv->cur_dma_stream < IVTV_MAX_STREAMS) {
230 struct ivtv_stream *s = &itv->streams[itv->cur_dma_stream];
231
232 - /* retry */
233 - if (s->type >= IVTV_DEC_STREAM_TYPE_MPG)
234 + if (s->type >= IVTV_DEC_STREAM_TYPE_MPG) {
235 + /* retry */
236 + /*
237 + * FIXME - handle cases of DMA error similar to
238 + * encoder below, except conditioned on status & 0x1
239 + */
240 ivtv_dma_dec_start(s);
241 - else
242 - ivtv_dma_enc_start(s);
243 - return;
244 + return;
245 + } else {
246 + if ((status & 0x2) == 0) {
247 + /*
248 + * CX2341x Bus Master DMA write is ongoing.
249 + * Reset the timer and let it complete.
250 + */
251 + itv->dma_timer.expires =
252 + jiffies + msecs_to_jiffies(600);
253 + add_timer(&itv->dma_timer);
254 + return;
255 + }
256 +
257 + if (itv->dma_retries < 3) {
258 + /*
259 + * CX2341x Bus Master DMA write has ended.
260 + * Retry the write, starting with the first
261 + * xfer segment. Just retrying the current
262 + * segment is not sufficient.
263 + */
264 + s->sg_processed = 0;
265 + itv->dma_retries++;
266 + ivtv_dma_enc_start_xfer(s);
267 + return;
268 + }
269 + /* Too many retries, give up on this one */
270 + }
271 +
272 }
273 if (test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
274 ivtv_udma_start(itv);
275 diff --git a/drivers/misc/bmp085.c b/drivers/misc/bmp085.c
276 index 63ee4c1..b6e1c9a 100644
277 --- a/drivers/misc/bmp085.c
278 +++ b/drivers/misc/bmp085.c
279 @@ -449,6 +449,7 @@ static const struct i2c_device_id bmp085_id[] = {
280 { "bmp085", 0 },
281 { }
282 };
283 +MODULE_DEVICE_TABLE(i2c, bmp085_id);
284
285 static struct i2c_driver bmp085_driver = {
286 .driver = {
287 diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
288 index 0fa1776..4a0762b 100644
289 --- a/drivers/net/forcedeth.c
290 +++ b/drivers/net/forcedeth.c
291 @@ -5816,6 +5816,8 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
292 goto out_error;
293 }
294
295 + netif_carrier_off(dev);
296 +
297 dev_printk(KERN_INFO, &pci_dev->dev, "ifname %s, PHY OUI 0x%x @ %d, "
298 "addr %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
299 dev->name,
300 diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
301 index 57d747a..1722bcb 100644
302 --- a/drivers/net/ixgbe/ixgbe_main.c
303 +++ b/drivers/net/ixgbe/ixgbe_main.c
304 @@ -2923,6 +2923,10 @@ static void ixgbe_set_rx_buffer_len(struct ixgbe_adapter *adapter)
305 if (hw->mac.type == ixgbe_mac_82599EB)
306 adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED;
307
308 + /* Disable packet split due to 82599 erratum #45 */
309 + if (hw->mac.type == ixgbe_mac_82599EB)
310 + adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED;
311 +
312 /* Set the RX buffer length according to the mode */
313 if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
314 rx_buf_len = IXGBE_RX_HDR_SIZE;
315 diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
316 index 3f70a2f..b17e356 100644
317 --- a/drivers/net/r8169.c
318 +++ b/drivers/net/r8169.c
319 @@ -758,7 +758,8 @@ static void __rtl8169_check_link_status(struct net_device *dev,
320 if (pm)
321 pm_request_resume(&tp->pci_dev->dev);
322 netif_carrier_on(dev);
323 - netif_info(tp, ifup, dev, "link up\n");
324 + if (net_ratelimit())
325 + netif_info(tp, ifup, dev, "link up\n");
326 } else {
327 netif_carrier_off(dev);
328 netif_info(tp, ifdown, dev, "link down\n");
329 @@ -3235,6 +3236,8 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
330 if (pci_dev_run_wake(pdev))
331 pm_runtime_put_noidle(&pdev->dev);
332
333 + netif_carrier_off(dev);
334 +
335 out:
336 return rc;
337
338 @@ -3725,7 +3728,8 @@ static void rtl_hw_start_8168(struct net_device *dev)
339 RTL_W16(IntrMitigate, 0x5151);
340
341 /* Work around for RxFIFO overflow. */
342 - if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
343 + if (tp->mac_version == RTL_GIGA_MAC_VER_11 ||
344 + tp->mac_version == RTL_GIGA_MAC_VER_22) {
345 tp->intr_event |= RxFIFOOver | PCSTimeout;
346 tp->intr_event &= ~RxOverflow;
347 }
348 @@ -4602,12 +4606,32 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
349 break;
350 }
351
352 - /* Work around for rx fifo overflow */
353 - if (unlikely(status & RxFIFOOver) &&
354 - (tp->mac_version == RTL_GIGA_MAC_VER_11)) {
355 - netif_stop_queue(dev);
356 - rtl8169_tx_timeout(dev);
357 - break;
358 + if (unlikely(status & RxFIFOOver)) {
359 + switch (tp->mac_version) {
360 + /* Work around for rx fifo overflow */
361 + case RTL_GIGA_MAC_VER_11:
362 + case RTL_GIGA_MAC_VER_22:
363 + case RTL_GIGA_MAC_VER_26:
364 + netif_stop_queue(dev);
365 + rtl8169_tx_timeout(dev);
366 + goto done;
367 + /* Testers needed. */
368 + case RTL_GIGA_MAC_VER_17:
369 + case RTL_GIGA_MAC_VER_19:
370 + case RTL_GIGA_MAC_VER_20:
371 + case RTL_GIGA_MAC_VER_21:
372 + case RTL_GIGA_MAC_VER_23:
373 + case RTL_GIGA_MAC_VER_24:
374 + case RTL_GIGA_MAC_VER_27:
375 + /* Experimental science. Pktgen proof. */
376 + case RTL_GIGA_MAC_VER_12:
377 + case RTL_GIGA_MAC_VER_25:
378 + if (status == RxFIFOOver)
379 + goto done;
380 + break;
381 + default:
382 + break;
383 + }
384 }
385
386 if (unlikely(status & SYSErr)) {
387 @@ -4643,7 +4667,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
388 (status & RxFIFOOver) ? (status | RxOverflow) : status);
389 status = RTL_R16(IntrStatus);
390 }
391 -
392 +done:
393 return IRQ_RETVAL(handled);
394 }
395
396 diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
397 index c0b60ce..94bd9bc 100644
398 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
399 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
400 @@ -21,7 +21,6 @@
401 #include <linux/device.h>
402 #include <linux/leds.h>
403 #include <linux/completion.h>
404 -#include <linux/pm_qos_params.h>
405
406 #include "debug.h"
407 #include "common.h"
408 @@ -647,8 +646,6 @@ struct ath_softc {
409 struct ath_descdma txsdma;
410
411 struct ath_ant_comb ant_comb;
412 -
413 - struct pm_qos_request_list pm_qos_req;
414 };
415
416 struct ath_wiphy {
417 diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
418 index 14b8ab3..91d9b2a 100644
419 --- a/drivers/net/wireless/ath/ath9k/init.c
420 +++ b/drivers/net/wireless/ath/ath9k/init.c
421 @@ -758,9 +758,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
422 ath_init_leds(sc);
423 ath_start_rfkill_poll(sc);
424
425 - pm_qos_add_request(&sc->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
426 - PM_QOS_DEFAULT_VALUE);
427 -
428 return 0;
429
430 error_world:
431 @@ -829,7 +826,6 @@ void ath9k_deinit_device(struct ath_softc *sc)
432 }
433
434 ieee80211_unregister_hw(hw);
435 - pm_qos_remove_request(&sc->pm_qos_req);
436 ath_rx_cleanup(sc);
437 ath_tx_cleanup(sc);
438 ath9k_deinit_softc(sc);
439 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
440 index d1b0db4..cb0b2b9 100644
441 --- a/drivers/net/wireless/ath/ath9k/main.c
442 +++ b/drivers/net/wireless/ath/ath9k/main.c
443 @@ -1245,8 +1245,6 @@ static int ath9k_start(struct ieee80211_hw *hw)
444 ath9k_btcoex_timer_resume(sc);
445 }
446
447 - pm_qos_update_request(&sc->pm_qos_req, 55);
448 -
449 mutex_unlock:
450 mutex_unlock(&sc->mutex);
451
452 @@ -1425,8 +1423,6 @@ static void ath9k_stop(struct ieee80211_hw *hw)
453
454 sc->sc_flags |= SC_OP_INVALID;
455
456 - pm_qos_update_request(&sc->pm_qos_req, PM_QOS_DEFAULT_VALUE);
457 -
458 mutex_unlock(&sc->mutex);
459
460 ath_print(common, ATH_DBG_CONFIG, "Driver halt\n");
461 diff --git a/drivers/s390/char/keyboard.c b/drivers/s390/char/keyboard.c
462 index 8cd58e4..5ad44da 100644
463 --- a/drivers/s390/char/keyboard.c
464 +++ b/drivers/s390/char/keyboard.c
465 @@ -460,7 +460,8 @@ kbd_ioctl(struct kbd_data *kbd, struct file *file,
466 unsigned int cmd, unsigned long arg)
467 {
468 void __user *argp;
469 - int ct, perm;
470 + unsigned int ct;
471 + int perm;
472
473 argp = (void __user *)arg;
474
475 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
476 index 4435e5e..c2c7a6b 100644
477 --- a/fs/nfs/nfs4proc.c
478 +++ b/fs/nfs/nfs4proc.c
479 @@ -49,6 +49,7 @@
480 #include <linux/mount.h>
481 #include <linux/module.h>
482 #include <linux/sunrpc/bc_xprt.h>
483 +#include <linux/mm.h>
484
485 #include "nfs4_fs.h"
486 #include "delegation.h"
487 @@ -3216,6 +3217,35 @@ static void buf_to_pages(const void *buf, size_t buflen,
488 }
489 }
490
491 +static int buf_to_pages_noslab(const void *buf, size_t buflen,
492 + struct page **pages, unsigned int *pgbase)
493 +{
494 + struct page *newpage, **spages;
495 + int rc = 0;
496 + size_t len;
497 + spages = pages;
498 +
499 + do {
500 + len = min(PAGE_CACHE_SIZE, buflen);
501 + newpage = alloc_page(GFP_KERNEL);
502 +
503 + if (newpage == NULL)
504 + goto unwind;
505 + memcpy(page_address(newpage), buf, len);
506 + buf += len;
507 + buflen -= len;
508 + *pages++ = newpage;
509 + rc++;
510 + } while (buflen != 0);
511 +
512 + return rc;
513 +
514 +unwind:
515 + for(; rc > 0; rc--)
516 + __free_page(spages[rc-1]);
517 + return -ENOMEM;
518 +}
519 +
520 struct nfs4_cached_acl {
521 int cached;
522 size_t len;
523 @@ -3384,13 +3414,23 @@ static int __nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t bufl
524 .rpc_argp = &arg,
525 .rpc_resp = &res,
526 };
527 - int ret;
528 + int ret, i;
529
530 if (!nfs4_server_supports_acls(server))
531 return -EOPNOTSUPP;
532 + i = buf_to_pages_noslab(buf, buflen, arg.acl_pages, &arg.acl_pgbase);
533 + if (i < 0)
534 + return i;
535 nfs_inode_return_delegation(inode);
536 - buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase);
537 ret = nfs4_call_sync(server, &msg, &arg, &res, 1);
538 +
539 + /*
540 + * Free each page after tx, so the only ref left is
541 + * held by the network stack
542 + */
543 + for (; i > 0; i--)
544 + put_page(pages[i-1]);
545 +
546 /*
547 * Acl update can result in inode attribute update.
548 * so mark the attribute cache invalid.
549 diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
550 index 0662a98..635f663 100644
551 --- a/fs/nfs/nfs4xdr.c
552 +++ b/fs/nfs/nfs4xdr.c
553 @@ -6212,9 +6212,6 @@ __be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
554 if (entry->fattr->valid & NFS_ATTR_FATTR_TYPE)
555 entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);
556
557 - if (verify_attr_len(xdr, p, len) < 0)
558 - goto out_overflow;
559 -
560 return p;
561
562 out_overflow:
563 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
564 index 67080e4..5cf8fa3 100644
565 --- a/fs/nfsd/nfs4xdr.c
566 +++ b/fs/nfsd/nfs4xdr.c
567 @@ -1107,7 +1107,7 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp,
568
569 u32 dummy;
570 char *machine_name;
571 - int i;
572 + int i, j;
573 int nr_secflavs;
574
575 READ_BUF(16);
576 @@ -1180,7 +1180,7 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp,
577 READ_BUF(4);
578 READ32(dummy);
579 READ_BUF(dummy * 4);
580 - for (i = 0; i < dummy; ++i)
581 + for (j = 0; j < dummy; ++j)
582 READ32(dummy);
583 break;
584 case RPC_AUTH_GSS:
585 diff --git a/include/keys/rxrpc-type.h b/include/keys/rxrpc-type.h
586 index 5cb86c3..fc48754 100644
587 --- a/include/keys/rxrpc-type.h
588 +++ b/include/keys/rxrpc-type.h
589 @@ -99,7 +99,6 @@ struct rxrpc_key_token {
590 * structure of raw payloads passed to add_key() or instantiate key
591 */
592 struct rxrpc_key_data_v1 {
593 - u32 kif_version; /* 1 */
594 u16 security_index;
595 u16 ticket_length;
596 u32 expiry; /* time_t */
597 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
598 index d8fd2c2..e63d08b 100644
599 --- a/include/linux/netdevice.h
600 +++ b/include/linux/netdevice.h
601 @@ -2336,6 +2336,9 @@ extern int netdev_notice(const struct net_device *dev, const char *format, ...)
602 extern int netdev_info(const struct net_device *dev, const char *format, ...)
603 __attribute__ ((format (printf, 2, 3)));
604
605 +#define MODULE_ALIAS_NETDEV(device) \
606 + MODULE_ALIAS("netdev-" device)
607 +
608 #if defined(DEBUG)
609 #define netdev_dbg(__dev, format, args...) \
610 netdev_printk(KERN_DEBUG, __dev, format, ##args)
611 diff --git a/kernel/cpuset.c b/kernel/cpuset.c
612 index 4349935..e92e981 100644
613 --- a/kernel/cpuset.c
614 +++ b/kernel/cpuset.c
615 @@ -1575,8 +1575,10 @@ static int cpuset_write_resmask(struct cgroup *cgrp, struct cftype *cft,
616 return -ENODEV;
617
618 trialcs = alloc_trial_cpuset(cs);
619 - if (!trialcs)
620 - return -ENOMEM;
621 + if (!trialcs) {
622 + retval = -ENOMEM;
623 + goto out;
624 + }
625
626 switch (cft->private) {
627 case FILE_CPULIST:
628 @@ -1591,6 +1593,7 @@ static int cpuset_write_resmask(struct cgroup *cgrp, struct cftype *cft,
629 }
630
631 free_trial_cpuset(trialcs);
632 +out:
633 cgroup_unlock();
634 return retval;
635 }
636 diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
637 index c5f1d23..acc5b8b 100644
638 --- a/kernel/sched_rt.c
639 +++ b/kernel/sched_rt.c
640 @@ -199,11 +199,12 @@ static void dequeue_rt_entity(struct sched_rt_entity *rt_se);
641
642 static void sched_rt_rq_enqueue(struct rt_rq *rt_rq)
643 {
644 - int this_cpu = smp_processor_id();
645 struct task_struct *curr = rq_of_rt_rq(rt_rq)->curr;
646 struct sched_rt_entity *rt_se;
647
648 - rt_se = rt_rq->tg->rt_se[this_cpu];
649 + int cpu = cpu_of(rq_of_rt_rq(rt_rq));
650 +
651 + rt_se = rt_rq->tg->rt_se[cpu];
652
653 if (rt_rq->rt_nr_running) {
654 if (rt_se && !on_rt_rq(rt_se))
655 @@ -215,10 +216,10 @@ static void sched_rt_rq_enqueue(struct rt_rq *rt_rq)
656
657 static void sched_rt_rq_dequeue(struct rt_rq *rt_rq)
658 {
659 - int this_cpu = smp_processor_id();
660 struct sched_rt_entity *rt_se;
661 + int cpu = cpu_of(rq_of_rt_rq(rt_rq));
662
663 - rt_se = rt_rq->tg->rt_se[this_cpu];
664 + rt_se = rt_rq->tg->rt_se[cpu];
665
666 if (rt_se && on_rt_rq(rt_se))
667 dequeue_rt_entity(rt_se);
668 @@ -546,8 +547,11 @@ static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun)
669 if (rt_rq->rt_time || rt_rq->rt_nr_running)
670 idle = 0;
671 raw_spin_unlock(&rt_rq->rt_runtime_lock);
672 - } else if (rt_rq->rt_nr_running)
673 + } else if (rt_rq->rt_nr_running) {
674 idle = 0;
675 + if (!rt_rq_throttled(rt_rq))
676 + enqueue = 1;
677 + }
678
679 if (enqueue)
680 sched_rt_rq_enqueue(rt_rq);
681 diff --git a/mm/mremap.c b/mm/mremap.c
682 index 563fbdd..e54d2b8 100644
683 --- a/mm/mremap.c
684 +++ b/mm/mremap.c
685 @@ -91,9 +91,7 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
686 */
687 mapping = vma->vm_file->f_mapping;
688 spin_lock(&mapping->i_mmap_lock);
689 - if (new_vma->vm_truncate_count &&
690 - new_vma->vm_truncate_count != vma->vm_truncate_count)
691 - new_vma->vm_truncate_count = 0;
692 + new_vma->vm_truncate_count = 0;
693 }
694
695 /*
696 diff --git a/net/core/dev.c b/net/core/dev.c
697 index c0d3b5f..1f03c4f 100644
698 --- a/net/core/dev.c
699 +++ b/net/core/dev.c
700 @@ -1116,13 +1116,21 @@ EXPORT_SYMBOL(netdev_bonding_change);
701 void dev_load(struct net *net, const char *name)
702 {
703 struct net_device *dev;
704 + int no_module;
705
706 rcu_read_lock();
707 dev = dev_get_by_name_rcu(net, name);
708 rcu_read_unlock();
709
710 - if (!dev && capable(CAP_NET_ADMIN))
711 - request_module("%s", name);
712 + no_module = !dev;
713 + if (no_module && capable(CAP_NET_ADMIN))
714 + no_module = request_module("netdev-%s", name);
715 + if (no_module && capable(CAP_SYS_MODULE)) {
716 + if (!request_module("%s", name))
717 + pr_err("Loading kernel module for a network device "
718 +"with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s "
719 +"instead\n", name);
720 + }
721 }
722 EXPORT_SYMBOL(dev_load);
723
724 diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
725 index 70ff77f..c0bbbc8 100644
726 --- a/net/ipv4/ip_gre.c
727 +++ b/net/ipv4/ip_gre.c
728 @@ -1775,3 +1775,4 @@ module_exit(ipgre_fini);
729 MODULE_LICENSE("GPL");
730 MODULE_ALIAS_RTNL_LINK("gre");
731 MODULE_ALIAS_RTNL_LINK("gretap");
732 +MODULE_ALIAS_NETDEV("gre0");
733 diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
734 index cd300aa..b472da9 100644
735 --- a/net/ipv4/ipip.c
736 +++ b/net/ipv4/ipip.c
737 @@ -921,3 +921,4 @@ static void __exit ipip_fini(void)
738 module_init(ipip_init);
739 module_exit(ipip_fini);
740 MODULE_LICENSE("GPL");
741 +MODULE_ALIAS_NETDEV("tunl0");
742 diff --git a/net/ipv4/netfilter/arpt_mangle.c b/net/ipv4/netfilter/arpt_mangle.c
743 index b8ddcc4..a5e52a9 100644
744 --- a/net/ipv4/netfilter/arpt_mangle.c
745 +++ b/net/ipv4/netfilter/arpt_mangle.c
746 @@ -60,12 +60,12 @@ static int checkentry(const struct xt_tgchk_param *par)
747
748 if (mangle->flags & ~ARPT_MANGLE_MASK ||
749 !(mangle->flags & ARPT_MANGLE_MASK))
750 - return false;
751 + return -EINVAL;
752
753 if (mangle->target != NF_DROP && mangle->target != NF_ACCEPT &&
754 mangle->target != XT_CONTINUE)
755 - return false;
756 - return true;
757 + return -EINVAL;
758 + return 0;
759 }
760
761 static struct xt_target arpt_mangle_reg __read_mostly = {
762 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
763 index 70e891a..fa6f032 100644
764 --- a/net/ipv6/ip6_tunnel.c
765 +++ b/net/ipv6/ip6_tunnel.c
766 @@ -57,6 +57,7 @@
767 MODULE_AUTHOR("Ville Nuorvala");
768 MODULE_DESCRIPTION("IPv6 tunneling device");
769 MODULE_LICENSE("GPL");
770 +MODULE_ALIAS_NETDEV("ip6tnl0");
771
772 #define IPV6_TLV_TEL_DST_SIZE 8
773
774 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
775 index 8c4d00c..b770061 100644
776 --- a/net/ipv6/sit.c
777 +++ b/net/ipv6/sit.c
778 @@ -1292,4 +1292,4 @@ static int __init sit_init(void)
779 module_init(sit_init);
780 module_exit(sit_cleanup);
781 MODULE_LICENSE("GPL");
782 -MODULE_ALIAS("sit0");
783 +MODULE_ALIAS_NETDEV("sit0");
784 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
785 index 5f5daa3..2a398b0 100644
786 --- a/net/netfilter/ipvs/ip_vs_ctl.c
787 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
788 @@ -810,9 +810,9 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
789 dest->u_threshold = udest->u_threshold;
790 dest->l_threshold = udest->l_threshold;
791
792 - spin_lock(&dest->dst_lock);
793 + spin_lock_bh(&dest->dst_lock);
794 ip_vs_dst_reset(dest);
795 - spin_unlock(&dest->dst_lock);
796 + spin_unlock_bh(&dest->dst_lock);
797
798 if (add)
799 ip_vs_new_estimator(&dest->stats);
800 diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
801 index b07393e..9181699 100644
802 --- a/net/netfilter/nf_log.c
803 +++ b/net/netfilter/nf_log.c
804 @@ -85,6 +85,8 @@ EXPORT_SYMBOL(nf_log_unregister);
805
806 int nf_log_bind_pf(u_int8_t pf, const struct nf_logger *logger)
807 {
808 + if (pf >= ARRAY_SIZE(nf_loggers))
809 + return -EINVAL;
810 mutex_lock(&nf_log_mutex);
811 if (__find_logger(pf, logger->name) == NULL) {
812 mutex_unlock(&nf_log_mutex);
813 @@ -98,6 +100,8 @@ EXPORT_SYMBOL(nf_log_bind_pf);
814
815 void nf_log_unbind_pf(u_int8_t pf)
816 {
817 + if (pf >= ARRAY_SIZE(nf_loggers))
818 + return;
819 mutex_lock(&nf_log_mutex);
820 rcu_assign_pointer(nf_loggers[pf], NULL);
821 mutex_unlock(&nf_log_mutex);
822 diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
823 index 18af38e..954b89a 100644
824 --- a/sound/pci/hda/patch_cirrus.c
825 +++ b/sound/pci/hda/patch_cirrus.c
826 @@ -1039,9 +1039,11 @@ static struct hda_verb cs_errata_init_verbs[] = {
827 {0x11, AC_VERB_SET_PROC_COEF, 0x0008},
828 {0x11, AC_VERB_SET_PROC_STATE, 0x00},
829
830 +#if 0 /* Don't to set to D3 as we are in power-up sequence */
831 {0x07, AC_VERB_SET_POWER_STATE, 0x03}, /* S/PDIF Rx: D3 */
832 {0x08, AC_VERB_SET_POWER_STATE, 0x03}, /* S/PDIF Tx: D3 */
833 /*{0x01, AC_VERB_SET_POWER_STATE, 0x03},*/ /* AFG: D3 This is already handled */
834 +#endif
835
836 {} /* terminator */
837 };
838 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
839 index 0bc6e4e..e61c87c 100644
840 --- a/sound/pci/hda/patch_realtek.c
841 +++ b/sound/pci/hda/patch_realtek.c
842 @@ -1127,11 +1127,8 @@ static void alc_automute_speaker(struct hda_codec *codec, int pinctl)
843 nid = spec->autocfg.hp_pins[i];
844 if (!nid)
845 break;
846 - if (snd_hda_jack_detect(codec, nid)) {
847 - spec->jack_present = 1;
848 - break;
849 - }
850 - alc_report_jack(codec, spec->autocfg.hp_pins[i]);
851 + alc_report_jack(codec, nid);
852 + spec->jack_present |= snd_hda_jack_detect(codec, nid);
853 }
854
855 mute = spec->jack_present ? HDA_AMP_MUTE : 0;
856 diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c
857 index a486670..1dce6d1 100644
858 --- a/sound/soc/codecs/wm9081.c
859 +++ b/sound/soc/codecs/wm9081.c
860 @@ -15,6 +15,7 @@
861 #include <linux/moduleparam.h>
862 #include <linux/init.h>
863 #include <linux/delay.h>
864 +#include <linux/device.h>
865 #include <linux/pm.h>
866 #include <linux/i2c.h>
867 #include <linux/platform_device.h>
868 @@ -1338,6 +1339,10 @@ static __devinit int wm9081_i2c_probe(struct i2c_client *i2c,
869 wm9081->control_type = SND_SOC_I2C;
870 wm9081->control_data = i2c;
871
872 + if (dev_get_platdata(&i2c->dev))
873 + memcpy(&wm9081->retune, dev_get_platdata(&i2c->dev),
874 + sizeof(wm9081->retune));
875 +
876 ret = snd_soc_register_codec(&i2c->dev,
877 &soc_codec_dev_wm9081, &wm9081_dai, 1);
878 if (ret < 0)