Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

athp_send_mgmt() filters out too much #43

Open
erikarn opened this issue Sep 20, 2020 · 0 comments
Open

athp_send_mgmt() filters out too much #43

erikarn opened this issue Sep 20, 2020 · 0 comments

Comments

@erikarn
Copy link
Owner

erikarn commented Sep 20, 2020

This manifests as a station thinking it's still associated but the athp + hostap combo not; net80211 sends unauthed error mgmt frames back to the station but because the subtype matches QOSNULL they're dropped.

my athp_send_mgmt() routine was an initial hack to filter out scan related frames before we had proper offloaded scan support and yes, QOSNULL / NO_DATA frames won't show up in this transmit path.

erikarn pushed a commit that referenced this issue Sep 20, 2020
I was .. over-zealous when filtering out frames and filtered out some
that were not quite right.  QOSNULL and NO_DATA are data frames, not mgmt
frames and their subtype ends up matching some DEAUTH stuff we DO want
to send out.
Geramy added a commit to Geramy/athp that referenced this issue Dec 28, 2021
commit 84e2d59
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Sun Apr 18 10:15:19 2021 -0700

    Disable LDPC transmit in the rate control for now.

    I have somehow messed up LDPC negotiation here and it's breaking when
    speaking to non-LDPC devices.

    I'll re-enable this once I figure out what the heck is going on here
    with the negotiation bits.

commit dec5c8d
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Sat Mar 20 19:48:31 2021 -0700

    Start methodising the is_in_peer_table stuff so I can doubly check locking.

    So, quick background.

    net80211 doesn't do any buffering/queueing in the network stack between
    adding a node and transmitting a frame.  It expects that adding a node,
    allocating/setting/changing a key, etc are all immediate things that
    don't sleep - and then once the call returns, a frame can be transmitted.

    This is true for like, fullmac devices like ath(4), but it's definitely
    not true for firmware things.  So, athp and a lot of other drivers just
    push those updates into a deferred queue.  Trouble is, they may then
    just transmit stuff with a not-yet-programmed peer, and some hardware
    may or may not get angery at you for doing.

    So yes, although net80211 needs to grow this support to make firmware
    NICs a LOT easier to implement, for now we're stuck having to track
    this ourselves.  Hence, is_in_peer_table and its various checks.

    The checks aren't enforced or methodized yet - I have to go convert
    them to use the CONF lock everywhere.  But setting it between 1 and
    0 was easy to do, so it's done here.

commit 3fb2a0a
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Wed Mar 17 22:22:45 2021 -0700

    whoops ! :-)

    Well, now I know that code path is tested thoroughly :-)

commit 371ac55
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Wed Mar 17 16:40:53 2021 -0700

    * Extract out the deferred-tx-queue-is-empty check into a method,
      so I can enforce locking
    * Fix a DATA lock issue I missed when futzing with this; now it
      doesn't crash on probe responses (and they're being correctly
      deferred now!)

commit aa7eecc
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Tue Mar 16 22:41:43 2021 -0700

    More subtle locking things!

    * Delete old/dead comments
    * Comment and add lock / no-lock assertions where I found I messed up
    * When doing deferred tx, drain the whole deferred queue into a
      local queue whilst holding DATA lock, so we don't have to hold it
      whilst transmitting.
    * Ensure DATA_LOCK is around any other peer-list flag stuff

commit 86e8d01
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Tue Mar 16 19:19:12 2021 -0700

    Migrate the arvif stuff to sit behind its own lock.

    I hate it, but it's made the conf/data lock ordering problem go away.
    I still hate it though and we need a better locking strategy here.

commit 634703c
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Tue Mar 16 19:17:13 2021 -0700

    Fix athp_newstate() locking a bit.

    Yeah it's ugly, sigh.

commit 202ed98
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Fri Mar 12 13:32:05 2021 -0800

    Comment about the locks and some hints on how the lock acquisitions
    should look!

commit 19a040e
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Thu Mar 11 23:44:54 2021 -0800

    Initial UNTESTED (cause I want a backup) work in progress to bring
    sanity to the locking in if_athp_main.c.

    I'm trying to get CONF_LOCK for most of the new things, and use
    DATA_LOCK for the in-peer-table bits and the deferred transmit work.
    I don't want to hold DATA_LOCK across calling the frame transmit
    routine, for example

