[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110902172850.GB6619@n2100.arm.linux.org.uk>
Date: Fri, 2 Sep 2011 18:28:50 +0100
From: Russell King - ARM Linux <linux@....linux.org.uk>
To: Ben Hutchings <bhutchings@...arflare.com>
Cc: Phil Sutter <phil.sutter@...rinet.com>,
linux-arm-kernel@...ts.infradead.org, netdev@...r.kernel.org,
"David S. Miller" <davem@...emloft.net>
Subject: Re: [PATCH] af_packet: flush complete kernel cache in
packet_sendmsg
On Fri, Sep 02, 2011 at 02:46:17PM +0100, Ben Hutchings wrote:
> On Fri, 2011-09-02 at 13:08 +0200, Phil Sutter wrote:
> > This flushes the cache before and after accessing the mmapped packet
> > buffer. It seems like the call to flush_dcache_page from inside
> > __packet_get_status is not enough on Kirkwood (or ARM in general).
> > ---
> > I know this is far from an optimal solution, but it's in fact the only working
> > one I found.
> [...]
>
> This is ridiculous. If flush_dcache_page() isn't doing everything it
> should, you need to fix that.
It does do everything it should - which is to perform maintanence on
page cache pages. It flushes the kernel mapping of the page. It
also flushes the userspace mappings of the page which it finds by
walking the mmap list via the associated struct page. It does not
touch vmalloc mappings because it has no way to know whether they
exist or not.
It doesn't do so much for anonymous pages - to do so would only
duplicate what flush_anon_page() does at the very same callsites.
Plus the mmap list isn't available for such pages so there's no
way to find out what userspace addresses to flush.
If the AF_PACKET buffers are created from anonymous pages and it's
using flush_dcache_page(), it's using the wrong interface.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists