> > We're working on a driver for a PCI card, we're currently running into a
> > problem that's symptomatic of a cache coherency problem.  We have a area of
> > memory that we manipulate and pass a physical address to our card.  In other
> > OS's (Linux, NT), before we manipulate this memory area, we mark the area as
> > non-cachable.  Are there similar operations/system calls we can use in
> > FreeBSD?  Are there any FAQ's, Docs or man-pages that explain memory
> > usage/attributes?
> 
> Take a look at <sys/memrange.h>, and particularly mem_range_attr_set().
> 
> *However*, since the PC architecture is strongly cache coherent, you 
> probably have a problem with the design or implementation of your 
> driver:adapter protocol.  Marking an entire region of memory as 
> uncacheable is *very* inefficient; there are much better ways of 
> maintaining synchronisation without doing this.

Mark had a good point about wiring the pages so they don't get
swapped, if they are in a swappable region in another thread
discussion DMA.  He also pointed out that if he was talking
about physical pages, that he needs to make sure that they are
either contiguous, or that the DMA region doesn't span a page
boundary.

If the original poster follows -hackers, look for a subject with
"DMA in drivers", since the topic appears to be over similar
general issues.

For that matter, your scatter/gather comments in that thread were
also potentially relevent.


                                        Terry Lambert
                                        [EMAIL PROTECTED]
---
Any opinions in this posting are my own and not those of my present
or previous employers.


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to