My situation is this: - interrupts are off - one xenolinux network device is active - there are buffered rx requests in the rx_ring - I need to reset this ring in a minute - I wish to free all the out-of-band pages allocated in my guest OS, so they are not leaked when I reset the ring I am trying this: NET_RING_IDX i = np->net_idx->rx_resp_prod; while (i != np->net_idx->rx_req_prod) { unsigned short id np->net_ring->rx_ring[MASK_NET_RX_IDX(i++)].req.id; struct sk_buff* skb = np->rx_skbs[id]; dev_kfree_skb_any(skb); } -- which crashes on dev_kfree_skb_any(). Can anyone tell my why I cannot free these skbs? Thanks, Jacob ------------------------------------------------------- This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek For a limited time only, get FREE Ground shipping on all orders of $35 or more. Hurry up and shop folks, this offer expires April 30th! http://www.thinkgeek.com/freeshipping/?cpg=12297 _______________________________________________ Xen-devel mailing list Xen-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xen-devel
On Tue, 2004-04-27 at 16:54, Jacob Gorm Hansen wrote:> struct sk_buff* skb = np->rx_skbs[id]; > dev_kfree_skb_any(skb); > } > > > -- which crashes on dev_kfree_skb_any().I guess I know why now. The skb->head ptrs all point to pages that are no longer mapped, this is why accessing data pointed to by skb_shinfo() (which the dealloc routine does) is bad. I could manually kfree(skb->head); but this still leaves empty mappings in the virtual memory map :-( I guess I need to flush the rings instead, but I suppose that means xen-queued outgoing packets will be dropped? Maybe I will just have to live with that. Jacob ------------------------------------------------------- This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek For a limited time only, get FREE Ground shipping on all orders of $35 or more. Hurry up and shop folks, this offer expires April 30th! http://www.thinkgeek.com/freeshipping/?cpg=12297 _______________________________________________ Xen-devel mailing list Xen-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xen-devel
> I guess I know why now. The skb->head ptrs all point to pages that are > no longer mapped, this is why accessing data pointed to by skb_shinfo() > (which the dealloc routine does) is bad. I could manually > kfree(skb->head); but this still leaves empty mappings in the virtual > memory map :-( > > I guess I need to flush the rings instead, but I suppose that means > xen-queued outgoing packets will be dropped? Maybe I will just have to > live with that.NETOP_FLUSH_BUFFERS causes Xen to flush all the buffers it can. This is every transmit buffer and every receive buffer /except/ for trasnmit buffers that have been queued at the physical NIC. For these the guest OS must spin/block until responses have been received some (short) time later. If you want all pending tx packets be to be sent then you should spin on the tx_cons and _prod indexes /before/ calling NETOP_FLUSH_BUFFERS. -- Keir ------------------------------------------------------- This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek For a limited time only, get FREE Ground shipping on all orders of $35 or more. Hurry up and shop folks, this offer expires April 30th! http://www.thinkgeek.com/freeshipping/?cpg=12297 _______________________________________________ Xen-devel mailing list Xen-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xen-devel