173 lines
4.6 KiB
Groff
173 lines
4.6 KiB
Groff
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
|
|
--- a/drivers/acpi/pci_irq.c
|
|
+++ b/drivers/acpi/pci_irq.c
|
|
@@ -435,6 +435,7 @@ acpi_pci_irq_enable (
|
|
/* Interrupt Line values above 0xF are forbidden */
|
|
if (dev->irq >= 0 && (dev->irq <= 0xF)) {
|
|
printk(" - using IRQ %d\n", dev->irq);
|
|
+ acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW);
|
|
return_VALUE(0);
|
|
}
|
|
else {
|
|
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
|
|
--- a/drivers/net/e1000/e1000_main.c
|
|
+++ b/drivers/net/e1000/e1000_main.c
|
|
@@ -2307,6 +2307,7 @@ e1000_xmit_frame(struct sk_buff *skb, st
|
|
tso = e1000_tso(adapter, skb);
|
|
if (tso < 0) {
|
|
dev_kfree_skb_any(skb);
|
|
+ spin_unlock_irqrestore(&adapter->tx_lock, flags);
|
|
return NETDEV_TX_OK;
|
|
}
|
|
|
|
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
|
|
--- a/drivers/pci/pci-driver.c
|
|
+++ b/drivers/pci/pci-driver.c
|
|
@@ -396,7 +396,7 @@ int pci_register_driver(struct pci_drive
|
|
/* FIXME, once all of the existing PCI drivers have been fixed to set
|
|
* the pci shutdown function, this test can go away. */
|
|
if (!drv->driver.shutdown)
|
|
- drv->driver.shutdown = pci_device_shutdown,
|
|
+ drv->driver.shutdown = pci_device_shutdown;
|
|
drv->driver.owner = drv->owner;
|
|
drv->driver.kobj.ktype = &pci_driver_kobj_type;
|
|
pci_init_dynids(&drv->dynids);
|
|
diff --git a/include/asm-i386/string.h b/include/asm-i386/string.h
|
|
--- a/include/asm-i386/string.h
|
|
+++ b/include/asm-i386/string.h
|
|
@@ -116,7 +116,8 @@ __asm__ __volatile__(
|
|
"orb $1,%%al\n"
|
|
"3:"
|
|
:"=a" (__res), "=&S" (d0), "=&D" (d1)
|
|
- :"1" (cs),"2" (ct));
|
|
+ :"1" (cs),"2" (ct)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -138,8 +139,9 @@ __asm__ __volatile__(
|
|
"3:\tsbbl %%eax,%%eax\n\t"
|
|
"orb $1,%%al\n"
|
|
"4:"
|
|
- :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
|
|
- :"1" (cs),"2" (ct),"3" (count));
|
|
+ :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
|
|
+ :"1" (cs),"2" (ct),"3" (count)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -158,7 +160,9 @@ __asm__ __volatile__(
|
|
"movl $1,%1\n"
|
|
"2:\tmovl %1,%0\n\t"
|
|
"decl %0"
|
|
- :"=a" (__res), "=&S" (d0) : "1" (s),"0" (c));
|
|
+ :"=a" (__res), "=&S" (d0)
|
|
+ :"1" (s),"0" (c)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -175,7 +179,9 @@ __asm__ __volatile__(
|
|
"leal -1(%%esi),%0\n"
|
|
"2:\ttestb %%al,%%al\n\t"
|
|
"jne 1b"
|
|
- :"=g" (__res), "=&S" (d0), "=&a" (d1) :"0" (0),"1" (s),"2" (c));
|
|
+ :"=g" (__res), "=&S" (d0), "=&a" (d1)
|
|
+ :"0" (0),"1" (s),"2" (c)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -189,7 +195,9 @@ __asm__ __volatile__(
|
|
"scasb\n\t"
|
|
"notl %0\n\t"
|
|
"decl %0"
|
|
- :"=c" (__res), "=&D" (d0) :"1" (s),"a" (0), "0" (0xffffffffu));
|
|
+ :"=c" (__res), "=&D" (d0)
|
|
+ :"1" (s),"a" (0), "0" (0xffffffffu)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -333,7 +341,9 @@ __asm__ __volatile__(
|
|
"je 1f\n\t"
|
|
"movl $1,%0\n"
|
|
"1:\tdecl %0"
|
|
- :"=D" (__res), "=&c" (d0) : "a" (c),"0" (cs),"1" (count));
|
|
+ :"=D" (__res), "=&c" (d0)
|
|
+ :"a" (c),"0" (cs),"1" (count)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
|
|
@@ -369,7 +379,7 @@ __asm__ __volatile__(
|
|
"je 2f\n\t"
|
|
"stosb\n"
|
|
"2:"
|
|
- : "=&c" (d0), "=&D" (d1)
|
|
+ :"=&c" (d0), "=&D" (d1)
|
|
:"a" (c), "q" (count), "0" (count/4), "1" ((long) s)
|
|
:"memory");
|
|
return (s);
|
|
@@ -392,7 +402,8 @@ __asm__ __volatile__(
|
|
"jne 1b\n"
|
|
"3:\tsubl %2,%0"
|
|
:"=a" (__res), "=&d" (d0)
|
|
- :"c" (s),"1" (count));
|
|
+ :"c" (s),"1" (count)
|
|
+ :"memory");
|
|
return __res;
|
|
}
|
|
/* end of additional stuff */
|
|
@@ -473,7 +484,8 @@ static inline void * memscan(void * addr
|
|
"dec %%edi\n"
|
|
"1:"
|
|
: "=D" (addr), "=c" (size)
|
|
- : "0" (addr), "1" (size), "a" (c));
|
|
+ : "0" (addr), "1" (size), "a" (c)
|
|
+ : "memory");
|
|
return addr;
|
|
}
|
|
|
|
diff --git a/mm/memory.c b/mm/memory.c
|
|
--- a/mm/memory.c
|
|
+++ b/mm/memory.c
|
|
@@ -1164,7 +1164,7 @@ int remap_pfn_range(struct vm_area_struc
|
|
{
|
|
pgd_t *pgd;
|
|
unsigned long next;
|
|
- unsigned long end = addr + size;
|
|
+ unsigned long end = addr + PAGE_ALIGN(size);
|
|
struct mm_struct *mm = vma->vm_mm;
|
|
int err;
|
|
|
|
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
|
|
--- a/net/netlink/af_netlink.c
|
|
+++ b/net/netlink/af_netlink.c
|
|
@@ -315,8 +315,8 @@ err:
|
|
static void netlink_remove(struct sock *sk)
|
|
{
|
|
netlink_table_grab();
|
|
- nl_table[sk->sk_protocol].hash.entries--;
|
|
- sk_del_node_init(sk);
|
|
+ if (sk_del_node_init(sk))
|
|
+ nl_table[sk->sk_protocol].hash.entries--;
|
|
if (nlk_sk(sk)->groups)
|
|
__sk_del_bind_node(sk);
|
|
netlink_table_ungrab();
|
|
@@ -429,7 +429,12 @@ retry:
|
|
err = netlink_insert(sk, pid);
|
|
if (err == -EADDRINUSE)
|
|
goto retry;
|
|
- return 0;
|
|
+
|
|
+ /* If 2 threads race to autobind, that is fine. */
|
|
+ if (err == -EBUSY)
|
|
+ err = 0;
|
|
+
|
|
+ return err;
|
|
}
|
|
|
|
static inline int netlink_capable(struct socket *sock, unsigned int flag)
|