struct xfrm_kmaddress *k);
 #endif
 
-extern wait_queue_head_t km_waitq;
 extern int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport);
 extern void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 pid);
 extern int km_report(u8 proto, struct xfrm_selector *sel, xfrm_address_t *addr);
 
                        if (err == -EAGAIN && (flags & XFRM_LOOKUP_WAIT)) {
                                DECLARE_WAITQUEUE(wait, current);
 
-                               add_wait_queue(&km_waitq, &wait);
+                               add_wait_queue(&init_net.xfrm.km_waitq, &wait);
                                set_current_state(TASK_INTERRUPTIBLE);
                                schedule();
                                set_current_state(TASK_RUNNING);
-                               remove_wait_queue(&km_waitq, &wait);
+                               remove_wait_queue(&init_net.xfrm.km_waitq, &wait);
 
                                nx = xfrm_tmpl_resolve(pols, npols, fl, xfrm, family);
 
 
        mutex_unlock(&hash_resize_mutex);
 }
 
-DECLARE_WAIT_QUEUE_HEAD(km_waitq);
-EXPORT_SYMBOL(km_waitq);
-
 static DEFINE_RWLOCK(xfrm_state_afinfo_lock);
 static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO];
 
        hlist_for_each_entry_safe(x, entry, tmp, &gc_list, gclist)
                xfrm_state_gc_destroy(x);
 
-       wake_up(&km_waitq);
+       wake_up(&net->xfrm.km_waitq);
 }
 
 static inline unsigned long make_jiffies(long secs)
 expired:
        if (x->km.state == XFRM_STATE_ACQ && x->id.spi == 0) {
                x->km.state = XFRM_STATE_EXPIRED;
-               wake_up(&km_waitq);
+               wake_up(&init_net.xfrm.km_waitq);
                next = 2;
                goto resched;
        }
 
 out:
        spin_unlock_bh(&xfrm_state_lock);
-       wake_up(&km_waitq);
+       wake_up(&init_net.xfrm.km_waitq);
        return err;
 }
 EXPORT_SYMBOL(xfrm_state_flush);
        if (x->replay_maxage)
                mod_timer(&x->rtimer, jiffies + x->replay_maxage);
 
-       wake_up(&km_waitq);
+       wake_up(&init_net.xfrm.km_waitq);
 
        init_net.xfrm.state_num++;
 
        km_state_notify(x, &c);
 
        if (hard)
-               wake_up(&km_waitq);
+               wake_up(&init_net.xfrm.km_waitq);
 }
 
 EXPORT_SYMBOL(km_state_expired);
        km_policy_notify(pol, dir, &c);
 
        if (hard)
-               wake_up(&km_waitq);
+               wake_up(&init_net.xfrm.km_waitq);
 }
 EXPORT_SYMBOL(km_policy_expired);
 
        INIT_WORK(&net->xfrm.state_hash_work, xfrm_hash_resize);
        INIT_HLIST_HEAD(&net->xfrm.state_gc_list);
        INIT_WORK(&net->xfrm.state_gc_work, xfrm_state_gc_task);
+       init_waitqueue_head(&net->xfrm.km_waitq);
        return 0;
 
 out_byspi: