Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/infiniband/core/iwcm.c drivers/net/chelsio/cxgb2.c drivers/net/wireless/bcm43xx/bcm43xx_main.c drivers/net/wireless/prism54/islpci_eth.c drivers/usb/core/hub.h drivers/usb/input/hid-core.c net/core/netpoll.c Fix up merge failures with Linus's head and fix new compilation failures. Signed-Off-By: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -1315,9 +1315,8 @@ struct task_struct * __devinit fork_idle(int cpu)
|
||||
struct pt_regs regs;
|
||||
|
||||
task = copy_process(CLONE_VM, 0, idle_regs(®s), 0, NULL, NULL, 0);
|
||||
if (!task)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
init_idle(task, cpu);
|
||||
if (!IS_ERR(task))
|
||||
init_idle(task, cpu);
|
||||
|
||||
return task;
|
||||
}
|
||||
|
@@ -231,10 +231,10 @@ fastcall unsigned int __do_IRQ(unsigned int irq)
|
||||
spin_unlock(&desc->lock);
|
||||
|
||||
action_ret = handle_IRQ_event(irq, action);
|
||||
|
||||
spin_lock(&desc->lock);
|
||||
if (!noirqdebug)
|
||||
note_interrupt(irq, desc, action_ret);
|
||||
|
||||
spin_lock(&desc->lock);
|
||||
if (likely(!(desc->status & IRQ_PENDING)))
|
||||
break;
|
||||
desc->status &= ~IRQ_PENDING;
|
||||
|
@@ -147,11 +147,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
|
||||
if (unlikely(irqfixup)) {
|
||||
/* Don't punish working computers */
|
||||
if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) {
|
||||
int ok;
|
||||
|
||||
spin_unlock(&desc->lock);
|
||||
ok = misrouted_irq(irq);
|
||||
spin_lock(&desc->lock);
|
||||
int ok = misrouted_irq(irq);
|
||||
if (action_ret == IRQ_NONE)
|
||||
desc->irqs_unhandled -= ok;
|
||||
}
|
||||
|
@@ -311,14 +311,14 @@ int call_usermodehelper_pipe(char *path, char **argv, char **envp,
|
||||
return 0;
|
||||
|
||||
f = create_write_pipe();
|
||||
if (!f)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(f))
|
||||
return PTR_ERR(f);
|
||||
*filp = f;
|
||||
|
||||
f = create_read_pipe(f);
|
||||
if (!f) {
|
||||
if (IS_ERR(f)) {
|
||||
free_write_pipe(*filp);
|
||||
return -ENOMEM;
|
||||
return PTR_ERR(f);
|
||||
}
|
||||
sub_info.stdin = f;
|
||||
|
||||
|
@@ -1086,22 +1086,35 @@ static int mod_sysfs_setup(struct module *mod,
|
||||
goto out;
|
||||
kobj_set_kset_s(&mod->mkobj, module_subsys);
|
||||
mod->mkobj.mod = mod;
|
||||
err = kobject_register(&mod->mkobj.kobj);
|
||||
|
||||
/* delay uevent until full sysfs population */
|
||||
kobject_init(&mod->mkobj.kobj);
|
||||
err = kobject_add(&mod->mkobj.kobj);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
mod->drivers_dir = kobject_add_dir(&mod->mkobj.kobj, "drivers");
|
||||
if (!mod->drivers_dir)
|
||||
goto out_unreg;
|
||||
|
||||
err = module_param_sysfs_setup(mod, kparam, num_params);
|
||||
if (err)
|
||||
goto out_unreg;
|
||||
goto out_unreg_drivers;
|
||||
|
||||
err = module_add_modinfo_attrs(mod);
|
||||
if (err)
|
||||
goto out_unreg;
|
||||
goto out_unreg_param;
|
||||
|
||||
kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD);
|
||||
return 0;
|
||||
|
||||
out_unreg_drivers:
|
||||
kobject_unregister(mod->drivers_dir);
|
||||
out_unreg_param:
|
||||
module_param_sysfs_remove(mod);
|
||||
out_unreg:
|
||||
kobject_unregister(&mod->mkobj.kobj);
|
||||
kobject_del(&mod->mkobj.kobj);
|
||||
kobject_put(&mod->mkobj.kobj);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
@@ -1110,6 +1123,7 @@ static void mod_kobject_remove(struct module *mod)
|
||||
{
|
||||
module_remove_modinfo_attrs(mod);
|
||||
module_param_sysfs_remove(mod);
|
||||
kobject_unregister(mod->drivers_dir);
|
||||
|
||||
kobject_unregister(&mod->mkobj.kobj);
|
||||
}
|
||||
@@ -2275,11 +2289,14 @@ void print_modules(void)
|
||||
|
||||
void module_add_driver(struct module *mod, struct device_driver *drv)
|
||||
{
|
||||
int no_warn;
|
||||
|
||||
if (!mod || !drv)
|
||||
return;
|
||||
|
||||
/* Don't check return code; this call is idempotent */
|
||||
sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module");
|
||||
/* Don't check return codes; these calls are idempotent */
|
||||
no_warn = sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module");
|
||||
no_warn = sysfs_create_link(mod->drivers_dir, &drv->kobj, drv->name);
|
||||
}
|
||||
EXPORT_SYMBOL(module_add_driver);
|
||||
|
||||
@@ -2288,6 +2305,8 @@ void module_remove_driver(struct device_driver *drv)
|
||||
if (!drv)
|
||||
return;
|
||||
sysfs_remove_link(&drv->kobj, "module");
|
||||
if (drv->owner && drv->owner->drivers_dir)
|
||||
sysfs_remove_link(drv->owner->drivers_dir, drv->name);
|
||||
}
|
||||
EXPORT_SYMBOL(module_remove_driver);
|
||||
|
||||
|
@@ -293,6 +293,27 @@ void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(_spin_lock_nested);
|
||||
unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
preempt_disable();
|
||||
spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
|
||||
/*
|
||||
* On lockdep we dont want the hand-coded irq-enable of
|
||||
* _raw_spin_lock_flags() code, because lockdep assumes
|
||||
* that interrupts are not re-enabled during lock-acquire:
|
||||
*/
|
||||
#ifdef CONFIG_PROVE_SPIN_LOCKING
|
||||
_raw_spin_lock(lock);
|
||||
#else
|
||||
_raw_spin_lock_flags(lock, &flags);
|
||||
#endif
|
||||
return flags;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(_spin_lock_irqsave_nested);
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -77,8 +77,7 @@ static int prepare_reply(struct genl_info *info, u8 cmd, struct sk_buff **skbp,
|
||||
/*
|
||||
* If new attributes are added, please revisit this allocation
|
||||
*/
|
||||
size = nlmsg_total_size(genlmsg_total_size(size));
|
||||
skb = nlmsg_new(size, GFP_KERNEL);
|
||||
skb = genlmsg_new(size, GFP_KERNEL);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -86,13 +85,9 @@ static int prepare_reply(struct genl_info *info, u8 cmd, struct sk_buff **skbp,
|
||||
int seq = get_cpu_var(taskstats_seqnum)++;
|
||||
put_cpu_var(taskstats_seqnum);
|
||||
|
||||
reply = genlmsg_put(skb, 0, seq,
|
||||
family.id, 0, 0,
|
||||
cmd, family.version);
|
||||
reply = genlmsg_put(skb, 0, seq, &family, 0, cmd);
|
||||
} else
|
||||
reply = genlmsg_put(skb, info->snd_pid, info->snd_seq,
|
||||
family.id, 0, 0,
|
||||
cmd, family.version);
|
||||
reply = genlmsg_put_reply(skb, info, &family, 0, cmd);
|
||||
if (reply == NULL) {
|
||||
nlmsg_free(skb);
|
||||
return -EINVAL;
|
||||
|
@@ -938,8 +938,11 @@ int unwind(struct unwind_frame_info *frame)
|
||||
else {
|
||||
retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end);
|
||||
/* skip augmentation */
|
||||
if (((const char *)(cie + 2))[1] == 'z')
|
||||
ptr += get_uleb128(&ptr, end);
|
||||
if (((const char *)(cie + 2))[1] == 'z') {
|
||||
uleb128_t augSize = get_uleb128(&ptr, end);
|
||||
|
||||
ptr += augSize;
|
||||
}
|
||||
if (ptr > end
|
||||
|| retAddrReg >= ARRAY_SIZE(reg_info)
|
||||
|| REG_INVALID(retAddrReg)
|
||||
@@ -963,9 +966,7 @@ int unwind(struct unwind_frame_info *frame)
|
||||
if (cie == NULL || fde == NULL) {
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
unsigned long top, bottom;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
top = STACK_TOP(frame->task);
|
||||
bottom = STACK_BOTTOM(frame->task);
|
||||
# if FRAME_RETADDR_OFFSET < 0
|
||||
|
Reference in New Issue
Block a user