X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fvport-internal_dev.c;h=d8e57fef85daa122ed9645219e3c8b0ef9fcf7a9;hb=8bf4bbe390af3f370e7e95d9237572ff750047a8;hp=d23b4c3e88e706d063504eb578d34565b19a725a;hpb=f4267e344a9373a4efefff8f8f5b85f532d223e1;p=openvswitch diff --git a/datapath/vport-internal_dev.c b/datapath/vport-internal_dev.c index d23b4c3e..d8e57fef 100644 --- a/datapath/vport-internal_dev.c +++ b/datapath/vport-internal_dev.c @@ -11,13 +11,12 @@ #include #include #include -#include #include #include -#include #include "datapath.h" #include "openvswitch/internal_dev.h" +#include "vport-generic.h" #include "vport-internal_dev.h" #include "vport-netdev.h" @@ -81,8 +80,7 @@ static int internal_dev_mac_addr(struct net_device *dev, void *p) return 0; } -/* Not reentrant (because it is called with BHs disabled), but may be called - * simultaneously on different CPUs. */ +/* Called with rcu_read_lock and bottom-halves disabled. */ static int internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) { struct internal_dev *internal_dev = internal_dev_priv(netdev); @@ -101,9 +99,7 @@ static int internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) skb_reset_mac_header(skb); compute_ip_summed(skb, true); - rcu_read_lock_bh(); vport_receive(vport, skb); - rcu_read_unlock_bh(); return 0; } @@ -238,7 +234,7 @@ do_setup(struct net_device *netdev) netdev->features = NETIF_F_LLTX | NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_HW_CSUM | NETIF_F_TSO; - vport_gen_ether_addr(netdev->dev_addr); + vport_gen_rand_ether_addr(netdev->dev_addr); } static struct vport * @@ -340,11 +336,11 @@ internal_dev_recv(struct vport *vport, struct sk_buff *skb) netif_rx_ni(skb); netdev->last_rx = jiffies; - preempt_disable(); + local_bh_disable(); lb_stats = per_cpu_ptr(internal_dev->lstats, smp_processor_id()); lb_stats->rx_packets++; lb_stats->rx_bytes += len; - preempt_enable(); + local_bh_enable(); return len; }