X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fvport-internal_dev.c;h=74a7dfdb236d77b729b4fe0f64e8287637dc508f;hb=83c19ab15aa7b2d63632ac9694541759bc8d2351;hp=b4dacd0ff501b4413f10567987fc17863326bcc2;hpb=7237e4f4b6155eb4854cebc0a45fe845f0950b40;p=openvswitch diff --git a/datapath/vport-internal_dev.c b/datapath/vport-internal_dev.c index b4dacd0f..74a7dfdb 100644 --- a/datapath/vport-internal_dev.c +++ b/datapath/vport-internal_dev.c @@ -10,10 +10,10 @@ #include #include #include -#include #include #include +#include "checksum.h" #include "datapath.h" #include "vport-generic.h" #include "vport-internal_dev.h" @@ -71,13 +71,10 @@ static int internal_dev_mac_addr(struct net_device *dev, void *p) /* 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); - struct vport *vport = rcu_dereference(internal_dev->vport); - compute_ip_summed(skb, true); OVS_CB(skb)->flow = NULL; - vport_receive(vport, skb); + vport_receive(internal_dev_priv(netdev)->vport, skb); return 0; } @@ -196,7 +193,7 @@ static struct vport *internal_dev_create(const struct vport_parms *parms) } internal_dev = internal_dev_priv(netdev_vport->dev); - rcu_assign_pointer(internal_dev->vport, vport); + internal_dev->vport = vport; err = register_netdevice(netdev_vport->dev); if (err) @@ -222,8 +219,6 @@ static int internal_dev_destroy(struct vport *vport) netif_stop_queue(netdev_vport->dev); dev_set_promiscuity(netdev_vport->dev, -1); - synchronize_rcu(); - unregister_netdevice(netdev_vport->dev); vport_free(vport); @@ -287,11 +282,8 @@ int is_internal_vport(const struct vport *vport) struct vport *internal_dev_get_vport(struct net_device *netdev) { - struct internal_dev *internal_dev; - if (!is_internal_dev(netdev)) return NULL; - internal_dev = internal_dev_priv(netdev); - return rcu_dereference(internal_dev->vport); + return internal_dev_priv(netdev)->vport; }