commit 0756ba0
Merge: 090f3ce 2493868
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Thu Mar 11 23:06:14 2021 -0800

    Merge branch 'ahc_20200804_transmit_fixes' of github.com:erikarn/athp into ahc_20200804_transmit_fixes

commit 090f3ce
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Thu Mar 11 22:55:33 2021 -0800

    Don't use the ATHP_LOCK here; I'm not sure whether we're going to keep
    it and what to use it for, but this is the only place it's currently
    used.

commit e82b171
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Fri Feb 12 17:54:49 2021 -0800

    Yeha, new machine. oops.

commit 51d86e2
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Fri Nov 27 07:52:22 2020 -0800

    Turn the "deferred transmit schedule" into a method rather than
    calling the taskqueue directly.

    Whilst here, update/add some comments!

commit 8a68f8a
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Thu Nov 26 19:44:27 2020 -0800

    More documentation around where i need to figure out all of this locking.

commit e0f6e50
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Sep 16 15:52:50 2020 -0700

    First pass at deferred transmit queue management.

    I'm doing this completely with no locking right now and I'll likely
    have to pick /a/ lock before i land this, but it should be good
    enough to at least test out that I can defer things:

    * if the peer isn't added, defer
    * if there's frames in the deferred queue, still defer
    * once a peer is added, run the taskqueue to send pending frames

    This doesn't yet do locking, keep statistics or actually
    be neatly methodized.

commit 549de8d
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Aug 1 12:58:26 2020 -0700

    Begin fleshing out what will hopefully become the target deferred
    transmit queue bits.

commit a717d32
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Sep 19 20:43:34 2020 -0700

    * move the flush/dequeue until after the firmware peer has been marked as down;
    * add some debugging

    This fixes some crashes I was seeing because of racing with no locks.
    Yes, I gotta add locks.

commit 7a17a15
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Sep 16 15:52:50 2020 -0700

    First pass at deferred transmit queue management.

    I'm doing this completely with no locking right now and I'll likely
    have to pick /a/ lock before i land this, but it should be good
    enough to at least test out that I can defer things:

    * if the peer isn't added, defer
    * if there's frames in the deferred queue, still defer
    * once a peer is added, run the taskqueue to send pending frames

    This doesn't yet do locking, keep statistics or actually
    be neatly methodized.

commit 6b70fcd
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Aug 1 12:58:26 2020 -0700

    Begin fleshing out what will hopefully become the target deferred
    transmit queue bits.

commit 76ce949
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Fri Feb 12 18:06:57 2021 -0800

    Remove some unused fields

commit 2493868
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Fri Nov 27 07:52:22 2020 -0800

    Turn the "deferred transmit schedule" into a method rather than
    calling the taskqueue directly.

    Whilst here, update/add some comments!

commit 3d0563e
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Thu Nov 26 19:44:27 2020 -0800

    More documentation around where i need to figure out all of this locking.

commit 6d763a2
Merge: a09f4b6 671fe99
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Sep 19 20:45:55 2020 -0700

    Merge branch 'ahc_20200804_transmit_fixes' of github.com:erikarn/athp into ahc_20200804_transmit_fixes

commit a09f4b6
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Sep 19 20:43:34 2020 -0700

    * move the flush/dequeue until after the firmware peer has been marked as down;
    * add some debugging

    This fixes some crashes I was seeing because of racing with no locks.
    Yes, I gotta add locks.

commit a62aabb
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Sep 16 15:52:50 2020 -0700

    First pass at deferred transmit queue management.

    I'm doing this completely with no locking right now and I'll likely
    have to pick /a/ lock before i land this, but it should be good
    enough to at least test out that I can defer things:

    * if the peer isn't added, defer
    * if there's frames in the deferred queue, still defer
    * once a peer is added, run the taskqueue to send pending frames

    This doesn't yet do locking, keep statistics or actually
    be neatly methodized.

commit 640e09d
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Aug 1 12:58:26 2020 -0700

    Begin fleshing out what will hopefully become the target deferred
    transmit queue bits.

