Messages in this thread | | | Date | Wed, 17 Jun 2015 11:05:33 +0200 | From | Daniel Wagner <> | Subject | Re: call_rcu from trace_preempt |
| |
On 06/17/2015 10:11 AM, Daniel Wagner wrote: > On 06/16/2015 07:20 PM, Alexei Starovoitov wrote: >> On 6/16/15 5:38 AM, Daniel Wagner wrote: >>> static int free_thread(void *arg) >>> +{ >>> + unsigned long flags; >>> + struct htab_elem *l; >>> + >>> + while (!kthread_should_stop()) { >>> + spin_lock_irqsave(&elem_freelist_lock, flags); >>> + while (!list_empty(&elem_freelist)) { >>> + l = list_entry(elem_freelist.next, >>> + struct htab_elem, list); >>> + list_del(&l->list); >>> + kfree(l); >> > Anyway, I changed to above kfree() to a kfree_rcu() and it explodes > again. With the same stack trace we seen.
Correction. I did this without the is_rcu_watching() change. With that patch applied it works fine again.
> Steven's suggestion deferring the work via irq_work results in the same > stack trace. (Now I get cold feets, without the nice heat from the CPU > busy looping...)
That one still not working. It also makes the system really really slow. I guess I still do something completely wrong.
| |