summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath/if_ath_debug.c
Commit message (Collapse)AuthorAgeFilesLines
* Pull in r267961 and r267973 again. Fix for issues reported will follow.hselasky2014-06-281-2/+1
|
* Revert r267961, r267973:gjb2014-06-271-1/+2
| | | | | | | | | | These changes prevent sysctl(8) from returning proper output, such as: 1) no output from sysctl(8) 2) erroneously returning ENOMEM with tools like truss(1) or uname(1) truss: can not get etype: Cannot allocate memory
* Extend the meaning of the CTLFLAG_TUN flag to automatically check ifhselasky2014-06-271-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | there is an environment variable which shall initialize the SYSCTL during early boot. This works for all SYSCTL types both statically and dynamically created ones, except for the SYSCTL NODE type and SYSCTLs which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to be used in the case a tunable sysctl has a custom initialisation function allowing the sysctl to still be marked as a tunable. The kernel SYSCTL API is mostly the same, with a few exceptions for some special operations like iterating childrens of a static/extern SYSCTL node. This operation should probably be made into a factored out common macro, hence some device drivers use this. The reason for changing the SYSCTL API was the need for a SYSCTL parent OID pointer and not only the SYSCTL parent OID list pointer in order to quickly generate the sysctl path. The motivation behind this patch is to avoid parameter loading cludges inside the OFED driver subsystem. Instead of adding special code to the OFED driver subsystem to post-load tunables into dynamically created sysctls, we generalize this in the kernel. Other changes: - Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask" to "hw.pcic.intr_mask". - Removed redundant TUNABLE statements throughout the kernel. - Some minor code rewrites in connection to removing not needed TUNABLE statements. - Added a missing SYSCTL_DECL(). - Wrapped two very long lines. - Avoid malloc()/free() inside sysctl string handling, in case it is called to initialize a sysctl from a tunable, hence malloc()/free() is not ready when sysctls from the sysctl dataset are registered. - Bumped FreeBSD version to indicate SYSCTL API change. MFC after: 2 weeks Sponsored by: Mellanox Technologies
* TX EDMA debugging fixes:adrian2012-11-051-6/+7
| | | | | * Do the calculation for each ath_buf, rather than just the first * Correct the calculation in the first place.
* Add a debug method to dump the EDMA TX status descriptor contents out.adrian2012-11-031-0/+12
| | | | | This requires some HAL API changes to be useful, as there's no way right now to pull out the TX status descriptor contents.
* Debugging output fixes:adrian2012-09-241-6/+7
| | | | | | | | * use the correct frame status - although the completion descriptor is the _last_ in the frame/aggregate, the status is currently stored in the _first_ buffer. * Print out ath_buf specific fields once, not per descriptor in an ath_buf.
* Only print the descriptor contents!adrian2012-08-271-2/+2
| | | | | | Found by: magical CLANG build environments Submitted by: Sevan <venture37@gmail.com>
* Make sure all of the buffers are printed, rather than (n-1).adrian2012-08-201-4/+2
|
* Extend the TX descriptor debug printing to be properly aware ofadrian2012-08-191-4/+77
| | | | | | | | | | | | | | | | | EDMA code. * create a new TX EDMA descriptor struct to represent TX EDMA descriptors when doing debugging; * implement an EDMA printing function which: + hardcodes the TX map size to 4 for now; + correctly prints out the number of segments - there's one descriptor for up to 4 buffers (segments), not one for each segment; + print out 4 DS buffer and len pointers; + print out the correct number of DWORDs in the TX descriptor. TODO: * Remove all of the hard-coded stuff. Ew.
* Add the AR9380 HAL to the TX descriptor debugging, in order to dump alladrian2012-08-111-1/+2
| | | | of the descriptor contents.
* Extend the RX descriptor completion debugging to log the largeradrian2012-07-091-0/+10
| | | | | | | | AR93xx receive descriptors. This isn't entirely complete - the AR93xx and later descriptors don't have a link/buffer pointer; the descriptor contents just start.
* Revert r233227 and followup commits as it breaks CCMP PN replay detection.adrian2012-06-111-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | This showed up when doing heavy UDP throughput on SMP machines. The problem with this is because the 802.11 sequence number is being allocated separately to the CCMP PN replay number (which is assigned during ieee80211_crypto_encap()). Under significant throughput (200+ MBps) the TX path would be stressed enough that frame TX/retry would force sequence number and PN allocation to be out of order. So once the frames were reordered via 802.11 seqnos, the CCMP PN would be far out of order, causing most frames to be discarded by the receiver. I've fixed this in some local work by being forced to: (a) deal with the issues that lead to the parallel TX causing out of order sequence numbers in the first place; (b) fix all the packet queuing issues which lead to strange (but mostly valid) TX. I'll begin fixing these in a subsequent commit or five. PR: kern/166190
* Migrate ath_debug and sc_debug from an int to a uint64_t / QUAD;adrian2012-05-151-3/+3
| | | | | | | | | | | | | add some more BAR debugging logic. * Change the definition of ath_debug and ath_softc.sc_debug from int to uint64_t; * Change the relevant sysctls; * Add a new BAR TX debugging field; * Use this in if_ath_tx. This has been tested by using the sysctl program, which happily allows for fields > 32 bits to be configured.
* Remove duplicate txflags field from ath_buf.adrian2012-04-071-3/+2
| | | | | rename bf_state.bfs_flags to bf_state.bfs_txflags, as that is what it effectively is.
* Delay sequence number allocation for A-MPDU until just before the frameadrian2012-03-201-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | is queued to the hardware. Because multiple concurrent paths can execute ath_start(), multiple concurrent paths can push frames into the software/hardware TX queue and since preemption/interrupting can occur, there's the possibility that a gap in time will occur between allocating the sequence number and queuing it to the hardware. Because of this, it's possible that a thread will have allocated a sequence number and then be preempted by another thread doing the same. If the second thread sneaks the frame into the BAW, the (earlier) sequence number of the first frame will be now outside the BAW and will result in the frame being constantly re-added to the tail of the queue. There it will live until the sequence numbers cycle around again. This also creates a hole in the RX BAW tracking which can also cause issues. This patch delays the sequence number allocation to occur only just before the frame is going to be added to the BAW. I've been wanting to do this anyway as part of a general code tidyup but I've not gotten around to it. This fixes the PR. However, it still makes it quite difficult to try and ensure in-order queuing and dequeuing of frames. Since multiple copies of ath_start() can be run at the same time (eg one TXing process thread, one TX completion task/one RX task) the driver may end up having frames dequeued and pushed into the hardware slightly/occasionally out of order. And, to make matters more annoying, net80211 may have the same behaviour - in the non-aggregation case, the TX code allocates sequence numbers before it's thrown to the driver. I'll open another PR to investigate this and potentially introduce some kind of final-pass TX serialisation before frames are thrown to the hardware. It's also very likely worthwhile adding some debugging code into ath(4) and net80211 to catch when/if this does occur. PR: kern/166190
* Add support to the TX descriptor printing code to follow ath_bufadrian2011-11-081-19/+30
| | | | | | chains. This allows for debugging of aggregate frames. Sponsored by: Hobnob, Inc.
* Break out the debug macros from if_ath.c into if_ath_debug.[ch] .adrian2011-01-291-0/+156
This is prep work for breaking out the TX path into a separate set of source files.
OpenPOWER on IntegriCloud