Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Sep 2007 17:48:36 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        Kip Macy <kmacy@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   Re: PERFORCE change 126455 for review
Message-ID:  <200709171748.36573.hselasky@c2i.net>
In-Reply-To: <200709152326.l8FNQwPq024216@repoman.freebsd.org>
References:  <200709152326.l8FNQwPq024216@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 16 September 2007, Kip Macy wrote:
> http://perforce.freebsd.org/chv.cgi?CH=126455
>
> Change 126455 by kmacy@kmacy_home:ethng on 2007/09/15 23:26:15
>
> 	skip busdma rx setup on x86
> 	increases rx throughput by about 15% on udp netperf recv

Really this should be done for all platforms. The mbuf m_data field should 
have a companion pointer for example m_databuffer of type "struct 
usbd_page_chache *" :

struct usbd_page_cache {
        struct usbd_page        *page_start;
        struct usbd_page        *page_end;
        struct usbd_page        *page_cur;
        uint32_t                page_offset_buf;
        uint32_t                page_offset_cur;
};

struct usbd_page {
        void                    *buffer;
        bus_size_t              physaddr;

#ifdef __FreeBSD__
        bus_dma_tag_t           tag;
        bus_dmamap_t            map;
        register_t              intr_temp;
#endif

#ifdef __NetBSD__
        bus_dma_tag_t           tag;
        bus_dmamap_t            map;
        bus_dma_segment_t       seg;
        register_t              intr_temp;
        int32_t                 seg_count;
#endif
        uint32_t                length;
};

Then based on the "tag" and "map" from the structures pointed to 
by "m_databuffer" you perform a flush/invalidate before setting up DMA.

What do you think Kip ?

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200709171748.36573.hselasky>