Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0169-3.4.70-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2334 - (hide annotations) (download)
Thu Dec 12 08:43:27 2013 UTC (10 years, 5 months ago) by niro
File size: 12689 byte(s)
-linux-3.4.70
1 niro 2334 diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
2     index 650d5923..94b0650e 100644
3     --- a/arch/arm/lib/memset.S
4     +++ b/arch/arm/lib/memset.S
5     @@ -14,27 +14,15 @@
6    
7     .text
8     .align 5
9     - .word 0
10     -
11     -1: subs r2, r2, #4 @ 1 do we have enough
12     - blt 5f @ 1 bytes to align with?
13     - cmp r3, #2 @ 1
14     - strltb r1, [r0], #1 @ 1
15     - strleb r1, [r0], #1 @ 1
16     - strb r1, [r0], #1 @ 1
17     - add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
18     -/*
19     - * The pointer is now aligned and the length is adjusted. Try doing the
20     - * memset again.
21     - */
22    
23     ENTRY(memset)
24     ands r3, r0, #3 @ 1 unaligned?
25     - bne 1b @ 1
26     + mov ip, r0 @ preserve r0 as return value
27     + bne 6f @ 1
28     /*
29     - * we know that the pointer in r0 is aligned to a word boundary.
30     + * we know that the pointer in ip is aligned to a word boundary.
31     */
32     - orr r1, r1, r1, lsl #8
33     +1: orr r1, r1, r1, lsl #8
34     orr r1, r1, r1, lsl #16
35     mov r3, r1
36     cmp r2, #16
37     @@ -43,29 +31,28 @@ ENTRY(memset)
38     #if ! CALGN(1)+0
39    
40     /*
41     - * We need an extra register for this loop - save the return address and
42     - * use the LR
43     + * We need 2 extra registers for this loop - use r8 and the LR
44     */
45     - str lr, [sp, #-4]!
46     - mov ip, r1
47     + stmfd sp!, {r8, lr}
48     + mov r8, r1
49     mov lr, r1
50    
51     2: subs r2, r2, #64
52     - stmgeia r0!, {r1, r3, ip, lr} @ 64 bytes at a time.
53     - stmgeia r0!, {r1, r3, ip, lr}
54     - stmgeia r0!, {r1, r3, ip, lr}
55     - stmgeia r0!, {r1, r3, ip, lr}
56     + stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
57     + stmgeia ip!, {r1, r3, r8, lr}
58     + stmgeia ip!, {r1, r3, r8, lr}
59     + stmgeia ip!, {r1, r3, r8, lr}
60     bgt 2b
61     - ldmeqfd sp!, {pc} @ Now <64 bytes to go.
62     + ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
63     /*
64     * No need to correct the count; we're only testing bits from now on
65     */
66     tst r2, #32
67     - stmneia r0!, {r1, r3, ip, lr}
68     - stmneia r0!, {r1, r3, ip, lr}
69     + stmneia ip!, {r1, r3, r8, lr}
70     + stmneia ip!, {r1, r3, r8, lr}
71     tst r2, #16
72     - stmneia r0!, {r1, r3, ip, lr}
73     - ldr lr, [sp], #4
74     + stmneia ip!, {r1, r3, r8, lr}
75     + ldmfd sp!, {r8, lr}
76    
77     #else
78    
79     @@ -74,54 +61,63 @@ ENTRY(memset)
80     * whole cache lines at once.
81     */
82    
83     - stmfd sp!, {r4-r7, lr}
84     + stmfd sp!, {r4-r8, lr}
85     mov r4, r1
86     mov r5, r1
87     mov r6, r1
88     mov r7, r1
89     - mov ip, r1
90     + mov r8, r1
91     mov lr, r1
92    
93     cmp r2, #96
94     - tstgt r0, #31
95     + tstgt ip, #31
96     ble 3f
97    
98     - and ip, r0, #31
99     - rsb ip, ip, #32
100     - sub r2, r2, ip
101     - movs ip, ip, lsl #(32 - 4)
102     - stmcsia r0!, {r4, r5, r6, r7}
103     - stmmiia r0!, {r4, r5}
104     - tst ip, #(1 << 30)
105     - mov ip, r1
106     - strne r1, [r0], #4
107     + and r8, ip, #31
108     + rsb r8, r8, #32
109     + sub r2, r2, r8
110     + movs r8, r8, lsl #(32 - 4)
111     + stmcsia ip!, {r4, r5, r6, r7}
112     + stmmiia ip!, {r4, r5}
113     + tst r8, #(1 << 30)
114     + mov r8, r1
115     + strne r1, [ip], #4
116    
117     3: subs r2, r2, #64
118     - stmgeia r0!, {r1, r3-r7, ip, lr}
119     - stmgeia r0!, {r1, r3-r7, ip, lr}
120     + stmgeia ip!, {r1, r3-r8, lr}
121     + stmgeia ip!, {r1, r3-r8, lr}
122     bgt 3b
123     - ldmeqfd sp!, {r4-r7, pc}
124     + ldmeqfd sp!, {r4-r8, pc}
125    
126     tst r2, #32
127     - stmneia r0!, {r1, r3-r7, ip, lr}
128     + stmneia ip!, {r1, r3-r8, lr}
129     tst r2, #16
130     - stmneia r0!, {r4-r7}
131     - ldmfd sp!, {r4-r7, lr}
132     + stmneia ip!, {r4-r7}
133     + ldmfd sp!, {r4-r8, lr}
134    
135     #endif
136    
137     4: tst r2, #8
138     - stmneia r0!, {r1, r3}
139     + stmneia ip!, {r1, r3}
140     tst r2, #4
141     - strne r1, [r0], #4
142     + strne r1, [ip], #4
143     /*
144     * When we get here, we've got less than 4 bytes to zero. We
145     * may have an unaligned pointer as well.
146     */
147     5: tst r2, #2
148     - strneb r1, [r0], #1
149     - strneb r1, [r0], #1
150     + strneb r1, [ip], #1
151     + strneb r1, [ip], #1
152     tst r2, #1
153     - strneb r1, [r0], #1
154     + strneb r1, [ip], #1
155     mov pc, lr
156     +
157     +6: subs r2, r2, #4 @ 1 do we have enough
158     + blt 5b @ 1 bytes to align with?
159     + cmp r3, #2 @ 1
160     + strltb r1, [ip], #1 @ 1
161     + strleb r1, [ip], #1 @ 1
162     + strb r1, [ip], #1 @ 1
163     + add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
164     + b 1b
165     ENDPROC(memset)
166     diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
167     index 9d7f1723..093bf0a2 100644
168     --- a/drivers/net/xen-netback/common.h
169     +++ b/drivers/net/xen-netback/common.h
170     @@ -88,6 +88,7 @@ struct xenvif {
171     unsigned long credit_usec;
172     unsigned long remaining_credit;
173     struct timer_list credit_timeout;
174     + u64 credit_window_start;
175    
176     /* Statistics */
177     unsigned long rx_gso_checksum_fixup;
178     diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
179     index 221f4265..cfaaf685 100644
180     --- a/drivers/net/xen-netback/interface.c
181     +++ b/drivers/net/xen-netback/interface.c
182     @@ -273,8 +273,7 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
183     vif->credit_bytes = vif->remaining_credit = ~0UL;
184     vif->credit_usec = 0UL;
185     init_timer(&vif->credit_timeout);
186     - /* Initialize 'expires' now: it's used to track the credit window. */
187     - vif->credit_timeout.expires = jiffies;
188     + vif->credit_window_start = get_jiffies_64();
189    
190     dev->netdev_ops = &xenvif_netdev_ops;
191     dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
192     diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
193     index 0d22cff0..d8ffbf84 100644
194     --- a/drivers/net/xen-netback/netback.c
195     +++ b/drivers/net/xen-netback/netback.c
196     @@ -1197,9 +1197,8 @@ out:
197    
198     static bool tx_credit_exceeded(struct xenvif *vif, unsigned size)
199     {
200     - unsigned long now = jiffies;
201     - unsigned long next_credit =
202     - vif->credit_timeout.expires +
203     + u64 now = get_jiffies_64();
204     + u64 next_credit = vif->credit_window_start +
205     msecs_to_jiffies(vif->credit_usec / 1000);
206    
207     /* Timer could already be pending in rare cases. */
208     @@ -1207,8 +1206,8 @@ static bool tx_credit_exceeded(struct xenvif *vif, unsigned size)
209     return true;
210    
211     /* Passed the point where we can replenish credit? */
212     - if (time_after_eq(now, next_credit)) {
213     - vif->credit_timeout.expires = now;
214     + if (time_after_eq64(now, next_credit)) {
215     + vif->credit_window_start = now;
216     tx_add_credit(vif);
217     }
218    
219     @@ -1220,6 +1219,7 @@ static bool tx_credit_exceeded(struct xenvif *vif, unsigned size)
220     tx_credit_callback;
221     mod_timer(&vif->credit_timeout,
222     next_credit);
223     + vif->credit_window_start = next_credit;
224    
225     return true;
226     }
227     diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
228     index 54fc9880..21b9ed1d 100644
229     --- a/drivers/pci/pci-driver.c
230     +++ b/drivers/pci/pci-driver.c
231     @@ -680,6 +680,7 @@ static int pci_pm_suspend(struct device *dev)
232     goto Fixup;
233     }
234    
235     + pci_dev->state_saved = false;
236     if (pm->suspend) {
237     pci_power_t prev = pci_dev->current_state;
238     int error;
239     @@ -826,6 +827,7 @@ static int pci_pm_freeze(struct device *dev)
240     return 0;
241     }
242    
243     + pci_dev->state_saved = false;
244     if (pm->freeze) {
245     int error;
246    
247     @@ -914,6 +916,7 @@ static int pci_pm_poweroff(struct device *dev)
248     goto Fixup;
249     }
250    
251     + pci_dev->state_saved = false;
252     if (pm->poweroff) {
253     int error;
254    
255     @@ -1032,6 +1035,7 @@ static int pci_pm_runtime_suspend(struct device *dev)
256     if (!pm || !pm->runtime_suspend)
257     return -ENOSYS;
258    
259     + pci_dev->state_saved = false;
260     error = pm->runtime_suspend(dev);
261     suspend_report_result(pm->runtime_suspend, error);
262     if (error)
263     diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
264     index eea85daf..be76ebac 100644
265     --- a/drivers/pci/setup-res.c
266     +++ b/drivers/pci/setup-res.c
267     @@ -206,7 +206,8 @@ static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
268     return ret;
269     }
270    
271     -static int _pci_assign_resource(struct pci_dev *dev, int resno, int size, resource_size_t min_align)
272     +static int _pci_assign_resource(struct pci_dev *dev, int resno,
273     + resource_size_t size, resource_size_t min_align)
274     {
275     struct resource *res = dev->resource + resno;
276     struct pci_bus *bus;
277     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
278     index aa54fad7..82fce32c 100644
279     --- a/drivers/usb/core/hub.c
280     +++ b/drivers/usb/core/hub.c
281     @@ -1335,6 +1335,7 @@ static int hub_configure(struct usb_hub *hub,
282     return 0;
283    
284     fail:
285     + hdev->maxchild = 0;
286     dev_err (hub_dev, "config failed, %s (err %d)\n",
287     message, ret);
288     /* hub_disconnect() frees urb and descriptor */
289     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
290     index 57277bcc..a5477554 100644
291     --- a/drivers/usb/serial/option.c
292     +++ b/drivers/usb/serial/option.c
293     @@ -1391,6 +1391,23 @@ static const struct usb_device_id option_ids[] = {
294     .driver_info = (kernel_ulong_t)&net_intf2_blacklist },
295     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1426, 0xff, 0xff, 0xff), /* ZTE MF91 */
296     .driver_info = (kernel_ulong_t)&net_intf2_blacklist },
297     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) },
298     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) },
299     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },
300     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1545, 0xff, 0xff, 0xff) },
301     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1546, 0xff, 0xff, 0xff) },
302     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1547, 0xff, 0xff, 0xff) },
303     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1565, 0xff, 0xff, 0xff) },
304     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1566, 0xff, 0xff, 0xff) },
305     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1567, 0xff, 0xff, 0xff) },
306     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1589, 0xff, 0xff, 0xff) },
307     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1590, 0xff, 0xff, 0xff) },
308     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1591, 0xff, 0xff, 0xff) },
309     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1592, 0xff, 0xff, 0xff) },
310     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1594, 0xff, 0xff, 0xff) },
311     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1596, 0xff, 0xff, 0xff) },
312     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1598, 0xff, 0xff, 0xff) },
313     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1600, 0xff, 0xff, 0xff) },
314     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff,
315     0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_k3765_z_blacklist },
316     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
317     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
318     index 5dd96266..022940f0 100644
319     --- a/kernel/trace/trace.c
320     +++ b/kernel/trace/trace.c
321     @@ -590,9 +590,12 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
322     if (isspace(ch)) {
323     parser->buffer[parser->idx] = 0;
324     parser->cont = false;
325     - } else {
326     + } else if (parser->idx < parser->size - 1) {
327     parser->cont = true;
328     parser->buffer[parser->idx++] = ch;
329     + } else {
330     + ret = -EINVAL;
331     + goto out;
332     }
333    
334     *ppos += read;
335     diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
336     index 27747881..200707c6 100644
337     --- a/net/core/flow_dissector.c
338     +++ b/net/core/flow_dissector.c
339     @@ -35,7 +35,7 @@ again:
340     struct iphdr _iph;
341     ip:
342     iph = skb_header_pointer(skb, nhoff, sizeof(_iph), &_iph);
343     - if (!iph)
344     + if (!iph || iph->ihl < 5)
345     return false;
346    
347     if (ip_is_fragment(iph))
348     diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c
349     index 93faf6a3..4a8c55bd 100644
350     --- a/net/netfilter/nf_conntrack_sip.c
351     +++ b/net/netfilter/nf_conntrack_sip.c
352     @@ -1468,7 +1468,7 @@ static int sip_help_tcp(struct sk_buff *skb, unsigned int protoff,
353    
354     msglen = origlen = end - dptr;
355     if (msglen > datalen)
356     - return NF_DROP;
357     + return NF_ACCEPT;
358    
359     ret = process_sip_msg(skb, ct, dataoff, &dptr, &msglen);
360     if (ret != NF_ACCEPT)
361     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
362     index 02a6e3f4..ef917bf2 100644
363     --- a/sound/pci/hda/patch_hdmi.c
364     +++ b/sound/pci/hda/patch_hdmi.c
365     @@ -1282,23 +1282,34 @@ static int generic_hdmi_build_controls(struct hda_codec *codec)
366     return 0;
367     }
368    
369     -static int generic_hdmi_init(struct hda_codec *codec)
370     +static int generic_hdmi_init_per_pins(struct hda_codec *codec)
371     {
372     struct hdmi_spec *spec = codec->spec;
373     int pin_idx;
374    
375     for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
376     struct hdmi_spec_per_pin *per_pin = &spec->pins[pin_idx];
377     - hda_nid_t pin_nid = per_pin->pin_nid;
378     struct hdmi_eld *eld = &per_pin->sink_eld;
379    
380     - hdmi_init_pin(codec, pin_nid);
381     - snd_hda_jack_detect_enable(codec, pin_nid, pin_nid);
382     -
383     per_pin->codec = codec;
384     INIT_DELAYED_WORK(&per_pin->work, hdmi_repoll_eld);
385     snd_hda_eld_proc_new(codec, eld, pin_idx);
386     }
387     + return 0;
388     +}
389     +
390     +static int generic_hdmi_init(struct hda_codec *codec)
391     +{
392     + struct hdmi_spec *spec = codec->spec;
393     + int pin_idx;
394     +
395     + for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
396     + struct hdmi_spec_per_pin *per_pin = &spec->pins[pin_idx];
397     + hda_nid_t pin_nid = per_pin->pin_nid;
398     +
399     + hdmi_init_pin(codec, pin_nid);
400     + snd_hda_jack_detect_enable(codec, pin_nid, pin_nid);
401     + }
402     snd_hda_jack_report_sync(codec);
403     return 0;
404     }
405     @@ -1343,6 +1354,7 @@ static int patch_generic_hdmi(struct hda_codec *codec)
406     return -EINVAL;
407     }
408     codec->patch_ops = generic_hdmi_patch_ops;
409     + generic_hdmi_init_per_pins(codec);
410    
411     init_channel_allocations();
412