commit 12e36d5
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Sep 19 20:41:48 2020 -0700

    Fix issue erikarn#43 - don't filter out frames we shouldn't be.

    I was .. over-zealous when filtering out frames and filtered out some
    that were not quite right.  QOSNULL and NO_DATA are data frames, not mgmt
    frames and their subtype ends up matching some DEAUTH stuff we DO want
    to send out.

commit 671fe99
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Sep 16 15:52:50 2020 -0700

    First pass at deferred transmit queue management.

    I'm doing this completely with no locking right now and I'll likely
    have to pick /a/ lock before i land this, but it should be good
    enough to at least test out that I can defer things:

    * if the peer isn't added, defer
    * if there's frames in the deferred queue, still defer
    * once a peer is added, run the taskqueue to send pending frames

    This doesn't yet do locking, keep statistics or actually
    be neatly methodized.

commit 89aba6f
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Aug 1 12:58:26 2020 -0700

    Begin fleshing out what will hopefully become the target deferred
    transmit queue bits.

commit f5a4e9d
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Sep 16 15:20:24 2020 -0700

    Fix an llvm11 complaint

commit 02d173e
Author: bzfbd <24442726+bzfbd@users.noreply.github.com>
Date:   Tue Aug 25 22:11:26 2020 +0000

    athp: make compile with clang11 (erikarn#41)

    Rather than using a void * for a buffer, when we use it as a char *
    declare the variable as a char *; in addition there is no need to
    pre-initialise it with the current code, so remove the = NULL assignment.

    Sponsored by:   Rubicon Communications, LLC (d/b/a "Netgate")

    Co-authored-by: Bjoern A. Zeeb <bz@FreeBSD.ORG>

commit 984c78b
Author: bzfbd <24442726+bzfbd@users.noreply.github.com>
Date:   Tue Aug 25 22:10:29 2020 +0000

    athp: adjust ieee80211_add_channel_list*() to NET80211_CBW_FLAG_* flags. (erikarn#42)

    After FreeBSD SVN r364673 ieee80211_add_channel_list_[25]ghz() take
    bitflags to indicate HT40/VHT80/.. While the 1 for HT40 was preserved
    switch to the bitflags to be able to also pass VHT80 in.

    Sponsored by:   Rubicon Communications, LLC (d/b/a "Netgate")

    Co-authored-by: Bjoern A. Zeeb <bz@FreeBSD.ORG>

commit 2c8fbd9
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Aug 12 20:58:39 2020 -0700

    Remove now incorrect statement about freeing the mbufs.

    But yes, we should handle fragments by tossing them; this hardware
    does fragment offload so we shouldn't be doing it in net80211.

commit 2f761a4
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Aug 12 20:57:18 2020 -0700

    Whoops, add missing bit

commit f5ca77f
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Aug 1 13:25:02 2020 -0700

    Refactor out the transmit handling into a separate function.

    athp_transmit() and athp_raw_xmit() now use the same shared
    function to do their dirty work.  Unfortuntely, sigh, due to
    how those two functions /super subtly/ have different calling
    conventions, the implementation leaves a lot to be desired.

    This needs a /lot/ more testing before it's merged into
    master.

commit f693279
Author: adrian chadd <adrian@freebsd.org>
Date:   Thu Jul 30 16:07:26 2020 -0700

    [athp] Fix firmware startup + VAP running tracking; remove current restart logic

    * remove the current restart logic; I think we should reimplement
      it in a slightly less recursive way and make it go through the
      ATH10K_STATE logic.

    * Don't use sc_isrunning for whether firmware is running or not -
      this breaks when creating the first interface (which starts firmware,
      adds interfaces via WMI but doesn't start them) and doing the first
      ifconfig up.

    Before this change, the first VAP would load firmware and set sc_isrunning=1;
    but when athp_parent() is called it wouldn't call ieee80211_start_all()
    to kick all the VAP state machines.

    Now ar->state is used to see if the firwmare is up or not, which is what
    it's for.  sc_isrunning is now exclusively used for tracking whether
    we've started VAPs or not.

commit 5d38462
Merge: 638ab98 f825f23
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Jul 18 19:58:27 2020 -0700

    Merge branch 'ahc_2020707_crypto_key_fixes'

commit 638ab98
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jul 14 22:44:56 2020 -0700

    [athp] Fix the phymode configuration when associating nodes in AP mode.

    I'm testing an AR9380 STA (HT20) on a 5GHz VHT20 channel AP.
    Because the phymode was set to ic_curchan, this is VHT20
    and the firmware thus tries VHT rates that just fail.
    The per-node phymode needs to be the node channel information,
    NOT the AP channel.

    This should also be fine in STA mode as the BSS channel should
    be set A-OK.

    (cherry picked from commit f825f23)

commit f825f23
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jul 14 22:44:56 2020 -0700

    [athp] Fix the phymode configuration when associating nodes in AP mode.

    I'm testing an AR9380 STA (HT20) on a 5GHz VHT20 channel AP.
    Because the phymode was set to ic_curchan, this is VHT20
    and the firmware thus tries VHT rates that just fail.
    The per-node phymode needs to be the node channel information,
    NOT the AP channel.

    This should also be fine in STA mode as the BSS channel should
    be set A-OK.

commit f69c692
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jul 7 23:19:12 2020 -0700

    [athp] Migrate over to using a private copy of the key state.

    We can't rely on ieee80211_key contents being stable after the
    call to our crypto routines, so don't!  Take a copy of the data
    into our own struct and pass that around.

    This should also let me clear up the pairwise magic value crap
    afterwards.

    Tested:

    * STA mode, WPA

    TODO:

    * Test AP, STA modes in WPA thoroughly, through group rekey and
      station join/leave
    * ACTUALLY TEST WEP and OPEN! Aiee!  This is a section of code
      where subtle messes can break everything.

commit c9e6576
Author: adrian chadd <adrian@freebsd.org>
Date:   Thu Jun 18 09:28:57 2020 -0700

    [athp] Fix the SKB RX hash function for in-order receive buffer tracking.

    This path is only used by the later QCA6174 hardware (hw 3.2), not the
    earlier QCA6174 hardware.

    This fixes a boot-time panic when the driver loads, but there's still
    some issues sending WMI commands to this particular hardware revision.

    My guess is that things aren't fully initialised enough for HTC to
    operate after the firmware is loaded and the BMI response occurs.

commit 3d759a2
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jun 16 20:55:49 2020 -0700

    Turn the inline into hopefully a compiled-out no-op without INVARIANTS.

    I'll go test this a bit more after this commit on a non-INVARIANTS
    -HEAD build (on a much faster machine, heh) to see if it works!

commit c967f7c
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jun 16 16:40:23 2020 -0700

    hal/chip_id.h already contains the chip IDs; so use that instead.

commit c2c2e69
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jun 16 16:38:26 2020 -0700

    From bz - fix up indenting

commit 6d6dd62
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Jun 16 16:33:16 2020 -0700

    From bz - convert over QUAD to UQUAD; the types are uint64_t.

commit e3b8fd9
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon Jun 15 18:53:44 2020 -0700

    Remove the private uapsd definitions now; use the net80211 ones.

commit a404a85
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon Jun 15 17:55:03 2020 -0700

    Initial UAPSD/WME updates.

    I think this is correct for both hostap and station mode operation.
    It unblocks setting up uapsd if it's configured in hostap or station
    modes and I'm doing some further tinkering with it before moving
    onto the next thing (likely crypto key deletion with a now-freed
    ieee80211_key reference. ugh.)

commit 40570cb
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon Jun 15 12:47:27 2020 -0700

    Create a new tx buffer pool for management/wmi/beacons.

    This fixes a big issue i've seen during active traffic tests
    where the TX buffer pool gets temporarily exhausted leading to
    beacon buffers and wmi commands failing.

    Beacons and HTC (ie, WMI and other control paths) now come out
    of a smaller buffer pool that's separate from the main TX data
    path.

    If any buffers are alloc/freed into different pools the
    buffer management code will log a warning.

    Tested:

    * QCA6174 STA mode
    * QCA9880 AP + STA modes

commit 587417a
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon Jun 15 12:00:17 2020 -0700

    In case the commit hash changes, add in the commit message this is based
    off of.

commit 3261e96
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Jun 13 23:06:11 2020 -0700

    add some more debugging behind HTT_TX, including adding the node
    MAC address (/not/ the destintation MAC!) for HTT TX'ed frames.

    Also log errors when we fail to allocate msdu related bits rather
    than just throwing a silent error.

    This helped me figure out that my traffic issues are actually
    due to CABQ not being serviced correctly and the firmware contiuing
    to buffer multicast frames until it fills 1024; then the firmware
    goes to lunch.

commit c5d0372
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Jun 13 23:04:56 2020 -0700

    Add some debugging around peer map/unmap and wmi peer add/remove.
    I'm using this to narrow down situations where we're not adding and
    removing peers whilst flushing TX right.

commit 6ed05cc
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Jun 13 23:04:04 2020 -0700

    Add a separate debug section for HTT TX frames. I'll commit the code
    that uses this soon.

commit 0859a6b
Author: adrian chadd <adrian@freebsd.org>
Date:   Sat Jun 13 23:02:50 2020 -0700

    Convert over to use the new split node alloc/init.

    init isn't yet deferred so we still HAVE to defer it, but at least now
    we can correctly hold node references whilst doing it.

    This should help fix the issue where we are seeing use-after-free.
    It still may not be quite right when net80211 goes and spams node
    delete/add; I need to dig into that some more, especially how it
    does this with the BSS node for dumb reasons.

commit 4cf9678
Author: Bjoern A. Zeeb <bz@FreeBSD.ORG>
Date:   Tue Jun 2 13:51:24 2020 +0000

    Add missing pci_if.h to Makefile SRCS glue.

    Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate")

    (cherry picked from commit 72bc95b)

commit 9e847ef
Author: adrian chadd <adrian@freebsd.org>
Date:   Fri Jun 12 20:13:24 2020 -0700

    Create a new buffer pool - tx management - eventually for TX'ing
    non data frames.

commit 99792cc
Author: adrian chadd <adrian@freebsd.org>
Date:   Fri Jun 12 20:11:38 2020 -0700

    Add a new buffer type - tx management - for some later upcoming stuff
    where the TX buffers and HTC/WMI/beacon buffers come from a different pool.

    This should hopefully address/fix issues where the transmit ring
    fills up and it stops processing WMI commands, sending beacons, etc.)

commit 4db87e7
Author: adrian chadd <adrian@freebsd.org>
Date:   Fri Jun 12 08:53:57 2020 -0700

    * correct documentation for the hostap/ibss station add method
    * log the current tx queue depth when a flush fails

commit 29b197b
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Jun 10 22:27:00 2020 -0700

    [athp] implement clear peer keys

    Tested: QCA9880 AP mode!

commit eb04336
Author: Adrian Chadd <adrian@FreeBSD.org>
Date:   Tue Jun 2 10:11:09 2020 +0000

    * Add support for per-vap slot time config.
    * Remove the global slot time method and global wme update method.
    * Delete old/dead code.

    This removes one of the long-standing TODO's - the per-VAP slot time
    configuration.

commit e4f191e
Author: Bjoern A. Zeeb <bz@FreeBSD.ORG>
Date:   Tue Jun 2 10:11:09 2020 +0000

    Initialise the firmware_log early on before the tunables are read
    as after that we might get into the log functions passing the
    bitmask and would panic as the mutex would not be initialised.

    Fixes Issue erikarn#31.

    Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate")

    (cherry picked from commit 1fa1cd5)

commit eb82cf2
Author: adrian chadd <adrian@freebsd.org>
Date:   Wed Jun 3 16:19:21 2020 -0700

    [athp] Fix beacon buffer assignment.

    This finishes fixing the beacon buffer assignment code from the previous
    pull request.  Will need to do some more testing.

commit dd8ba8d
Author: bzfbd <24442726+bzfbd@users.noreply.github.com>
Date:   Tue Jun 2 21:05:20 2020 +0000

    A double-free problem (erikarn#26)

    * Disable an athp_freebuf() call in ath10k_wmi_event_host_swba() which
    lead to double-free panics and also still was assigned for use later
    on.

    Sponsored by:   Rubicon Communications, LLC (d/b/a "Netgate")

    * In ath10k_wmi_event_host_swba() rather than freeing the bcn athp_buf
    (which leads to a double-free) in case we do not have a beacon buffer,
    map the beacon, and pass it on to the downstream layers to pass it on
    and out.

    Fixes Issue erikarn#29.

    Sponsored by:   Rubicon Communications, LLC (d/b/a "Netgate")

    Co-authored-by: Bjoern A. Zeeb <bz@FreeBSD.ORG>

commit ea7f1ad
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue May 12 11:38:42 2020 -0700

    Free the node ref if we're not returning an error here and we
    just consume the mbuf.

    I'm about to go and redo both the raw transmit and the data transmit
    paths in preparation for potential software queueing, so I'd like
    to at least have this code be right before I screw with it further.

commit 89e8cb9
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon May 11 22:53:35 2020 -0700

    Get rid of sc_snd; it's a holdover from the initial work I did during
    super early bring-up.

    There's no need for a global send queue; but there IS a need for a
    per-vif and per-peer send queue in order to queue up frames until
    an asynchronous node change and encryption key programming.

    (The firmware does some queueing internally for encryption key programming
    and reprogramming but once the queue is there for node add, it's trivial
    to buffer frames for everything that needs it.)

commit 6c1b344
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon May 11 22:40:02 2020 -0700

    Don't do beacon init under locks; this trips up the locking protocol for busdma.

    Instead, do it when the vif is created and destroyed, outside of interface
    add/remove.

    I've created/destroyed a hostap VAP (and yes, brought it up so it comes up)
    and it seems to work? :P

    Thanks to Geramy Loveless for finding this was a problem!

commit a34835f
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon May 11 22:39:51 2020 -0700

    Comment that yes, initialisation is deferred!

commit 8be3f2e
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon May 11 22:39:18 2020 -0700

    We do locking now in fwlog; however .. well, I do need to fix the locking some more.

commit cda0415
Author: adrian chadd <adrian@freebsd.org>
Date:   Mon May 11 22:20:18 2020 -0700

    Use WITNESS_WARN() to note if locks are held across busdma calls that require no locks be held.

    This definitely lights up the fact that the hostapd vif descdma is allocated inside
    the conf lock.  Tsk adrian.

commit 31bd35d
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Mar 24 14:59:08 2020 -0700

    Add epoch tracker support for running on FreeBSD-HEAD.

    (Yes, this should eventually turn into something that only happens
    on -HEAD..)

commit 1dd3164
Author: adrian chadd <adrian@freebsd.org>
Date:   Tue Mar 24 14:53:13 2020 -0700

    Silence a warning that popped up in the latest freebsd-head update.

commit 6c644e7
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Thu Feb 7 14:40:24 2019 -0800

    Path update

commit 4512572
Author: Adrian Chadd <adrian@freebsd.org>
Date:   Thu Feb 7 14:38:58 2019 -0800

    Revert "New athp arvif lock (erikarn#9)"

    This reverts commit de9e6e1.

commit 79e0eef
Author: Geramy <admin@glscripting.org>
Date:   Thu Feb 7 14:36:07 2019 -0800

    test request (erikarn#10)

    * changed timeout to 2 seconds

    for sloweer systems I have changed the ATH10K_HTC_WAIT_TIMEOUT_MSEC to 2 seconds instead.

    * took back the change.

    Instead i'll implement a system that unloads the firmware when the capabilities don't come in correctly and the firmware load crashes. kldload and unload should not have to deal with internal driver issues.

    * add code to force the driver to attempt to retry to load the interface up to 6 times.

    add code to force the driver to attempt to retry to load the interface up to 6 times. This should fix kldload issues, as long as the wifi card will work during boot we can automate bringing up the interface in scripts. Thats our first goal.

    * re-order

    * re-trying probe fw until sucessful or errors at the 6th try.

    * undo changes

    * attempt at retrying to wait for htc to complete and return

    stopping hif and restarting hif if htc wait target doesnt finish succesfully.

    * removed return on hif_stop

    * attemping to recall ath10k_core_probe_fw

    trying to reset the atheros chip to to load up properly on error.

    * add sleep statement

    sleep a little to let the device catch up and be ready.

    * dumb auto programming features of VSCode capatilized Sleep

    * not use to freebsd kernel developing.

    I decided to use pause_sig in the case a signal called us to release before we end sleeping.

    * added in a ath10k_core_stop

    need to stop the core its not being called on error. I also have set bmi.done_sent = false.

    * oops forgot semicolon

    * test removing ath10k_core_stop from retrying probe and just hack bmi.done_sent

    * cleaened up my hack for probe retrying

    turned the probe retry in to functional code and added a retry limit to core.h called ATH10K_FW_PROBE_RETRYS

    * forgot struct def

    * added function to cleanup memory leaks

    added a function to the process that allows us to cleanup any memory leaks if there are any.

    * removed pause_sig

    pause_sig isn't being used anywhere else and pause_sig is a delay based function which does not put the thread in the sleep queue so I switched it to tsleep instead.

    * removed line of code from ath10k

    * add null check.

    Grammer correction and add a null check for fwlog locking mutext variable as well as adding a longer timeout for htc connect.

    * used wrong case

    used wrong case for null, woops so use to the many other programming languages with lowercase null.

    * added some mutex checking

    added mutext checking inside of if_athp_fwlog for some reason its still trying to log on an unitialized mutex, which means somewhere something is still initialized for the first firmware failed load, need to check this out in detail, its weird.

    * forgot &

    * chaned from 3 seconds to 1 didnt do anything.

    * removing annoying warnings

    removing annoying warnings that come out of my serial device, so i cant see or type anything.

    * Revert "removing annoying warnings"

    This reverts commit ad31d5d.

    * Revert "Revert "removing annoying warnings""

    This reverts commit b535d14.

    * first commit

    Initialize commit on trying to move the hostap buffer allocation to the athp_parent instead of the add interface section.

    * fixed type error

    wrong type was used.

    * remove extra pointers

    remove extra pointers.

    * out of order

    moved functions in the right order.

    * forgot initializer

    * formatting

    * removed call to deallocate inside of allocate and the label.

    removed call to deallocate inside of allocate and the label.

    * added static for compile via git on phone

    * added dereference via git on phone

    * moved dma allocate to attach.

    * moved dma allocate in to if_athp_pci attach

    * required to add mac.h

    * moved beacon allocate before the start of all the task queues.

    * changed from pointer to object.

    * pointer change didn't make it.

    * remove assignment address from non_pointer

    * fixed issue with issue #3 and the htt_rx_ring_refill

    ath10k_htt_rx_ring_refill does a dma allocate so no other lock can be held during this processor that can't be slept, I found that wmi_tx_beacons was holding the conf lock so I created a wait for that.

    * Create README.md

    * change default power to 8 dbM

    tx_power_recalc takes txpower and * 2 checking to see if lowering increases thw power level of tx because it seems as if tx is not being set because its value is too high.

    * changed power level to 9 which equals 18.

    18 is the power level for below:
    11ac HT40	MCS0	18	-93

    * moved ath10k_wmi_wait_for_tx_beacons_ready

    moved ath10k_wmi_wait_for_tx_beacons_ready to
    ath10k_wmi_cmd_send

    * ATHP_ARVIF_LOCK

    changed all conf lock that involved the arvif array to a new arvif lock instead.

    * changed to conf lock

    * changed arvif lock for txpower

    changed the locks on txpower to arvifs lock instead of conf lock.

    * removed a few not needed arvif locks and changed a few locks.

    * Revert "removed a few not needed arvif locks and changed a few locks."

    This reverts commit 2a664da.

    * Revert "changed arvif lock for txpower"

    This reverts commit c24e4c2.

    * fixed locks/kernel crash via git on phone

    * Update README.md

    * Update README.md

    * Update README.md

    * Update README.md

commit de9e6e1
Author: Geramy <admin@glscripting.org>
Date:   Thu Feb 7 14:20:23 2019 -0800

    New athp arvif lock (erikarn#9)

    * changed timeout to 2 seconds

    for sloweer systems I have changed the ATH10K_HTC_WAIT_TIMEOUT_MSEC to 2 seconds instead.

    * took back the change.

    Instead i'll implement a system that unloads the firmware when the capabilities don't come in correctly and the firmware load crashes. kldload and unload should not have to deal with internal driver issues.

    * add code to force the driver to attempt to retry to load the interface up to 6 times.

    add code to force the driver to attempt to retry to load the interface up to 6 times. This should fix kldload issues, as long as the wifi card will work during boot we can automate bringing up the interface in scripts. Thats our first goal.

    * re-order

    * re-trying probe fw until sucessful or errors at the 6th try.

    * undo changes

    * attempt at retrying to wait for htc to complete and return

    stopping hif and restarting hif if htc wait target doesnt finish succesfully.

    * removed return on hif_stop

    * attemping to recall ath10k_core_probe_fw

    trying to reset the atheros chip to to load up properly on error.

    * add sleep statement

    sleep a little to let the device catch up and be ready.

    * dumb auto programming features of VSCode capatilized Sleep

    * not use to freebsd kernel developing.

    I decided to use pause_sig in the case a signal called us to release before we end sleeping.

    * added in a ath10k_core_stop

    need to stop the core its not being called on error. I also have set bmi.done_sent = false.

    * oops forgot semicolon

    * test removing ath10k_core_stop from retrying probe and just hack bmi.done_sent

    * cleaened up my hack for probe retrying

    turned the probe retry in to functional code and added a retry limit to core.h called ATH10K_FW_PROBE_RETRYS

    * forgot struct def

    * added function to cleanup memory leaks

    added a function to the process that allows us to cleanup any memory leaks if there are any.

    * removed pause_sig

    pause_sig isn't being used anywhere else and pause_sig is a delay based function which does not put the thread in the sleep queue so I switched it to tsleep instead.

    * removed line of code from ath10k

    * add null check.

    Grammer correction and add a null check for fwlog locking mutext variable as well as adding a longer timeout for htc connect.

    * used wrong case

    used wrong case for null, woops so use to the many other programming languages with lowercase null.

    * added some mutex checking

    added mutext checking inside of if_athp_fwlog for some reason its still trying to log on an unitialized mutex, which means somewhere something is still initialized for the first firmware failed load, need to check this out in detail, its weird.

    * forgot &

    * chaned from 3 seconds to 1 didnt do anything.

    * removing annoying warnings

    removing annoying warnings that come out of my serial device, so i cant see or type anything.

    * Revert "removing annoying warnings"

    This reverts commit ad31d5d.

    * Revert "Revert "removing annoying warnings""

    This reverts commit b535d14.

    * first commit

    Initialize commit on trying to move the hostap buffer allocation to the athp_parent instead of the add interface section.

    * fixed type error

    wrong type was used.

    * remove extra pointers

    remove extra pointers.

    * out of order

    moved functions in the right order.

    * forgot initializer

    * formatting

    * removed call to deallocate inside of allocate and the label.

    removed call to deallocate inside of allocate and the label.

    * added static for compile via git on phone

    * added dereference via git on phone

    * moved dma allocate to attach.

    * moved dma allocate in to if_athp_pci attach

    * required to add mac.h

    * moved beacon allocate before the start of all the task queues.

    * changed from pointer to object.

    * pointer change didn't make it.

    * remove assignment address from non_pointer

    * fixed issue with issue #3 and the htt_rx_ring_refill

    ath10k_htt_rx_ring_refill does a dma allocate so no other lock can be held during this processor that can't be slept, I found that wmi_tx_beacons was holding the conf lock so I created a wait for that.

    * Create README.md

    * change default power to 8 dbM

    tx_power_recalc takes txpower and * 2 checking to see if lowering increases thw power level of tx because it seems as if tx is not being set because its value is too high.

    * changed power level to 9 which equals 18.

    18 is the power level for below:
    11ac HT40	MCS0	18	-93

    * moved ath10k_wmi_wait_for_tx_beacons_ready

    moved ath10k_wmi_wait_for_tx_beacons_ready to
    ath10k_wmi_cmd_send

    * ATHP_ARVIF_LOCK

    changed all conf lock that involved the arvif array to a new arvif lock instead.

    * changed to conf lock

    * changed arvif lock for txpower

    changed the locks on txpower to arvifs lock instead of conf lock.

    * removed a few not needed arvif locks and changed a few locks.

    * Revert "removed a few not needed arvif locks and changed a few locks."

    This reverts commit 2a664da.

    * Revert "changed arvif lock for txpower"

    This reverts commit c24e4c2.

    * fixed locks/kernel crash via git on phone

    * Update README.md

    * Update README.md

    * Update README.md

    * Update README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant