datapath: Use per_cpu_ptr instead of percpu_ptr.
[openvswitch] / datapath / datapath.c
index 67c422adc816eb3cc148c4977b6193755322e72c..1d007b04b083f5a6ee9ad1032d3733ef7ac5e66d 100644 (file)
@@ -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;