#
331722 |
|
29-Mar-2018 |
eadler |
Revert r330897:
This was intended to be a non-functional change. It wasn't. The commit message was thus wrong. In addition it broke arm, and merged crypto related code.
Revert with prejudice.
This revert skips files touched in r316370 since that commit was since MFCed. This revert also skips files that require $FreeBSD$ property changes.
Thank you to those who helped me get out of this mess including but not limited to gonzo, kevans, rgrimes.
Requested by: gjb (re)
|
#
330897 |
|
14-Mar-2018 |
eadler |
Partial merge of the SPDX changes
These changes are incomplete but are making it difficult to determine what other changes can/should be merged.
No objections from: pfg
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
291193 |
|
23-Nov-2015 |
skra |
Revert r291142.
The not quite consistent logic for bounce pages allocation is utilizited by re(4) interface which can hang now.
Approved by: kib (mentor)
|
#
291142 |
|
21-Nov-2015 |
skra |
Fix BUS_DMA_MIN_ALLOC_COMP flag logic. When bus_dmamap_t map is being created for bus_dma_tag_t tag, bounce pages should be allocated only if needed.
Before the fix, they were allocated always if BUS_DMA_COULD_BOUNCE flag was set but BUS_DMA_MIN_ALLOC_COMP not. As bounce pages are never freed, it could cause memory exhaustion when a lot of such tags together with their maps were created.
Note that there could be more maps in one tag by current design. However BUS_DMA_MIN_ALLOC_COMP flag is tag's flag. It's set after bounce pages are allocated. Thus, they are allocated only for first tag's map which needs them.
Approved by: kib (mentor)
|
#
290316 |
|
02-Nov-2015 |
ian |
Fix an alignment check that is wrong in half the busdma implementations. This will enable the elimination of a workaround in the USB driver that artifically allocates buffers twice as big as they need to be (which actually saves memory for very small buffers on the buggy platforms).
When deciding how to allocate a dma buffer, armv4, armv6, mips, and x86/iommu all correctly check for the tag alignment <= maxsize as enabling simple uma/malloc based allocation. Powerpc, sparc64, x86/bounce, and arm64/bounce were all checking for alignment < maxsize; on those platforms when alignment was equal to the max size it would fall back to page-based allocators even for very small buffers.
This change makes all platforms use the <= check. It should be noted that on all platforms other than arm[v6] and mips, this check is relying on undocumented behavior in malloc(9) that if you allocate a block of a given size it will be aligned to the next larger power-of-2 boundary. There is nothing in the malloc(9) man page that makes that explicit promise (but the busdma code has been relying on this behavior all along so I guess it works).
Arm and mips code uses the allocator in kern/subr_busdma_buffalloc.c, which does explicitly implement this promise about size and alignment. Other platforms probably should switch to the aligned allocator.
|
#
282120 |
|
28-Apr-2015 |
hselasky |
The add_bounce_page() function can be called when loading physical pages which pass a NULL virtual address. If the BUS_DMA_KEEP_PG_OFFSET flag is set, use the physical address to compute the page offset instead. The physical address should always be valid when adding bounce pages and should contain the same page offset like the virtual address.
Submitted by: Svatopluk Kraus <onwahe@gmail.com> MFC after: 1 week Reviewed by: jhb@
|
#
273423 |
|
21-Oct-2014 |
hselasky |
Use the UAUTO SYSCTL type for exporting the bounce zone alignment, because the variable size depends on the build type.
Reported by: kib @ MFC after: 3 days
|
#
257228 |
|
27-Oct-2013 |
kib |
Add bus_dmamap_load_ma() function to load map with the array of vm_pages. Provide trivial implementation which forwards the load to _bus_dmamap_load_phys() page by page. Right now all architectures use bus_dmamap_load_ma_triv().
Tested by: pho (as part of the functional patch) Sponsored by: The FreeBSD Foundation MFC after: 1 month
|
#
255639 |
|
17-Sep-2013 |
nwhitehorn |
Make sure to copy segments back to the segs array if non-NULL. This is relied upon by bus_dmamap_load_mbuf_sg() (i.e. all network drivers).
Approved by: re (kib) MFC after: 2 weeks
|
#
255614 |
|
16-Sep-2013 |
nwhitehorn |
Fix bug in busdma: if segs is a preexisting buffer, we memcpy it into the DMA map. The length of the buffer had not yet been initialized, however, so this would copy gibberish unless it happened to be right by chance. This bug mostly only affected systems with IOMMUs.
Approved by: re (gjb) MFC after: 3 days
|
#
254025 |
|
07-Aug-2013 |
jeff |
Replace kernel virtual address space allocation with vmem. This provides transparent layering and better fragmentation.
- Normalize functions that allocate memory to use kmem_* - Those that allocate address space are named kva_* - Those that operate on maps are named kmap_* - Implement recursive allocation handling for kmem_arena in vmem.
Reviewed by: alc Tested by: pho Sponsored by: EMC / Isilon Storage Division
|
#
251900 |
|
18-Jun-2013 |
rpaulo |
Fix a KTR_BUSDMA format string.
|
#
246713 |
|
12-Feb-2013 |
kib |
Reform the busdma API so that new types may be added without modifying every architecture's busdma_machdep.c. It is done by unifying the bus_dmamap_load_buffer() routines so that they may be called from MI code. The MD busdma is then given a chance to do any final processing in the complete() callback.
The cam changes unify the bus_dmamap_load* handling in cam drivers.
The arm and mips implementations are updated to track virtual addresses for sync(). Previously this was done in a type specific way. Now it is done in a generic way by recording the list of virtuals in the map.
Submitted by: jeff (sponsored by EMC/Isilon) Reviewed by: kan (previous version), scottl, mjacob (isp(4), no objections for target mode changes) Discussed with: ian (arm changes) Tested by: marius (sparc64), mips (jmallet), isci(4) on x86 (jharris), amd64 (Fabian Keil <freebsd-listen@fabiankeil.de>)
|
#
239008 |
|
03-Aug-2012 |
jhb |
Improve the handling of static DMA buffers that use non-default memory attributes (currently just BUS_DMA_NOCACHE): - Don't call pmap_change_attr() on the returned address, instead use kmem_alloc_contig() to ask the VM system for memory with the requested attribute. - As a result, always use kmem_alloc_contig() for non-default memory attributes, even for sub-page allocations. This requires adjusting bus_dmamem_free()'s logic for determining which free routine to use. - For x86, add a new dummy bus_dmamap that is used for static DMA buffers allocated via kmem_alloc_contig(). bus_dmamem_free() can then use the map pointer to determine which free routine to use. - For powerpc, add a new flag to the allocated map (bus_dmamem_alloc() always creates a real map on powerpc) to indicate which free routine should be used.
Note that the BUS_DMA_NOCACHE handling in powerpc is currently #ifdef'd out. I have left it disabled but updated it to match x86.
Reviewed by: scottl MFC after: 1 month
|
#
232356 |
|
01-Mar-2012 |
jhb |
- Change contigmalloc() to use the vm_paddr_t type instead of an unsigned long for specifying a boundary constraint. - Change bus_dma tags to use bus_addr_t instead of bus_size_t for boundary constraints.
These allow boundary constraints to be fully expressed for cases where sizeof(bus_addr_t) != sizeof(bus_size_t). Specifically, it allows a driver to properly specify a 4GB boundary in a PAE kernel.
Note that this cannot be safely MFC'd without a lot of compat shims due to KBI changes, so I do not intend to merge it.
Reviewed by: scottl
|
#
229967 |
|
11-Jan-2012 |
nwhitehorn |
Add a memory barrier to bus_dmamap_sync(), as should have always been present. We need a sync instead of eieio, as eieio does not enforce storage ordering between main and device memory.
|
#
227309 |
|
07-Nov-2011 |
ed |
Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs.
The SYSCTL_NODE macro defines a list that stores all child-elements of that node. If there's no SYSCTL_DECL macro anywhere else, there's no reason why it shouldn't be static.
|
#
216154 |
|
03-Dec-2010 |
nwhitehorn |
Provide a simple IOMMU framework on PowerPC, which is required to support PPC hypervisors.
|
#
213282 |
|
29-Sep-2010 |
neel |
Fix bogus error message from bus_dmamem_alloc() about incorrect alignment.
The check for alignment should be made against the physical address and not the virtual address that maps it.
Sponsored by: NetApp Submitted by: Will McGovern (will at netapp dot com) Reviewed by: mjacob, jhb
|
#
209812 |
|
08-Jul-2010 |
nwhitehorn |
Replace the existing PowerPC busdma implementation with the one from amd64 (with slight modifications). This provides support for bounce buffers, which are required on systems with RAM above 4 GB.
|
#
192533 |
|
21-May-2009 |
raj |
Improve style(9), clean up.
|
#
170979 |
|
22-Jun-2007 |
yongari |
Reimplement bus_dmamap_load with bus_dmamap_load_buffer. Previously it didn't honor parent dma tag's restrictions such that an invalid dma segment could be passed to device. The driver for the device may panic in sanity check routine for the dma segment or may produce unexpected results. I have no idea how it could ever have worked before.
Reviewed by: grehan Tested by: gad Approved by: re (hrs)
|
#
170978 |
|
22-Jun-2007 |
yongari |
Honor maxsegsz of less than a page size in a DMA tag. Previously it used to return PAGE_SIZE without respect to restrictions of a DMA tag. This affected all of the busdma load functions that use _bus_dmamap_loader_buffer() as their back-end.
Reviewed by: scottl (long a ago) Approved by: re (hrs)
|
#
170421 |
|
08-Jun-2007 |
marcel |
Sync with other platforms: add kluge to use contigmalloc when the alignment is larger than the size and print a diagnostic when we didn't satisfy the alignment.
|
#
147851 |
|
09-Jul-2005 |
grehan |
The nsegs parameter to bus_dmamap_load_mbuf_sg is not required to be set to 0 on input. This caused a panic in an an MP test version of the GEM driver from Marius, and from inspection of other PCI drivers, the same problem would happen there. Fix by explicitly setting to 0.
Approved by: re
|
#
143634 |
|
15-Mar-2005 |
grehan |
Prepend underscore to bus_dmamap_{unload|sync} in line with recent busdma changes.
|
#
143063 |
|
02-Mar-2005 |
joerg |
netchild's mega-patch to isolate compiler dependencies into a central place.
This moves the dependency on GCC's and other compiler's features into the central sys/cdefs.h file, while the individual source files can then refer to #ifdef __COMPILER_FEATURE_FOO where they by now used to refer to #if __GNUC__ > 3.1415 && __BARC__ <= 42.
By now, GCC and ICC (the Intel compiler) have been actively tested on IA32 platforms by netchild. Extension to other compilers is supposed to be possible, of course.
Submitted by: netchild Reviewed by: various developers on arch@, some time ago
|
#
140314 |
|
15-Jan-2005 |
scottl |
Add bus_dmamap_load_mbuf_sg() to powerpc.
|
#
139825 |
|
07-Jan-2005 |
imp |
/* -> /*- for license, minor formatting changes
|
#
134934 |
|
08-Sep-2004 |
scottl |
Fix a problem with tag->boundary inheritence that has existed since day one and was propagated to nearly every platform. The boundary of the child needs to consider the boundary of the parent and pick the minimum of the two, not the maximum. However, if either is 0 then pick the appropriate one. This bug was exposed by a recent change to ATA, which should now be fixed by this change. The alignment and maxsegsz tag attributes likely also need a similar review in the near future.
This is a MT5 candidate.
Reviewed by: marcel Submitted by: sos (in part)
|
#
126919 |
|
13-Mar-2004 |
scottl |
Now that contigfree() does not require Giant, don't grab it in busdma.
|
#
118081 |
|
27-Jul-2003 |
mux |
- Introduce a new busdma flag BUS_DMA_ZERO to request for zero'ed memory in bus_dmamem_alloc(). This is possible now that contigmalloc() supports the M_ZERO flag. - Remove the locking of Giant around calls to contigmalloc() since contigmalloc() now grabs Giant itself.
|
#
117126 |
|
01-Jul-2003 |
scottl |
Mega busdma API commit.
Add two new arguments to bus_dma_tag_create(): lockfunc and lockfuncarg. Lockfunc allows a driver to provide a function for managing its locking semantics while using busdma. At the moment, this is used for the asynchronous busdma_swi and callback mechanism. Two lockfunc implementations are provided: busdma_lock_mutex() performs standard mutex operations on the mutex that is specified from lockfuncarg. dftl_lock() is a panic implementation and is defaulted to when NULL, NULL are passed to bus_dma_tag_create(). The only time that NULL, NULL should ever be used is when the driver ensures that bus_dmamap_load() will not be deferred. Drivers that do not provide their own locking can pass busdma_lock_mutex,&Giant args in order to preserve the former behaviour.
sparc64 and powerpc do not provide real busdma_swi functions, so this is largely a noop on those platforms. The busdma_swi on is64 is not properly locked yet, so warnings will be emitted on this platform when busdma callback deferrals happen.
If anyone gets panics or warnings from dflt_lock() being called, please let me know right away.
Reviewed by: tmm, gibbs
|
#
116907 |
|
27-Jun-2003 |
scottl |
Do the first and mostly mechanical step of adding mutex support to the bus_dma async callback scheme. Note that sparc64 does not seem to do async callbacks. Note that ia64 callbacks might not be MPSAFE at the moment. Note that powerpc doesn't seem to do async callbacks due to the implementation being incomplete.
Reviewed by: mostly silence on arch@
|
#
115343 |
|
27-May-2003 |
scottl |
Bring back bus_dmasync_op_t. It is now a typedef to an int, though the BUS_DMASYNC_ definitions remain as before. The does not change the ABI, and reverts the API to be a bit more compatible and flexible. This has survived a full 'make universe'.
Approved by: re (bmah)
|
#
113703 |
|
19-Apr-2003 |
grehan |
Fix compile warning - proc should have been thread.
|
#
113347 |
|
10-Apr-2003 |
mux |
Change the operation parameter of bus_dmamap_sync() from an enum to an int and redefine the BUS_DMASYNC_* constants as flags. This allows us to specify several operations in one call to bus_dmamap_sync() as in NetBSD.
|
#
113255 |
|
08-Apr-2003 |
des |
Introduce an M_ASSERTPKTHDR() macro which performs the very common task of asserting that an mbuf has a packet header. Use it instead of hand- rolled versions wherever applicable.
Submitted by: Hiten Pandya <hiten@unixdaemons.com>
|
#
113038 |
|
03-Apr-2003 |
obrien |
Use __FBSDID rather than rcsid[].
|
#
112436 |
|
20-Mar-2003 |
mux |
Use atomic operations to increment and decrement the refcount in busdma tags. There are currently no tags shared accross different drivers so this isn't needed at the moment, but it will be required when we'll have a proper newbus method to get the parent busdma tag.
|
#
112196 |
|
13-Mar-2003 |
mux |
Grab Giant around calls to contigmalloc() and contigfree() so that drivers converted to be MP safe don't have to deal with it.
|
#
111119 |
|
19-Feb-2003 |
imp |
Back out M_* changes, per decision of the TRB.
Approved by: trb
|
#
110335 |
|
04-Feb-2003 |
harti |
Fix a problem in bus_dmamap_load_{mbuf,uio} when the first mbuf or the first uio segment is empty. In this case no dma segment is create by bus_dmamap_load_buffer, but the calling routine clears the first flag. Under certain combinations of addresses of the first and second mbuf/uio buffer this leads to corrupted DMA segment descriptors. This was already fixed by tmm in sparc64/sparc64/iommu.c.
PR: kern/47733 Reviewed by: sam Approved by: jake (mentor)
|
#
109935 |
|
27-Jan-2003 |
benno |
Back the previous commit out. It didn't actually fix the problem I was seeing and the memory barrier isn't needed with the bridges we're using.
Fix the function style however.
|
#
109919 |
|
27-Jan-2003 |
benno |
Flesh out bus_dmamap_sync.
|
#
109623 |
|
21-Jan-2003 |
alfred |
Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
|
#
108939 |
|
08-Jan-2003 |
grehan |
Implement bus_dmamap_load_mbuf/bus_dmamap_load_uio. Tested load_mbuf with GEM ethernet driver.
Submitted by: Hiten Pandya <hiten@unixdaemons.com> (modified by grehan)
|
#
99657 |
|
09-Jul-2002 |
benno |
1) Add busdma machdep code. 2) Add bus_pio.h and bus_memio.h (which do nothing).
Submitted by: Peter Grehan <peterg@ptree32.com.au> (1)
|
#
78342 |
|
16-Jun-2001 |
benno |
This commit (along with one pending in sys/dev/ofw and one in sys/conf) give us our first minimal glimpse of PowerPC support.
With this code we can get to the "mountroot>" prompt on my Apple iMac. We can't get any further due to lack of clock and interrupt handling, among other things. This does however mean that pmap and VM are initialising.
We're fairly dependant on OpenFirmware at this point, but I hope to add support for other classes of firmware at a later stage.
Reviewed by: obrien, dfr
|