X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fdatapath.c;h=fd63fb02b8184426fb0f95ba829ce481598a3422;hb=3223e977cae4125b24ebb9498e0b67b4d8fac4c3;hp=67c422adc816eb3cc148c4977b6193755322e72c;hpb=8819fac72b9888bec99aae656bcdb1631b99d01b;p=openvswitch diff --git a/datapath/datapath.c b/datapath/datapath.c index 67c422ad..fd63fb02 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; @@ -1572,7 +1576,7 @@ static int get_port_group(struct datapath *dp, struct odp_port_group __user *upg if (copy_from_user(&pg, upg, sizeof pg)) return -EFAULT; - return do_get_port_group(dp, pg.ports, pg.n_ports, pg.group, &pg.n_ports); + return do_get_port_group(dp, pg.ports, pg.n_ports, pg.group, &upg->n_ports); } static int get_listen_mask(const struct file *f) @@ -1790,7 +1794,7 @@ static int compat_get_port_group(struct datapath *dp, struct compat_odp_port_gro return -EFAULT; return do_get_port_group(dp, compat_ptr(pg.ports), pg.n_ports, - pg.group, &pg.n_ports); + pg.group, &upg->n_ports); } static int compat_get_flow(struct odp_flow *flow, const struct compat_odp_flow __user *compat)