Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0148-2.6.27.49-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (hide annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 8 months ago) by niro
File size: 18086 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
2     index 34bc987..d8a4dc6 100644
3     --- a/arch/x86/kernel/pci-calgary_64.c
4     +++ b/arch/x86/kernel/pci-calgary_64.c
5     @@ -102,11 +102,16 @@ int use_calgary __read_mostly = 0;
6     #define PMR_SOFTSTOPFAULT 0x40000000
7     #define PMR_HARDSTOP 0x20000000
8    
9     -#define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */
10     -#define MAX_NUM_CHASSIS 8 /* max number of chassis */
11     -/* MAX_PHB_BUS_NUM is the maximal possible dev->bus->number */
12     -#define MAX_PHB_BUS_NUM (MAX_NUM_OF_PHBS * MAX_NUM_CHASSIS * 2)
13     -#define PHBS_PER_CALGARY 4
14     +/*
15     + * The maximum PHB bus number.
16     + * x3950M2 (rare): 8 chassis, 48 PHBs per chassis = 384
17     + * x3950M2: 4 chassis, 48 PHBs per chassis = 192
18     + * x3950 (PCIE): 8 chassis, 32 PHBs per chassis = 256
19     + * x3950 (PCIX): 8 chassis, 16 PHBs per chassis = 128
20     + */
21     +#define MAX_PHB_BUS_NUM 256
22     +
23     +#define PHBS_PER_CALGARY 4
24    
25     /* register offsets in Calgary's internal register space */
26     static const unsigned long tar_offsets[] = {
27     @@ -1092,8 +1097,6 @@ static int __init calgary_init_one(struct pci_dev *dev)
28     struct iommu_table *tbl;
29     int ret;
30    
31     - BUG_ON(dev->bus->number >= MAX_PHB_BUS_NUM);
32     -
33     bbar = busno_to_bbar(dev->bus->number);
34     ret = calgary_setup_tar(dev, bbar);
35     if (ret)
36     diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c
37     index 7495c52..e144ad8 100644
38     --- a/drivers/char/agp/amd64-agp.c
39     +++ b/drivers/char/agp/amd64-agp.c
40     @@ -491,6 +491,10 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
41     u8 cap_ptr;
42     int err;
43    
44     + /* The Highlander principle */
45     + if (agp_bridges_found)
46     + return -ENODEV;
47     +
48     cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
49     if (!cap_ptr)
50     return -ENODEV;
51     @@ -554,6 +558,8 @@ static void __devexit agp_amd64_remove(struct pci_dev *pdev)
52     amd64_aperture_sizes[bridge->aperture_size_idx].size);
53     agp_remove_bridge(bridge);
54     agp_put_bridge(bridge);
55     +
56     + agp_bridges_found--;
57     }
58    
59     #ifdef CONFIG_PM
60     @@ -701,6 +707,11 @@ static struct pci_device_id agp_amd64_pci_table[] = {
61    
62     MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
63    
64     +static DEFINE_PCI_DEVICE_TABLE(agp_amd64_pci_promisc_table) = {
65     + { PCI_DEVICE_CLASS(0, 0) },
66     + { }
67     +};
68     +
69     static struct pci_driver agp_amd64_pci_driver = {
70     .name = "agpgart-amd64",
71     .id_table = agp_amd64_pci_table,
72     @@ -725,7 +736,6 @@ int __init agp_amd64_init(void)
73     return err;
74    
75     if (agp_bridges_found == 0) {
76     - struct pci_dev *dev;
77     if (!agp_try_unsupported && !agp_try_unsupported_boot) {
78     printk(KERN_INFO PFX "No supported AGP bridge found.\n");
79     #ifdef MODULE
80     @@ -741,17 +751,10 @@ int __init agp_amd64_init(void)
81     return -ENODEV;
82    
83     /* Look for any AGP bridge */
84     - dev = NULL;
85     - err = -ENODEV;
86     - for_each_pci_dev(dev) {
87     - if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
88     - continue;
89     - /* Only one bridge supported right now */
90     - if (agp_amd64_probe(dev, NULL) == 0) {
91     - err = 0;
92     - break;
93     - }
94     - }
95     + agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table;
96     + err = driver_attach(&agp_amd64_pci_driver.driver);
97     + if (err == 0 && agp_bridges_found == 0)
98     + err = -ENODEV;
99     }
100     return err;
101     }
102     diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
103     index 2b8f439..a7f98c9 100644
104     --- a/drivers/hwmon/coretemp.c
105     +++ b/drivers/hwmon/coretemp.c
106     @@ -52,6 +52,7 @@ struct coretemp_data {
107     struct mutex update_lock;
108     const char *name;
109     u32 id;
110     + u16 core_id;
111     char valid; /* zero until following fields are valid */
112     unsigned long last_updated; /* in jiffies */
113     int temp;
114     @@ -74,7 +75,7 @@ static ssize_t show_name(struct device *dev, struct device_attribute
115     if (attr->index == SHOW_NAME)
116     ret = sprintf(buf, "%s\n", data->name);
117     else /* show label */
118     - ret = sprintf(buf, "Core %d\n", data->id);
119     + ret = sprintf(buf, "Core %d\n", data->core_id);
120     return ret;
121     }
122    
123     @@ -216,6 +217,9 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
124     }
125    
126     data->id = pdev->id;
127     +#ifdef CONFIG_SMP
128     + data->core_id = c->cpu_core_id;
129     +#endif
130     data->name = "coretemp";
131     mutex_init(&data->update_lock);
132    
133     @@ -313,6 +317,10 @@ struct pdev_entry {
134     struct list_head list;
135     struct platform_device *pdev;
136     unsigned int cpu;
137     +#ifdef CONFIG_SMP
138     + u16 phys_proc_id;
139     + u16 cpu_core_id;
140     +#endif
141     };
142    
143     static LIST_HEAD(pdev_list);
144     @@ -323,6 +331,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
145     int err;
146     struct platform_device *pdev;
147     struct pdev_entry *pdev_entry;
148     +#ifdef CONFIG_SMP
149     + struct cpuinfo_x86 *c = &cpu_data(cpu);
150     +#endif
151     +
152     + mutex_lock(&pdev_list_mutex);
153     +
154     +#ifdef CONFIG_SMP
155     + /* Skip second HT entry of each core */
156     + list_for_each_entry(pdev_entry, &pdev_list, list) {
157     + if (c->phys_proc_id == pdev_entry->phys_proc_id &&
158     + c->cpu_core_id == pdev_entry->cpu_core_id) {
159     + err = 0; /* Not an error */
160     + goto exit;
161     + }
162     + }
163     +#endif
164    
165     pdev = platform_device_alloc(DRVNAME, cpu);
166     if (!pdev) {
167     @@ -346,7 +370,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
168    
169     pdev_entry->pdev = pdev;
170     pdev_entry->cpu = cpu;
171     - mutex_lock(&pdev_list_mutex);
172     +#ifdef CONFIG_SMP
173     + pdev_entry->phys_proc_id = c->phys_proc_id;
174     + pdev_entry->cpu_core_id = c->cpu_core_id;
175     +#endif
176     list_add_tail(&pdev_entry->list, &pdev_list);
177     mutex_unlock(&pdev_list_mutex);
178    
179     @@ -357,6 +384,7 @@ exit_device_free:
180     exit_device_put:
181     platform_device_put(pdev);
182     exit:
183     + mutex_unlock(&pdev_list_mutex);
184     return err;
185     }
186    
187     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
188     index e9ca3cb..fb97c42 100644
189     --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
190     +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
191     @@ -1158,7 +1158,7 @@ static ssize_t create_child(struct device *dev,
192    
193     return ret ? ret : count;
194     }
195     -static DEVICE_ATTR(create_child, S_IWUGO, NULL, create_child);
196     +static DEVICE_ATTR(create_child, S_IWUSR, NULL, create_child);
197    
198     static ssize_t delete_child(struct device *dev,
199     struct device_attribute *attr,
200     @@ -1178,7 +1178,7 @@ static ssize_t delete_child(struct device *dev,
201     return ret ? ret : count;
202    
203     }
204     -static DEVICE_ATTR(delete_child, S_IWUGO, NULL, delete_child);
205     +static DEVICE_ATTR(delete_child, S_IWUSR, NULL, delete_child);
206    
207     int ipoib_add_pkey_attr(struct net_device *dev)
208     {
209     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
210     index 598d2e9..b91eb58 100644
211     --- a/drivers/net/bonding/bond_main.c
212     +++ b/drivers/net/bonding/bond_main.c
213     @@ -1705,6 +1705,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
214     case BOND_MODE_ALB:
215     new_slave->state = BOND_STATE_ACTIVE;
216     bond_set_slave_inactive_flags(new_slave);
217     + bond_select_active_slave(bond);
218     break;
219     default:
220     dprintk("This slave is always active in trunk mode\n");
221     diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c
222     index ec6b0af..5cbdd37 100644
223     --- a/drivers/net/cpmac.c
224     +++ b/drivers/net/cpmac.c
225     @@ -1174,7 +1174,8 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
226     if (netif_msg_drv(priv))
227     printk(KERN_ERR "%s: Could not attach to PHY\n",
228     dev->name);
229     - return PTR_ERR(priv->phy);
230     + rc = PTR_ERR(priv->phy);
231     + goto fail;
232     }
233    
234     if ((rc = register_netdev(dev))) {
235     diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
236     index aa9ff46..50e32df 100644
237     --- a/drivers/net/sky2.c
238     +++ b/drivers/net/sky2.c
239     @@ -688,11 +688,24 @@ static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port)
240     sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
241     }
242    
243     +/* Enable Rx/Tx */
244     +static void sky2_enable_rx_tx(struct sky2_port *sky2)
245     +{
246     + struct sky2_hw *hw = sky2->hw;
247     + unsigned port = sky2->port;
248     + u16 reg;
249     +
250     + reg = gma_read16(hw, port, GM_GP_CTRL);
251     + reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA;
252     + gma_write16(hw, port, GM_GP_CTRL, reg);
253     +}
254     +
255     /* Force a renegotiation */
256     static void sky2_phy_reinit(struct sky2_port *sky2)
257     {
258     spin_lock_bh(&sky2->phy_lock);
259     sky2_phy_init(sky2->hw, sky2->port);
260     + sky2_enable_rx_tx(sky2);
261     spin_unlock_bh(&sky2->phy_lock);
262     }
263    
264     @@ -1862,7 +1875,6 @@ static void sky2_link_up(struct sky2_port *sky2)
265     {
266     struct sky2_hw *hw = sky2->hw;
267     unsigned port = sky2->port;
268     - u16 reg;
269     static const char *fc_name[] = {
270     [FC_NONE] = "none",
271     [FC_TX] = "tx",
272     @@ -1870,10 +1882,7 @@ static void sky2_link_up(struct sky2_port *sky2)
273     [FC_BOTH] = "both",
274     };
275    
276     - /* enable Rx/Tx */
277     - reg = gma_read16(hw, port, GM_GP_CTRL);
278     - reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA;
279     - gma_write16(hw, port, GM_GP_CTRL, reg);
280     + sky2_enable_rx_tx(sky2);
281    
282     gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
283    
284     diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
285     index 3b4e55c..055e991 100644
286     --- a/drivers/net/wireless/hostap/hostap_cs.c
287     +++ b/drivers/net/wireless/hostap/hostap_cs.c
288     @@ -557,6 +557,7 @@ static int prism2_config(struct pcmcia_device *link)
289     config_info_t conf;
290     cistpl_cftable_entry_t dflt = { 0 };
291     struct hostap_cs_priv *hw_priv;
292     + unsigned long flags;
293    
294     PDEBUG(DEBUG_FLOW, "prism2_config()\n");
295    
296     @@ -688,6 +689,12 @@ static int prism2_config(struct pcmcia_device *link)
297     link->dev_node = &hw_priv->node;
298    
299     /*
300     + * Make sure the IRQ handler cannot proceed until at least
301     + * dev->base_addr is initialized.
302     + */
303     + spin_lock_irqsave(&local->irq_init_lock, flags);
304     +
305     + /*
306     * Allocate an interrupt line. Note that this does not assign a
307     * handler to the interrupt, unless the 'Handler' member of the
308     * irq structure is initialized.
309     @@ -712,6 +719,8 @@ static int prism2_config(struct pcmcia_device *link)
310     dev->irq = link->irq.AssignedIRQ;
311     dev->base_addr = link->io.BasePort1;
312    
313     + spin_unlock_irqrestore(&local->irq_init_lock, flags);
314     +
315     /* Finally, report what we've done */
316     printk(KERN_INFO "%s: index 0x%02x: ",
317     dev_info, link->conf.ConfigIndex);
318     @@ -742,6 +751,7 @@ static int prism2_config(struct pcmcia_device *link)
319     return ret;
320    
321     cs_failed:
322     + spin_unlock_irqrestore(&local->irq_init_lock, flags);
323     cs_error(link, last_fn, last_ret);
324    
325     failed:
326     diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
327     index 3153fe9..04b890f 100644
328     --- a/drivers/net/wireless/hostap/hostap_hw.c
329     +++ b/drivers/net/wireless/hostap/hostap_hw.c
330     @@ -2631,6 +2631,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
331     iface = netdev_priv(dev);
332     local = iface->local;
333    
334     + /* Detect early interrupt before driver is fully configued */
335     + spin_lock(&local->irq_init_lock);
336     + if (!dev->base_addr) {
337     + if (net_ratelimit()) {
338     + printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n",
339     + dev->name);
340     + }
341     + spin_unlock(&local->irq_init_lock);
342     + return IRQ_HANDLED;
343     + }
344     + spin_unlock(&local->irq_init_lock);
345     +
346     prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
347    
348     if (local->func->card_present && !local->func->card_present(local)) {
349     @@ -3187,6 +3199,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
350     spin_lock_init(&local->cmdlock);
351     spin_lock_init(&local->baplock);
352     spin_lock_init(&local->lock);
353     + spin_lock_init(&local->irq_init_lock);
354     mutex_init(&local->rid_bap_mtx);
355    
356     if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES)
357     diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
358     index a68f97c..1c986f2 100644
359     --- a/drivers/net/wireless/hostap/hostap_wlan.h
360     +++ b/drivers/net/wireless/hostap/hostap_wlan.h
361     @@ -653,7 +653,7 @@ struct local_info {
362     rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock
363     * when removing entries from the list.
364     * TX and RX paths can use read lock. */
365     - spinlock_t cmdlock, baplock, lock;
366     + spinlock_t cmdlock, baplock, lock, irq_init_lock;
367     struct mutex rid_bap_mtx;
368     u16 infofid; /* MAC buffer id for info frame */
369     /* txfid, intransmitfid, next_txtid, and next_alloc are protected by
370     diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
371     index a735526..a7b7da1 100644
372     --- a/drivers/scsi/aacraid/commctrl.c
373     +++ b/drivers/scsi/aacraid/commctrl.c
374     @@ -645,9 +645,9 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)
375     /* Does this really need to be GFP_DMA? */
376     p = kmalloc(usg->sg[i].count,GFP_KERNEL|__GFP_DMA);
377     if(!p) {
378     - kfree (usg);
379     - dprintk((KERN_DEBUG"aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n",
380     + dprintk((KERN_DEBUG "aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n",
381     usg->sg[i].count,i,usg->count));
382     + kfree(usg);
383     rcode = -ENOMEM;
384     goto cleanup;
385     }
386     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
387     index cff0c53..31a1668 100644
388     --- a/fs/cifs/cifssmb.c
389     +++ b/fs/cifs/cifssmb.c
390     @@ -1594,6 +1594,14 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
391     *nbytes = le16_to_cpu(pSMBr->CountHigh);
392     *nbytes = (*nbytes) << 16;
393     *nbytes += le16_to_cpu(pSMBr->Count);
394     +
395     + /*
396     + * Mask off high 16 bits when bytes written as returned by the
397     + * server is greater than bytes requested by the client. Some
398     + * OS/2 servers are known to set incorrect CountHigh values.
399     + */
400     + if (*nbytes > count)
401     + *nbytes &= 0xFFFF;
402     }
403    
404     cifs_buf_release(pSMB);
405     @@ -1679,6 +1687,14 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
406     *nbytes = le16_to_cpu(pSMBr->CountHigh);
407     *nbytes = (*nbytes) << 16;
408     *nbytes += le16_to_cpu(pSMBr->Count);
409     +
410     + /*
411     + * Mask off high 16 bits when bytes written as returned by the
412     + * server is greater than bytes requested by the client. OS/2
413     + * servers are known to set incorrect CountHigh values.
414     + */
415     + if (*nbytes > count)
416     + *nbytes &= 0xFFFF;
417     }
418    
419     /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
420     diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
421     index 3890cc2..52c72ea 100644
422     --- a/fs/cifs/sess.c
423     +++ b/fs/cifs/sess.c
424     @@ -482,15 +482,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
425    
426     /* calculate session key */
427     setup_ntlmv2_rsp(ses, v2_sess_key, nls_cp);
428     - if (first_time) /* should this be moved into common code
429     - with similar ntlmv2 path? */
430     - /* cifs_calculate_ntlmv2_mac_key(ses->server->mac_signing_key,
431     - response BB FIXME, v2_sess_key); */
432     -
433     - /* copy session key */
434     -
435     - /* memcpy(bcc_ptr, (char *)ntlm_session_key,LM2_SESS_KEY_SIZE);
436     - bcc_ptr += LM2_SESS_KEY_SIZE; */
437     + /* FIXME: calculate MAC key */
438     memcpy(bcc_ptr, (char *)v2_sess_key,
439     sizeof(struct ntlmv2_resp));
440     bcc_ptr += sizeof(struct ntlmv2_resp);
441     diff --git a/fs/ecryptfs/messaging.c b/fs/ecryptfs/messaging.c
442     index 1b5c200..517bd46 100644
443     --- a/fs/ecryptfs/messaging.c
444     +++ b/fs/ecryptfs/messaging.c
445     @@ -30,9 +30,9 @@ static struct mutex ecryptfs_msg_ctx_lists_mux;
446    
447     static struct hlist_head *ecryptfs_daemon_hash;
448     struct mutex ecryptfs_daemon_hash_mux;
449     -static int ecryptfs_hash_buckets;
450     +static int ecryptfs_hash_bits;
451     #define ecryptfs_uid_hash(uid) \
452     - hash_long((unsigned long)uid, ecryptfs_hash_buckets)
453     + hash_long((unsigned long)uid, ecryptfs_hash_bits)
454    
455     static u32 ecryptfs_msg_counter;
456     static struct ecryptfs_msg_ctx *ecryptfs_msg_ctx_arr;
457     @@ -599,18 +599,19 @@ int ecryptfs_init_messaging(unsigned int transport)
458     }
459     mutex_init(&ecryptfs_daemon_hash_mux);
460     mutex_lock(&ecryptfs_daemon_hash_mux);
461     - ecryptfs_hash_buckets = 1;
462     - while (ecryptfs_number_of_users >> ecryptfs_hash_buckets)
463     - ecryptfs_hash_buckets++;
464     + ecryptfs_hash_bits = 1;
465     + while (ecryptfs_number_of_users >> ecryptfs_hash_bits)
466     + ecryptfs_hash_bits++;
467     ecryptfs_daemon_hash = kmalloc((sizeof(struct hlist_head)
468     - * ecryptfs_hash_buckets), GFP_KERNEL);
469     + * (1 << ecryptfs_hash_bits)),
470     + GFP_KERNEL);
471     if (!ecryptfs_daemon_hash) {
472     rc = -ENOMEM;
473     printk(KERN_ERR "%s: Failed to allocate memory\n", __func__);
474     mutex_unlock(&ecryptfs_daemon_hash_mux);
475     goto out;
476     }
477     - for (i = 0; i < ecryptfs_hash_buckets; i++)
478     + for (i = 0; i < (1 << ecryptfs_hash_bits); i++)
479     INIT_HLIST_HEAD(&ecryptfs_daemon_hash[i]);
480     mutex_unlock(&ecryptfs_daemon_hash_mux);
481     ecryptfs_msg_ctx_arr = kmalloc((sizeof(struct ecryptfs_msg_ctx)
482     @@ -680,7 +681,7 @@ void ecryptfs_release_messaging(unsigned int transport)
483     int i;
484    
485     mutex_lock(&ecryptfs_daemon_hash_mux);
486     - for (i = 0; i < ecryptfs_hash_buckets; i++) {
487     + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) {
488     int rc;
489    
490     hlist_for_each_entry(daemon, elem,
491     diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h
492     index 408f743..a4cb9d1 100644
493     --- a/include/math-emu/op-common.h
494     +++ b/include/math-emu/op-common.h
495     @@ -793,7 +793,7 @@ do { \
496     X##_e -= (_FP_W_TYPE_SIZE - rsize); \
497     X##_e = rsize - X##_e - 1; \
498     \
499     - if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e) \
500     + if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs <= X##_e) \
501     __FP_FRAC_SRS_1(ur_, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);\
502     _FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize); \
503     if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0) \
504     diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c
505     index 44c8d65..1be1a6c 100644
506     --- a/net/ipv6/netfilter/ip6t_REJECT.c
507     +++ b/net/ipv6/netfilter/ip6t_REJECT.c
508     @@ -95,9 +95,11 @@ static void send_reset(struct sk_buff *oldskb)
509     fl.fl_ip_dport = otcph.source;
510     security_skb_classify_flow(oldskb, &fl);
511     dst = ip6_route_output(&init_net, NULL, &fl);
512     - if (dst == NULL)
513     + if (dst == NULL || dst->error) {
514     + dst_release(dst);
515     return;
516     - if (dst->error || xfrm_lookup(&dst, &fl, NULL, 0))
517     + }
518     + if (xfrm_lookup(&dst, &fl, NULL, 0))
519     return;
520    
521     hh_len = (dst->dev->hard_header_len + 15)&~15;
522     diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
523     index f05e36a..78480c2 100644
524     --- a/scripts/mod/modpost.c
525     +++ b/scripts/mod/modpost.c
526     @@ -1292,7 +1292,7 @@ static unsigned int *reloc_location(struct elf_info *elf,
527     int section = sechdr->sh_info;
528    
529     return (void *)elf->hdr + sechdrs[section].sh_offset +
530     - (r->r_offset - sechdrs[section].sh_addr);
531     + r->r_offset - sechdrs[section].sh_addr;
532     }
533    
534     static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)