Re: [PATCH] Define wc_wmb, a write barrier for PCI write combining

From: Jesse Barnes
Date: Tue Feb 28 2006 - 12:47:24 EST


On Saturday, February 25, 2006 11:01 am, Bryan O'Sullivan wrote:
> On Sat, 2006-02-25 at 14:28 +0100, Andi Kleen wrote:
> > Before we can add such a macro I suspect you would first
> > need to provide some spec how that "portable write combining"
> > is supposed to work and get feedback from the other architectures.
>
> It seems like we'd need a function that tries to enable or disable
> write combining on an MMIO memory range. This would be implemented by
> arches that support it, and would fail on others. Drivers could then
> try to enable write combining, and if it failed, either bail, print a
> warning message, or do something else appropriate.
>
> So on i386 and x86_64, this function would fiddle with the MTRRs. On
> powerpc, it would either configure the northbridge appropriately or
> fail. On other arches, I don't know enough to say, so the default
> would be to fail.
>
> Is this reasonable? I can code a strawman implementation up, if the
> basic idea looks sane.

Something like this would be really handy. Check out fbmem.c:fb_mmap for
a bad example of what can happen w/o it.

In fact, I think it might make sense to export WC functionality via an
mmap flag (on an advisory basis since the platform may not support it or
there may be aliasing issues that prevent it); having an arch
independent routine to request it would make that addition easy to do in
generic code. (In particular I wanted this for the sysfs PCI interface.
Userspace apps can map PCI resources there and it would be nice if they
could map them with WC semantics if requested.)

I don't think it addresses the flushing issue you seem to be concerned
about though. I don't know the exact semantics of sfence, but I think
bcrl is likely right that it won't absolutely guarantee that your writes
have hit the device before proceeding (though it may do that on some CPU
implementations).

Thanks,
Jesse
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/