On 2/21/19 11:14 PM, wenxu wrote: > build_state in the rcu_read_lock and disable the preempt > > rcu_read_lock(); > ops = rcu_dereference(lwtun_encaps[encap_type]); > if (likely(ops && ops->build_state && try_module_get(ops->owner))) { > found = true; > ret = ops->build_state(encap, family, cfg, lws, extack); > if (ret) > module_put(ops->owner); > } > rcu_read_unlock(); >
Missed that. Once a reference is taken the rcu_read_lock can be dropped before calling build_state allowing the allocations to be GFP_KERNEL.