X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=linux_module%2Fiface-packet.c;fp=linux_module%2Fiface-packet.c;h=9df66bd93646b7f6979b71aa85db46fb005e1798;hp=3acb4bf61259193ee051324f9bf6853a94c4de8f;hb=1fc062adedda3f93f7f95395257a808c7b531fc9;hpb=80a7fd2f343c65c00d84bc64181d0e9720ae20a6 diff --git a/linux_module/iface-packet.c b/linux_module/iface-packet.c index 3acb4bf..9df66bd 100644 --- a/linux_module/iface-packet.c +++ b/linux_module/iface-packet.c @@ -249,10 +249,11 @@ palacios_packet_connect(struct v3_packet * packet, unsigned long flags; spin_lock_irqsave(&(packet_state.lock), flags); - iface = find_interface(host_nic); + spin_unlock_irqrestore(&(packet_state.lock),flags); + if(iface == NULL){ - iface = (struct raw_interface *)kmalloc(sizeof(struct raw_interface), GFP_ATOMIC); + iface = (struct raw_interface *)kmalloc(sizeof(struct raw_interface), GFP_KERNEL); if (!iface) { printk("Palacios Packet Interface: Fails to allocate interface\n"); return -1; @@ -260,16 +261,13 @@ palacios_packet_connect(struct v3_packet * packet, if(init_raw_interface(iface, host_nic) != 0) { printk("Palacios Packet Interface: Fails to initiate an raw interface on device %s\n", host_nic); kfree(iface); - spin_unlock_irqrestore(&(packet_state.lock), flags); - return -1; } - + spin_lock_irqsave(&(packet_state.lock), flags); list_add(&(iface->node), &(packet_state.open_interfaces)); + spin_unlock_irqrestore(&(packet_state.lock),flags); } - spin_unlock_irqrestore(&(packet_state.lock), flags); - packet->host_packet_data = iface; list_add(&(packet->node), &(iface->brdcast_recvers));