Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8880093614 | |||
| 1b1f824632 | |||
| 1ef0867a52 | |||
| 2e8e121926 | |||
| 26b1062c23 | |||
| 986bd43014 | |||
| 906aa4d200 | |||
| 49bbb3966e | |||
| f5b3c54381 | |||
| df0112ae92 | |||
| fe3d5c8793 |
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 12
|
SUBLEVEL = 12
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = .2
|
||||||
NAME=Woozy Numbat
|
NAME=Woozy Numbat
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|||||||
@ -945,6 +945,13 @@ access_uarea (struct task_struct *child, unsigned long addr,
|
|||||||
*data = (pt->cr_ipsr & IPSR_MASK);
|
*data = (pt->cr_ipsr & IPSR_MASK);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case PT_AR_RSC:
|
||||||
|
if (write_access)
|
||||||
|
pt->ar_rsc = *data | (3 << 2); /* force PL3 */
|
||||||
|
else
|
||||||
|
*data = pt->ar_rsc;
|
||||||
|
return 0;
|
||||||
|
|
||||||
case PT_AR_RNAT:
|
case PT_AR_RNAT:
|
||||||
urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
|
urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
|
||||||
rnat_addr = (long) ia64_rse_rnat_addr((long *)
|
rnat_addr = (long) ia64_rse_rnat_addr((long *)
|
||||||
@ -996,9 +1003,6 @@ access_uarea (struct task_struct *child, unsigned long addr,
|
|||||||
case PT_AR_BSPSTORE:
|
case PT_AR_BSPSTORE:
|
||||||
ptr = pt_reg_addr(pt, ar_bspstore);
|
ptr = pt_reg_addr(pt, ar_bspstore);
|
||||||
break;
|
break;
|
||||||
case PT_AR_RSC:
|
|
||||||
ptr = pt_reg_addr(pt, ar_rsc);
|
|
||||||
break;
|
|
||||||
case PT_AR_UNAT:
|
case PT_AR_UNAT:
|
||||||
ptr = pt_reg_addr(pt, ar_unat);
|
ptr = pt_reg_addr(pt, ar_unat);
|
||||||
break;
|
break;
|
||||||
@ -1234,7 +1238,7 @@ ptrace_getregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
static long
|
static long
|
||||||
ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
||||||
{
|
{
|
||||||
unsigned long psr, ec, lc, rnat, bsp, cfm, nat_bits, val = 0;
|
unsigned long psr, rsc, ec, lc, rnat, bsp, cfm, nat_bits, val = 0;
|
||||||
struct unw_frame_info info;
|
struct unw_frame_info info;
|
||||||
struct switch_stack *sw;
|
struct switch_stack *sw;
|
||||||
struct ia64_fpreg fpval;
|
struct ia64_fpreg fpval;
|
||||||
@ -1267,7 +1271,7 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
/* app regs */
|
/* app regs */
|
||||||
|
|
||||||
retval |= __get_user(pt->ar_pfs, &ppr->ar[PT_AUR_PFS]);
|
retval |= __get_user(pt->ar_pfs, &ppr->ar[PT_AUR_PFS]);
|
||||||
retval |= __get_user(pt->ar_rsc, &ppr->ar[PT_AUR_RSC]);
|
retval |= __get_user(rsc, &ppr->ar[PT_AUR_RSC]);
|
||||||
retval |= __get_user(pt->ar_bspstore, &ppr->ar[PT_AUR_BSPSTORE]);
|
retval |= __get_user(pt->ar_bspstore, &ppr->ar[PT_AUR_BSPSTORE]);
|
||||||
retval |= __get_user(pt->ar_unat, &ppr->ar[PT_AUR_UNAT]);
|
retval |= __get_user(pt->ar_unat, &ppr->ar[PT_AUR_UNAT]);
|
||||||
retval |= __get_user(pt->ar_ccv, &ppr->ar[PT_AUR_CCV]);
|
retval |= __get_user(pt->ar_ccv, &ppr->ar[PT_AUR_CCV]);
|
||||||
@ -1365,6 +1369,7 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
retval |= __get_user(nat_bits, &ppr->nat);
|
retval |= __get_user(nat_bits, &ppr->nat);
|
||||||
|
|
||||||
retval |= access_uarea(child, PT_CR_IPSR, &psr, 1);
|
retval |= access_uarea(child, PT_CR_IPSR, &psr, 1);
|
||||||
|
retval |= access_uarea(child, PT_AR_RSC, &rsc, 1);
|
||||||
retval |= access_uarea(child, PT_AR_EC, &ec, 1);
|
retval |= access_uarea(child, PT_AR_EC, &ec, 1);
|
||||||
retval |= access_uarea(child, PT_AR_LC, &lc, 1);
|
retval |= access_uarea(child, PT_AR_LC, &lc, 1);
|
||||||
retval |= access_uarea(child, PT_AR_RNAT, &rnat, 1);
|
retval |= access_uarea(child, PT_AR_RNAT, &rnat, 1);
|
||||||
|
|||||||
@ -94,7 +94,7 @@ sys_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, long arg2,
|
|||||||
static long
|
static long
|
||||||
restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
|
restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
|
||||||
{
|
{
|
||||||
unsigned long ip, flags, nat, um, cfm;
|
unsigned long ip, flags, nat, um, cfm, rsc;
|
||||||
long err;
|
long err;
|
||||||
|
|
||||||
/* Always make any pending restarted system calls return -EINTR */
|
/* Always make any pending restarted system calls return -EINTR */
|
||||||
@ -106,7 +106,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
|
|||||||
err |= __get_user(ip, &sc->sc_ip); /* instruction pointer */
|
err |= __get_user(ip, &sc->sc_ip); /* instruction pointer */
|
||||||
err |= __get_user(cfm, &sc->sc_cfm);
|
err |= __get_user(cfm, &sc->sc_cfm);
|
||||||
err |= __get_user(um, &sc->sc_um); /* user mask */
|
err |= __get_user(um, &sc->sc_um); /* user mask */
|
||||||
err |= __get_user(scr->pt.ar_rsc, &sc->sc_ar_rsc);
|
err |= __get_user(rsc, &sc->sc_ar_rsc);
|
||||||
err |= __get_user(scr->pt.ar_unat, &sc->sc_ar_unat);
|
err |= __get_user(scr->pt.ar_unat, &sc->sc_ar_unat);
|
||||||
err |= __get_user(scr->pt.ar_fpsr, &sc->sc_ar_fpsr);
|
err |= __get_user(scr->pt.ar_fpsr, &sc->sc_ar_fpsr);
|
||||||
err |= __get_user(scr->pt.ar_pfs, &sc->sc_ar_pfs);
|
err |= __get_user(scr->pt.ar_pfs, &sc->sc_ar_pfs);
|
||||||
@ -119,6 +119,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
|
|||||||
err |= __copy_from_user(&scr->pt.r15, &sc->sc_gr[15], 8); /* r15 */
|
err |= __copy_from_user(&scr->pt.r15, &sc->sc_gr[15], 8); /* r15 */
|
||||||
|
|
||||||
scr->pt.cr_ifs = cfm | (1UL << 63);
|
scr->pt.cr_ifs = cfm | (1UL << 63);
|
||||||
|
scr->pt.ar_rsc = rsc | (3 << 2); /* force PL3 */
|
||||||
|
|
||||||
/* establish new instruction pointer: */
|
/* establish new instruction pointer: */
|
||||||
scr->pt.cr_iip = ip & ~0x3UL;
|
scr->pt.cr_iip = ip & ~0x3UL;
|
||||||
|
|||||||
@ -435,6 +435,7 @@ acpi_pci_irq_enable (
|
|||||||
/* Interrupt Line values above 0xF are forbidden */
|
/* Interrupt Line values above 0xF are forbidden */
|
||||||
if (dev->irq >= 0 && (dev->irq <= 0xF)) {
|
if (dev->irq >= 0 && (dev->irq <= 0xF)) {
|
||||||
printk(" - using IRQ %d\n", dev->irq);
|
printk(" - using IRQ %d\n", dev->irq);
|
||||||
|
acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW);
|
||||||
return_VALUE(0);
|
return_VALUE(0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@ -2307,6 +2307,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
tso = e1000_tso(adapter, skb);
|
tso = e1000_tso(adapter, skb);
|
||||||
if (tso < 0) {
|
if (tso < 0) {
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
|
spin_unlock_irqrestore(&adapter->tx_lock, flags);
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -396,7 +396,7 @@ int pci_register_driver(struct pci_driver *drv)
|
|||||||
/* FIXME, once all of the existing PCI drivers have been fixed to set
|
/* FIXME, once all of the existing PCI drivers have been fixed to set
|
||||||
* the pci shutdown function, this test can go away. */
|
* the pci shutdown function, this test can go away. */
|
||||||
if (!drv->driver.shutdown)
|
if (!drv->driver.shutdown)
|
||||||
drv->driver.shutdown = pci_device_shutdown,
|
drv->driver.shutdown = pci_device_shutdown;
|
||||||
drv->driver.owner = drv->owner;
|
drv->driver.owner = drv->owner;
|
||||||
drv->driver.kobj.ktype = &pci_driver_kobj_type;
|
drv->driver.kobj.ktype = &pci_driver_kobj_type;
|
||||||
pci_init_dynids(&drv->dynids);
|
pci_init_dynids(&drv->dynids);
|
||||||
|
|||||||
@ -1150,7 +1150,7 @@ iospace_error_exit:
|
|||||||
*/
|
*/
|
||||||
int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -ENODEV;
|
||||||
device_reg_t __iomem *reg;
|
device_reg_t __iomem *reg;
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
scsi_qla_host_t *ha;
|
scsi_qla_host_t *ha;
|
||||||
@ -1161,7 +1161,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
fc_port_t *fcport;
|
fc_port_t *fcport;
|
||||||
|
|
||||||
if (pci_enable_device(pdev))
|
if (pci_enable_device(pdev))
|
||||||
return -1;
|
goto probe_out;
|
||||||
|
|
||||||
host = scsi_host_alloc(&qla2x00_driver_template,
|
host = scsi_host_alloc(&qla2x00_driver_template,
|
||||||
sizeof(scsi_qla_host_t));
|
sizeof(scsi_qla_host_t));
|
||||||
@ -1183,9 +1183,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
|
|
||||||
/* Configure PCI I/O space */
|
/* Configure PCI I/O space */
|
||||||
ret = qla2x00_iospace_config(ha);
|
ret = qla2x00_iospace_config(ha);
|
||||||
if (ret != 0) {
|
if (ret)
|
||||||
goto probe_alloc_failed;
|
goto probe_failed;
|
||||||
}
|
|
||||||
|
|
||||||
/* Sanitize the information from PCI BIOS. */
|
/* Sanitize the information from PCI BIOS. */
|
||||||
host->irq = pdev->irq;
|
host->irq = pdev->irq;
|
||||||
@ -1258,23 +1257,10 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
qla_printk(KERN_WARNING, ha,
|
qla_printk(KERN_WARNING, ha,
|
||||||
"[ERROR] Failed to allocate memory for adapter\n");
|
"[ERROR] Failed to allocate memory for adapter\n");
|
||||||
|
|
||||||
goto probe_alloc_failed;
|
ret = -ENOMEM;
|
||||||
|
goto probe_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_set_drvdata(pdev, ha);
|
|
||||||
host->this_id = 255;
|
|
||||||
host->cmd_per_lun = 3;
|
|
||||||
host->unique_id = ha->instance;
|
|
||||||
host->max_cmd_len = MAX_CMDSZ;
|
|
||||||
host->max_channel = ha->ports - 1;
|
|
||||||
host->max_id = ha->max_targets;
|
|
||||||
host->max_lun = ha->max_luns;
|
|
||||||
host->transportt = qla2xxx_transport_template;
|
|
||||||
if (scsi_add_host(host, &pdev->dev))
|
|
||||||
goto probe_alloc_failed;
|
|
||||||
|
|
||||||
qla2x00_alloc_sysfs_attr(ha);
|
|
||||||
|
|
||||||
if (qla2x00_initialize_adapter(ha) &&
|
if (qla2x00_initialize_adapter(ha) &&
|
||||||
!(ha->device_flags & DFLG_NO_CABLE)) {
|
!(ha->device_flags & DFLG_NO_CABLE)) {
|
||||||
|
|
||||||
@ -1285,11 +1271,10 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
"Adapter flags %x.\n",
|
"Adapter flags %x.\n",
|
||||||
ha->host_no, ha->device_flags));
|
ha->host_no, ha->device_flags));
|
||||||
|
|
||||||
|
ret = -ENODEV;
|
||||||
goto probe_failed;
|
goto probe_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
qla2x00_init_host_attr(ha);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Startup the kernel thread for this host adapter
|
* Startup the kernel thread for this host adapter
|
||||||
*/
|
*/
|
||||||
@ -1299,17 +1284,26 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
qla_printk(KERN_WARNING, ha,
|
qla_printk(KERN_WARNING, ha,
|
||||||
"Unable to start DPC thread!\n");
|
"Unable to start DPC thread!\n");
|
||||||
|
|
||||||
|
ret = -ENODEV;
|
||||||
goto probe_failed;
|
goto probe_failed;
|
||||||
}
|
}
|
||||||
wait_for_completion(&ha->dpc_inited);
|
wait_for_completion(&ha->dpc_inited);
|
||||||
|
|
||||||
|
host->this_id = 255;
|
||||||
|
host->cmd_per_lun = 3;
|
||||||
|
host->unique_id = ha->instance;
|
||||||
|
host->max_cmd_len = MAX_CMDSZ;
|
||||||
|
host->max_channel = ha->ports - 1;
|
||||||
|
host->max_lun = MAX_LUNS;
|
||||||
|
host->transportt = qla2xxx_transport_template;
|
||||||
|
|
||||||
if (IS_QLA2100(ha) || IS_QLA2200(ha))
|
if (IS_QLA2100(ha) || IS_QLA2200(ha))
|
||||||
ret = request_irq(host->irq, qla2100_intr_handler,
|
ret = request_irq(host->irq, qla2100_intr_handler,
|
||||||
SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
|
SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
|
||||||
else
|
else
|
||||||
ret = request_irq(host->irq, qla2300_intr_handler,
|
ret = request_irq(host->irq, qla2300_intr_handler,
|
||||||
SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
|
SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
|
||||||
if (ret != 0) {
|
if (ret) {
|
||||||
qla_printk(KERN_WARNING, ha,
|
qla_printk(KERN_WARNING, ha,
|
||||||
"Failed to reserve interrupt %d already in use.\n",
|
"Failed to reserve interrupt %d already in use.\n",
|
||||||
host->irq);
|
host->irq);
|
||||||
@ -1363,9 +1357,18 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
msleep(10);
|
msleep(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pci_set_drvdata(pdev, ha);
|
||||||
ha->flags.init_done = 1;
|
ha->flags.init_done = 1;
|
||||||
num_hosts++;
|
num_hosts++;
|
||||||
|
|
||||||
|
ret = scsi_add_host(host, &pdev->dev);
|
||||||
|
if (ret)
|
||||||
|
goto probe_failed;
|
||||||
|
|
||||||
|
qla2x00_alloc_sysfs_attr(ha);
|
||||||
|
|
||||||
|
qla2x00_init_host_attr(ha);
|
||||||
|
|
||||||
qla_printk(KERN_INFO, ha, "\n"
|
qla_printk(KERN_INFO, ha, "\n"
|
||||||
" QLogic Fibre Channel HBA Driver: %s\n"
|
" QLogic Fibre Channel HBA Driver: %s\n"
|
||||||
" QLogic %s - %s\n"
|
" QLogic %s - %s\n"
|
||||||
@ -1384,9 +1387,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
|||||||
probe_failed:
|
probe_failed:
|
||||||
fc_remove_host(ha->host);
|
fc_remove_host(ha->host);
|
||||||
|
|
||||||
scsi_remove_host(host);
|
|
||||||
|
|
||||||
probe_alloc_failed:
|
|
||||||
qla2x00_free_device(ha);
|
qla2x00_free_device(ha);
|
||||||
|
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
@ -1394,7 +1394,8 @@ probe_alloc_failed:
|
|||||||
probe_disable_device:
|
probe_disable_device:
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
|
|
||||||
return -1;
|
probe_out:
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qla2x00_probe_one);
|
EXPORT_SYMBOL_GPL(qla2x00_probe_one);
|
||||||
|
|
||||||
|
|||||||
@ -649,6 +649,7 @@ static inline int de_thread(struct task_struct *tsk)
|
|||||||
}
|
}
|
||||||
sig->group_exit_task = NULL;
|
sig->group_exit_task = NULL;
|
||||||
sig->notify_count = 0;
|
sig->notify_count = 0;
|
||||||
|
sig->real_timer.data = (unsigned long)current;
|
||||||
spin_unlock_irq(lock);
|
spin_unlock_irq(lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -116,7 +116,8 @@ __asm__ __volatile__(
|
|||||||
"orb $1,%%al\n"
|
"orb $1,%%al\n"
|
||||||
"3:"
|
"3:"
|
||||||
:"=a" (__res), "=&S" (d0), "=&D" (d1)
|
:"=a" (__res), "=&S" (d0), "=&D" (d1)
|
||||||
:"1" (cs),"2" (ct));
|
:"1" (cs),"2" (ct)
|
||||||
|
:"memory");
|
||||||
return __res;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,8 +139,9 @@ __asm__ __volatile__(
|
|||||||
"3:\tsbbl %%eax,%%eax\n\t"
|
"3:\tsbbl %%eax,%%eax\n\t"
|
||||||
"orb $1,%%al\n"
|
"orb $1,%%al\n"
|
||||||
"4:"
|
"4:"
|
||||||
:"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
|
:"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
|
||||||
:"1" (cs),"2" (ct),"3" (count));
|
:"1" (cs),"2" (ct),"3" (count)
|
||||||
|
:"memory");
|
||||||
return __res;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +160,9 @@ __asm__ __volatile__(
|
|||||||
"movl $1,%1\n"
|
"movl $1,%1\n"
|
||||||
"2:\tmovl %1,%0\n\t"
|
"2:\tmovl %1,%0\n\t"
|
||||||
"decl %0"
|
"decl %0"
|
||||||
:"=a" (__res), "=&S" (d0) : "1" (s),"0" (c));
|
:"=a" (__res), "=&S" (d0)
|
||||||
|
:"1" (s),"0" (c)
|
||||||
|
:"memory");
|
||||||
return __res;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +179,9 @@ __asm__ __volatile__(
|
|||||||
"leal -1(%%esi),%0\n"
|
"leal -1(%%esi),%0\n"
|
||||||
"2:\ttestb %%al,%%al\n\t"
|
"2:\ttestb %%al,%%al\n\t"
|
||||||
"jne 1b"
|
"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;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +195,9 @@ __asm__ __volatile__(
|
|||||||
"scasb\n\t"
|
"scasb\n\t"
|
||||||
"notl %0\n\t"
|
"notl %0\n\t"
|
||||||
"decl %0"
|
"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;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +341,9 @@ __asm__ __volatile__(
|
|||||||
"je 1f\n\t"
|
"je 1f\n\t"
|
||||||
"movl $1,%0\n"
|
"movl $1,%0\n"
|
||||||
"1:\tdecl %0"
|
"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;
|
return __res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,7 +379,7 @@ __asm__ __volatile__(
|
|||||||
"je 2f\n\t"
|
"je 2f\n\t"
|
||||||
"stosb\n"
|
"stosb\n"
|
||||||
"2:"
|
"2:"
|
||||||
: "=&c" (d0), "=&D" (d1)
|
:"=&c" (d0), "=&D" (d1)
|
||||||
:"a" (c), "q" (count), "0" (count/4), "1" ((long) s)
|
:"a" (c), "q" (count), "0" (count/4), "1" ((long) s)
|
||||||
:"memory");
|
:"memory");
|
||||||
return (s);
|
return (s);
|
||||||
@ -392,7 +402,8 @@ __asm__ __volatile__(
|
|||||||
"jne 1b\n"
|
"jne 1b\n"
|
||||||
"3:\tsubl %2,%0"
|
"3:\tsubl %2,%0"
|
||||||
:"=a" (__res), "=&d" (d0)
|
:"=a" (__res), "=&d" (d0)
|
||||||
:"c" (s),"1" (count));
|
:"c" (s),"1" (count)
|
||||||
|
:"memory");
|
||||||
return __res;
|
return __res;
|
||||||
}
|
}
|
||||||
/* end of additional stuff */
|
/* end of additional stuff */
|
||||||
@ -473,7 +484,8 @@ static inline void * memscan(void * addr, int c, size_t size)
|
|||||||
"dec %%edi\n"
|
"dec %%edi\n"
|
||||||
"1:"
|
"1:"
|
||||||
: "=D" (addr), "=c" (size)
|
: "=D" (addr), "=c" (size)
|
||||||
: "0" (addr), "1" (size), "a" (c));
|
: "0" (addr), "1" (size), "a" (c)
|
||||||
|
: "memory");
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1164,7 +1164,7 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|||||||
{
|
{
|
||||||
pgd_t *pgd;
|
pgd_t *pgd;
|
||||||
unsigned long next;
|
unsigned long next;
|
||||||
unsigned long end = addr + size;
|
unsigned long end = addr + PAGE_ALIGN(size);
|
||||||
struct mm_struct *mm = vma->vm_mm;
|
struct mm_struct *mm = vma->vm_mm;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
|||||||
@ -315,8 +315,8 @@ err:
|
|||||||
static void netlink_remove(struct sock *sk)
|
static void netlink_remove(struct sock *sk)
|
||||||
{
|
{
|
||||||
netlink_table_grab();
|
netlink_table_grab();
|
||||||
nl_table[sk->sk_protocol].hash.entries--;
|
if (sk_del_node_init(sk))
|
||||||
sk_del_node_init(sk);
|
nl_table[sk->sk_protocol].hash.entries--;
|
||||||
if (nlk_sk(sk)->groups)
|
if (nlk_sk(sk)->groups)
|
||||||
__sk_del_bind_node(sk);
|
__sk_del_bind_node(sk);
|
||||||
netlink_table_ungrab();
|
netlink_table_ungrab();
|
||||||
@ -429,7 +429,12 @@ retry:
|
|||||||
err = netlink_insert(sk, pid);
|
err = netlink_insert(sk, pid);
|
||||||
if (err == -EADDRINUSE)
|
if (err == -EADDRINUSE)
|
||||||
goto retry;
|
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)
|
static inline int netlink_capable(struct socket *sock, unsigned int flag)
|
||||||
|
|||||||
Reference in New Issue
Block a user