X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fdatapath.c;h=1d007b04b083f5a6ee9ad1032d3733ef7ac5e66d;hb=7183d1ecce62da62b31ea973c01fd77721f42c2c;hp=67c422adc816eb3cc148c4977b6193755322e72c;hpb=8819fac72b9888bec99aae656bcdb1631b99d01b;p=openvswitch diff --git a/datapath/datapath.c b/datapath/datapath.c index 67c422ad..1d007b04 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -1305,8 +1305,12 @@ static int do_execute(struct datapath *dp, const struct odp_execute *execute) skb->protocol = htons(ETH_P_802_2); flow_extract(skb, execute->in_port, &key); + + rcu_read_lock(); err = execute_actions(dp, skb, &key, actions->actions, actions->n_actions, GFP_KERNEL); + rcu_read_unlock(); + kfree(actions); return err; @@ -1343,7 +1347,7 @@ static int get_dp_stats(struct datapath *dp, struct odp_stats __user *statsp) stats.n_frags = stats.n_hit = stats.n_missed = stats.n_lost = 0; for_each_possible_cpu(i) { const struct dp_stats_percpu *s; - s = percpu_ptr(dp->stats_percpu, i); + s = per_cpu_ptr(dp->stats_percpu, i); stats.n_frags += s->n_frags; stats.n_hit += s->n_hit; stats.n_missed += s->n_missed;