Subject: Re: kdump regression compared to v2.6.35

From: [email-masked]
Date: Mon, 30 Aug 2010 20:53:35 -0400 (EDT)

----- "Tejun Heo" <[email-masked]> wrote:

> Please try this one instead.  Thanks.
Unable to reproduce it any more after applied the patch,

NET: Registered protocol family 16
ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
ACPI: bus type pci registered
PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0x80000000-0x8fffffff] (base 0x80000000)
PCI: MMCONFIG at [mem 0x80000000-0x8fffffff] reserved in E820
PCI: Using configuration type 1 for base access
bio: create slab <bio-0> at 0
XXX kintegrityd: rescuer dispatching to cpu0
XXX kintegrityd: rescuer done binding, bound=1
XXX kintegrityd: rescuer dispatching to cpu5
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu6
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu10
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu13
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu14
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu18
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu21
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu22
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu30
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu32
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu33
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu34
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu35
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu37
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu42
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu45
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu46
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu48
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu50
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu53
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu54
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu57
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu58
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu60
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu61
XXX kintegrityd: rescuer done binding, bound=0
XXX kintegrityd: rescuer dispatching to cpu62
XXX kintegrityd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu0
XXX kblockd: rescuer done binding, bound=1
XXX kblockd: rescuer dispatching to cpu5
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu6
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu10
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu13
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu14
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu18
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu21
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu22
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu30
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu32
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu33
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu34
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu35
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu37
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu40
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu41
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu45
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu46
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu50
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu51
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu53
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu54
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu56
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu61
XXX kblockd: rescuer done binding, bound=0
XXX kblockd: rescuer dispatching to cpu62
XXX kblockd: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu0
XXX kacpid: rescuer done binding, bound=1
XXX kacpid: rescuer dispatching to cpu5
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu6
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu10
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu13
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu14
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu18
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu21
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu22
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu30
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu32
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu33
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu34
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu35
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu37
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu40
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu41
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu45
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu46
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu50
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu51
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu53
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu54
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu56
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu61
XXX kacpid: rescuer done binding, bound=0
XXX kacpid: rescuer dispatching to cpu62
XXX kacpid: rescuer done binding, bound=0
ACPI Error: Field [CPB3] at 96 exceeds Buffer [NULL] size 64 (bits) (20100702/dsopcode-597)
ACPI Error (psparse-0537): Method parse/execution failed [\_SB_._OSC] (Node ffff880c6e58cf38), AE_AML_BUFFER_LIMIT
ACPI: Interpreter enabled
ACPI: (supports S0 S1 S5)
ACPI: Using IOAPIC for interrupt routing
ACPI: No dock devices found.
PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
ACPI: PCI Root Bridge [IOH0] (domain 0000 [bus 00-7f])
...

> 
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index a2dccfc..75cdbc2 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -1224,6 +1224,8 @@ __acquires(&gcwq->lock)
>  {
>  	struct global_cwq *gcwq = worker->gcwq;
>  	struct task_struct *task = worker->task;
> +	static unsigned int cnt;
> +	int rc;
> 
>  	while (true) {
>  		/*
> @@ -1232,8 +1234,11 @@ __acquires(&gcwq->lock)
>  		 * it races with cpu hotunplug operation.  Verify
>  		 * against GCWQ_DISASSOCIATED.
>  		 */
> -		if (!(gcwq->flags & GCWQ_DISASSOCIATED))
> -			set_cpus_allowed_ptr(task, get_cpu_mask(gcwq->cpu));
> +		if (!(gcwq->flags & GCWQ_DISASSOCIATED)) {
> +			rc = set_cpus_allowed_ptr(task, get_cpu_mask(gcwq->cpu));
> +			if (rc && ++cnt < 10)
> +				printk("XXX set_cpus_allowed_ptr() failed w/ %d\n", rc);
> +		}
> 
>  		spin_lock_irq(&gcwq->lock);
>  		if (gcwq->flags & GCWQ_DISASSOCIATED)
> @@ -1985,13 +1990,16 @@ repeat:
>  		struct cpu_workqueue_struct *cwq = get_cwq(tcpu, wq);
>  		struct global_cwq *gcwq = cwq->gcwq;
>  		struct work_struct *work, *n;
> +		bool bound;
> 
>  		__set_current_state(TASK_RUNNING);
>  		mayday_clear_cpu(cpu, wq->mayday_mask);
> 
>  		/* migrate to the target cpu if possible */
>  		rescuer->gcwq = gcwq;
> -		worker_maybe_bind_and_lock(rescuer);
> +		printk("XXX %s: rescuer dispatching to cpu%u\n", wq->name,
> gcwq->cpu);
> +		bound = worker_maybe_bind_and_lock(rescuer);
> +		printk("XXX %s: rescuer done binding, bound=%d\n", wq->name,
> bound);
> 
>  		/*
>  		 * Slurp in all works issued via this workqueue and
> @@ -3558,8 +3566,7 @@ static int __init init_workqueues(void)
>  		spin_lock_init(&gcwq->lock);
>  		INIT_LIST_HEAD(&gcwq->worklist);
>  		gcwq->cpu = cpu;
> -		if (cpu == WORK_CPU_UNBOUND)
> -			gcwq->flags |= GCWQ_DISASSOCIATED;
> +		gcwq->flags |= GCWQ_DISASSOCIATED;
> 
>  		INIT_LIST_HEAD(&gcwq->idle_list);
>  		for (i = 0; i < BUSY_WORKER_HASH_SIZE; i++)
> @@ -3583,6 +3590,8 @@ static int __init init_workqueues(void)
>  		struct global_cwq *gcwq = get_gcwq(cpu);
>  		struct worker *worker;
> 
> +		if (cpu != WORK_CPU_UNBOUND)
> +			gcwq->flags &= ~GCWQ_DISASSOCIATED;
>  		worker = create_worker(gcwq, true);
>  		BUG_ON(!worker);
>  		spin_lock_irq(&gcwq->lock);
> 
> _______________________________________________
> kexec mailing list
> [email-masked]
> http://lists.infradead.org/mailman/listinfo/kexec