1 |
Author: dsd |
2 |
Date: 2008-05-02 16:53:32 +0000 (Fri, 02 May 2008) |
3 |
New Revision: 1300 |
4 |
|
5 |
Added: |
6 |
genpatches-2.6/trunk/2.6.24/1005_linux-2.6.24.6.patch |
7 |
Modified: |
8 |
genpatches-2.6/trunk/2.6.24/0000_README |
9 |
Log: |
10 |
Linux 2.6.24.6 |
11 |
|
12 |
Modified: genpatches-2.6/trunk/2.6.24/0000_README |
13 |
=================================================================== |
14 |
--- genpatches-2.6/trunk/2.6.24/0000_README 2008-04-28 14:04:17 UTC (rev 1299) |
15 |
+++ genpatches-2.6/trunk/2.6.24/0000_README 2008-05-02 16:53:32 UTC (rev 1300) |
16 |
@@ -59,6 +59,10 @@ |
17 |
From: http://www.kernel.org |
18 |
Desc: Linux 2.6.24.5 |
19 |
|
20 |
+Patch: 1005_linux-2.6.24.6.patch |
21 |
+From: http://www.kernel.org |
22 |
+Desc: Linux 2.6.24.6 |
23 |
+ |
24 |
Patch: 2100_sd-sr-medium-detection.patch |
25 |
From: http://bugs.gentoo.org/196879 |
26 |
Desc: Add early medium-not-present detection in sr/sd drivers |
27 |
|
28 |
Added: genpatches-2.6/trunk/2.6.24/1005_linux-2.6.24.6.patch |
29 |
=================================================================== |
30 |
--- genpatches-2.6/trunk/2.6.24/1005_linux-2.6.24.6.patch (rev 0) |
31 |
+++ genpatches-2.6/trunk/2.6.24/1005_linux-2.6.24.6.patch 2008-05-02 16:53:32 UTC (rev 1300) |
32 |
@@ -0,0 +1,262 @@ |
33 |
+diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c |
34 |
+index 232fdeb..9994c52 100644 |
35 |
+--- a/arch/x86/kernel/io_apic_32.c |
36 |
++++ b/arch/x86/kernel/io_apic_32.c |
37 |
+@@ -2478,6 +2478,7 @@ void destroy_irq(unsigned int irq) |
38 |
+ dynamic_irq_cleanup(irq); |
39 |
+ |
40 |
+ spin_lock_irqsave(&vector_lock, flags); |
41 |
++ clear_bit(irq_vector[irq], used_vectors); |
42 |
+ irq_vector[irq] = 0; |
43 |
+ spin_unlock_irqrestore(&vector_lock, flags); |
44 |
+ } |
45 |
+diff --git a/drivers/isdn/capi/capidrv.c b/drivers/isdn/capi/capidrv.c |
46 |
+index 48c1775..cb42b69 100644 |
47 |
+--- a/drivers/isdn/capi/capidrv.c |
48 |
++++ b/drivers/isdn/capi/capidrv.c |
49 |
+@@ -2332,13 +2332,14 @@ static int __init capidrv_init(void) |
50 |
+ |
51 |
+ static void __exit capidrv_exit(void) |
52 |
+ { |
53 |
+- char rev[10]; |
54 |
++ char rev[32]; |
55 |
+ char *p; |
56 |
+ |
57 |
+ if ((p = strchr(revision, ':')) != 0) { |
58 |
+- strcpy(rev, p + 1); |
59 |
+- p = strchr(rev, '$'); |
60 |
+- *p = 0; |
61 |
++ strncpy(rev, p + 1, sizeof(rev)); |
62 |
++ rev[sizeof(rev)-1] = 0; |
63 |
++ if ((p = strchr(rev, '$')) != 0) |
64 |
++ *p = 0; |
65 |
+ } else { |
66 |
+ strcpy(rev, " ??? "); |
67 |
+ } |
68 |
+diff --git a/drivers/isdn/i4l/isdn_net.c b/drivers/isdn/i4l/isdn_net.c |
69 |
+index ced83c2..ef1a300 100644 |
70 |
+--- a/drivers/isdn/i4l/isdn_net.c |
71 |
++++ b/drivers/isdn/i4l/isdn_net.c |
72 |
+@@ -2010,6 +2010,7 @@ isdn_net_init(struct net_device *ndev) |
73 |
+ ndev->flags = IFF_NOARP|IFF_POINTOPOINT; |
74 |
+ ndev->type = ARPHRD_ETHER; |
75 |
+ ndev->addr_len = ETH_ALEN; |
76 |
++ ndev->validate_addr = NULL; |
77 |
+ |
78 |
+ /* for clients with MPPP maybe higher values better */ |
79 |
+ ndev->tx_queue_len = 30; |
80 |
+diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c |
81 |
+index a4eb6a8..0ff3e4c 100644 |
82 |
+--- a/drivers/media/video/cx88/cx88-cards.c |
83 |
++++ b/drivers/media/video/cx88/cx88-cards.c |
84 |
+@@ -1349,6 +1349,10 @@ static const struct cx88_board cx88_boards[] = { |
85 |
+ }}, |
86 |
+ /* fixme: Add radio support */ |
87 |
+ .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, |
88 |
++ .radio = { |
89 |
++ .type = CX88_RADIO, |
90 |
++ .gpio0 = 0xe780, |
91 |
++ }, |
92 |
+ }, |
93 |
+ [CX88_BOARD_ADSTECH_PTV_390] = { |
94 |
+ .name = "ADS Tech Instant Video PCI", |
95 |
+diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c |
96 |
+index fd6826f..da9a10e 100644 |
97 |
+--- a/drivers/media/video/ivtv/ivtv-ioctl.c |
98 |
++++ b/drivers/media/video/ivtv/ivtv-ioctl.c |
99 |
+@@ -727,7 +727,8 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file *filp, unsigned int cmd, void |
100 |
+ |
101 |
+ memset(vcap, 0, sizeof(*vcap)); |
102 |
+ strcpy(vcap->driver, IVTV_DRIVER_NAME); /* driver name */ |
103 |
+- strcpy(vcap->card, itv->card_name); /* card type */ |
104 |
++ strncpy(vcap->card, itv->card_name, |
105 |
++ sizeof(vcap->card)-1); /* card type */ |
106 |
+ strcpy(vcap->bus_info, pci_name(itv->dev)); /* bus info... */ |
107 |
+ vcap->version = IVTV_DRIVER_VERSION; /* version */ |
108 |
+ vcap->capabilities = itv->v4l2_cap; /* capabilities */ |
109 |
+diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c |
110 |
+index 21230c9..fe5be1b 100644 |
111 |
+--- a/drivers/net/tehuti.c |
112 |
++++ b/drivers/net/tehuti.c |
113 |
+@@ -625,6 +625,12 @@ static void __init bdx_firmware_endianess(void) |
114 |
+ s_firmLoad[i] = CPU_CHIP_SWAP32(s_firmLoad[i]); |
115 |
+ } |
116 |
+ |
117 |
++static int bdx_range_check(struct bdx_priv *priv, u32 offset) |
118 |
++{ |
119 |
++ return (offset > (u32) (BDX_REGS_SIZE / priv->nic->port_num)) ? |
120 |
++ -EINVAL : 0; |
121 |
++} |
122 |
++ |
123 |
+ static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) |
124 |
+ { |
125 |
+ struct bdx_priv *priv = ndev->priv; |
126 |
+@@ -643,9 +649,15 @@ static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) |
127 |
+ DBG("%d 0x%x 0x%x\n", data[0], data[1], data[2]); |
128 |
+ } |
129 |
+ |
130 |
++ if (!capable(CAP_NET_ADMIN)) |
131 |
++ return -EPERM; |
132 |
++ |
133 |
+ switch (data[0]) { |
134 |
+ |
135 |
+ case BDX_OP_READ: |
136 |
++ error = bdx_range_check(priv, data[1]); |
137 |
++ if (error < 0) |
138 |
++ return error; |
139 |
+ data[2] = READ_REG(priv, data[1]); |
140 |
+ DBG("read_reg(0x%x)=0x%x (dec %d)\n", data[1], data[2], |
141 |
+ data[2]); |
142 |
+@@ -655,6 +667,9 @@ static int bdx_ioctl_priv(struct net_device *ndev, struct ifreq *ifr, int cmd) |
143 |
+ break; |
144 |
+ |
145 |
+ case BDX_OP_WRITE: |
146 |
++ error = bdx_range_check(priv, data[1]); |
147 |
++ if (error < 0) |
148 |
++ return error; |
149 |
+ WRITE_REG(priv, data[1], data[2]); |
150 |
+ DBG("write_reg(0x%x, 0x%x)\n", data[1], data[2]); |
151 |
+ break; |
152 |
+diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c |
153 |
+index 9e732bf..ba7935d 100644 |
154 |
+--- a/drivers/usb/gadget/ether.c |
155 |
++++ b/drivers/usb/gadget/ether.c |
156 |
+@@ -1561,6 +1561,7 @@ done_set_intf: |
157 |
+ memcpy(req->buf, buf, n); |
158 |
+ req->complete = rndis_response_complete; |
159 |
+ rndis_free_response(dev->rndis_config, buf); |
160 |
++ value = n; |
161 |
+ } |
162 |
+ /* else stalls ... spec says to avoid that */ |
163 |
+ } |
164 |
+diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c |
165 |
+index 497e29a..d7fae72 100644 |
166 |
+--- a/drivers/usb/serial/usb-serial.c |
167 |
++++ b/drivers/usb/serial/usb-serial.c |
168 |
+@@ -844,6 +844,7 @@ int usb_serial_probe(struct usb_interface *interface, |
169 |
+ serial->num_interrupt_in = num_interrupt_in; |
170 |
+ serial->num_interrupt_out = num_interrupt_out; |
171 |
+ |
172 |
++#if 0 |
173 |
+ /* check that the device meets the driver's requirements */ |
174 |
+ if ((type->num_interrupt_in != NUM_DONT_CARE && |
175 |
+ type->num_interrupt_in != num_interrupt_in) |
176 |
+@@ -857,6 +858,7 @@ int usb_serial_probe(struct usb_interface *interface, |
177 |
+ kfree(serial); |
178 |
+ return -EIO; |
179 |
+ } |
180 |
++#endif |
181 |
+ |
182 |
+ /* found all that we need */ |
183 |
+ dev_info(&interface->dev, "%s converter detected\n", |
184 |
+diff --git a/fs/dnotify.c b/fs/dnotify.c |
185 |
+index 28d01ed..eaecc4c 100644 |
186 |
+--- a/fs/dnotify.c |
187 |
++++ b/fs/dnotify.c |
188 |
+@@ -20,6 +20,7 @@ |
189 |
+ #include <linux/init.h> |
190 |
+ #include <linux/spinlock.h> |
191 |
+ #include <linux/slab.h> |
192 |
++#include <linux/file.h> |
193 |
+ |
194 |
+ int dir_notify_enable __read_mostly = 1; |
195 |
+ |
196 |
+@@ -66,6 +67,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) |
197 |
+ struct dnotify_struct **prev; |
198 |
+ struct inode *inode; |
199 |
+ fl_owner_t id = current->files; |
200 |
++ struct file *f; |
201 |
+ int error = 0; |
202 |
+ |
203 |
+ if ((arg & ~DN_MULTISHOT) == 0) { |
204 |
+@@ -92,6 +94,15 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) |
205 |
+ prev = &odn->dn_next; |
206 |
+ } |
207 |
+ |
208 |
++ rcu_read_lock(); |
209 |
++ f = fcheck(fd); |
210 |
++ rcu_read_unlock(); |
211 |
++ /* we'd lost the race with close(), sod off silently */ |
212 |
++ /* note that inode->i_lock prevents reordering problems |
213 |
++ * between accesses to descriptor table and ->i_dnotify */ |
214 |
++ if (f != filp) |
215 |
++ goto out_free; |
216 |
++ |
217 |
+ error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0); |
218 |
+ if (error) |
219 |
+ goto out_free; |
220 |
+diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c |
221 |
+index a1db918..4c895f3 100644 |
222 |
+--- a/fs/jffs2/erase.c |
223 |
++++ b/fs/jffs2/erase.c |
224 |
+@@ -419,9 +419,6 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb |
225 |
+ if (jffs2_write_nand_cleanmarker(c, jeb)) |
226 |
+ goto filebad; |
227 |
+ } |
228 |
+- |
229 |
+- /* Everything else got zeroed before the erase */ |
230 |
+- jeb->free_size = c->sector_size; |
231 |
+ } else { |
232 |
+ |
233 |
+ struct kvec vecs[1]; |
234 |
+@@ -449,18 +446,19 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb |
235 |
+ |
236 |
+ goto filebad; |
237 |
+ } |
238 |
+- |
239 |
+- /* Everything else got zeroed before the erase */ |
240 |
+- jeb->free_size = c->sector_size; |
241 |
+- /* FIXME Special case for cleanmarker in empty block */ |
242 |
+- jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); |
243 |
+ } |
244 |
++ /* Everything else got zeroed before the erase */ |
245 |
++ jeb->free_size = c->sector_size; |
246 |
+ |
247 |
+ down(&c->erase_free_sem); |
248 |
+ spin_lock(&c->erase_completion_lock); |
249 |
++ |
250 |
+ c->erasing_size -= c->sector_size; |
251 |
+- c->free_size += jeb->free_size; |
252 |
+- c->used_size += jeb->used_size; |
253 |
++ c->free_size += c->sector_size; |
254 |
++ |
255 |
++ /* Account for cleanmarker now, if it's in-band */ |
256 |
++ if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) |
257 |
++ jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); |
258 |
+ |
259 |
+ jffs2_dbg_acct_sanity_check_nolock(c,jeb); |
260 |
+ jffs2_dbg_acct_paranoia_check_nolock(c, jeb); |
261 |
+diff --git a/fs/splice.c b/fs/splice.c |
262 |
+index e313478..109153c 100644 |
263 |
+--- a/fs/splice.c |
264 |
++++ b/fs/splice.c |
265 |
+@@ -314,7 +314,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, |
266 |
+ break; |
267 |
+ |
268 |
+ error = add_to_page_cache_lru(page, mapping, index, |
269 |
+- GFP_KERNEL); |
270 |
++ mapping_gfp_mask(mapping)); |
271 |
+ if (unlikely(error)) { |
272 |
+ page_cache_release(page); |
273 |
+ if (error == -EEXIST) |
274 |
+diff --git a/include/net/tcp.h b/include/net/tcp.h |
275 |
+index cb5b033..fbc4959 100644 |
276 |
+--- a/include/net/tcp.h |
277 |
++++ b/include/net/tcp.h |
278 |
+@@ -775,11 +775,14 @@ extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh); |
279 |
+ extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst); |
280 |
+ |
281 |
+ /* Slow start with delack produces 3 packets of burst, so that |
282 |
+- * it is safe "de facto". |
283 |
++ * it is safe "de facto". This will be the default - same as |
284 |
++ * the default reordering threshold - but if reordering increases, |
285 |
++ * we must be able to allow cwnd to burst at least this much in order |
286 |
++ * to not pull it back when holes are filled. |
287 |
+ */ |
288 |
+ static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp) |
289 |
+ { |
290 |
+- return 3; |
291 |
++ return tp->reordering; |
292 |
+ } |
293 |
+ |
294 |
+ /* RFC2861 Check whether we are limited by application or congestion window |
295 |
|
296 |
-- |
297 |
gentoo-commits@l.g.o mailing list |