hayodea
870057a680
Add Stencil class for describing threshold ranges
2025-10-21 20:50:59 -04:00
hayodea
e444cd1e04
Move files around for cologex and sitbuff lib impl
2025-10-21 20:02:36 -04:00
latentprion
7d453beb65
Remove superfluous #includes from headers
2025-10-18 20:16:29 -04:00
latentprion
49c9caa317
Remove superfluous #includes from headers
2025-10-17 16:19:25 -04:00
latentprion
edd223b083
Remove unnecessary componentThread.h #includes
...
Since componentThread #includes boost::asio components, removing
it should improve compile times.
2025-10-16 02:15:16 -04:00
latentprion
5017bf5f92
Build: use piecemeal boost headers.
...
Reduces compile time on a 4-core ARM Rpi5 from 1m12s wallclock
(i.e: "real") time to 0m55s; and from 4m+ "user" time to 3m8s.
2025-10-16 01:00:48 -04:00
hayodea
d857999fdf
Update comment notes
2025-10-02 01:14:04 -04:00
hayodea
fa2609f4ce
User /includes: Add common stim frame types header
2025-10-02 00:29:09 -04:00
hayodea
a91a995407
Config.h.in: Remove these "legacy" artifacts
2025-10-01 20:04:21 -04:00
hayodea
eb5875fe0d
Rename: Sense API => Stim Buff API
2025-10-01 20:03:47 -04:00
hayodea
56b8e83a09
Update senseApiDesc.h and opts.cpp for clarity in device attachment and usage examples
2025-10-01 18:20:59 -04:00
hayodea
a66d91fa31
DevAttachment:Rename: api=>stimbuffapi, implexor=>qualeiface
2025-10-01 18:10:58 -04:00
hayodea
e9e273c012
CMake: PRefix config opt with CONFIG_
2025-10-01 11:02:28 -04:00
hayodea
eb7fe11de4
SerialAsyncContin/LockSet: add releaseQutexEarly()
...
This method allows us to avoid double-release()ing qutexes when we
want to release a qutex early. If we don't use releaseQutexEarly(),
then inside of callOriginalCb when LockSet::release is called, the
Qutex will be release()d a second time.
2025-09-30 22:47:54 -04:00
hayodea
e600b0f96e
DevMgr:at/detachSenseDevReq: acquire Api lib Qutex
2025-09-30 18:12:20 -04:00
hayodea
296e517389
SerAsyncContin: Make LockSet vector constructor arg mandatory
2025-09-30 14:22:12 -04:00
hayodea
758586bb3c
LockerAndInvoker: Move template method impls around
2025-09-30 14:07:13 -04:00
hayodea
ccf0ab77bf
Move SerializedAsyncContin template method impls into header
2025-09-30 13:59:07 -04:00
hayodea
774661e1f0
AsyncContinChainLink: Make getCallersContinuationShPtr() const
2025-09-30 13:59:07 -04:00
hayodea
33b61f429a
LockSet: Move method impls into template header
2025-09-30 13:42:13 -04:00
hayodea
7ded9d287d
Split comment into relevant locations
2025-09-30 13:27:06 -04:00
hayodea
a55bcc2a03
LockerAndInvoker: better var naming
2025-09-30 10:43:30 -04:00
hayodea
f15c07bc83
LockSet:tryAcquireOrBackoff use optional<ref_wrapper<Qutex>>
...
Replace the previous Qutex** raw pointer with a std::optional.
2025-09-30 10:36:19 -04:00
hayodea
e3ce533fe4
Use optional for type-safe retval
2025-09-30 10:22:28 -04:00
hayodea
2075c0b797
Get Lval for sh_ptr and fix build error
2025-09-30 03:53:47 -04:00
hayodea
37b8cb0c7f
Lockvoker: Take singleton by ref and not by copy
2025-09-30 03:53:24 -04:00
hayodea
4ed36eb88a
LockerAndInvoker: Reorder this to silence warning
2025-09-30 03:52:37 -04:00
hayodea
e53b0be7e2
Lockset: make locks vec public so LockerAndInvoker can access
2025-09-30 03:51:36 -04:00
hayodea
e299e956e5
Move LockSet::release into header
2025-09-30 03:01:13 -04:00
hayodea
ca9eae197f
Lockvoker: Add registerInLockSet
...
We now create the sh_ptr to the copy of a lockvoker object in its
own supplied register method. This enables us to retain type safety
when calling make_shared, by copying the most derived version of
the lockvoker object. Then we can pass in the LockerAndInvokerBase
to the rest of the call chain.
2025-09-30 02:55:25 -04:00
hayodea
08122c086c
LockSet:tryAcquireOrBackoff: should take Qutex**, not Qutex*
...
No idea how this error survived in here for so long.
2025-09-30 02:53:54 -04:00
hayodea
cb8b13d0cd
LockSet:release() Remove superfluous Lockvoker arg
...
We decoupled unregistration from release() so we no longer need
to pass in a lockvoker to release().
2025-09-30 02:17:46 -04:00
hayodea
46686db07e
SerializedAsyncContin: LockSet should take Qutex, not SpinLock
...
Apparently this error was here the whole time and it flew under
the radar.
2025-09-30 02:12:04 -04:00
hayodea
4bf19fda90
Get rid of rvalue ref returns
2025-09-30 00:37:54 -04:00
hayodea
ed9635582f
Lockvoker: add handleGridlock and invoke it
2025-09-30 00:32:54 -04:00
hayodea
d06ba8957a
QtxAcqHistTracker: Implement complete algo; add depend graph
...
The dependency graph class enables us to perform analysis on the
qutex acquisition history data. By generating the graph and
detecting cycles in it, we can find true gridlocks.
We use this graph analysis code to implement the algorithmically
complete version of the gridlock detector.
2025-09-30 00:24:33 -04:00
hayodea
c0eecf76d4
QtxAcqHistTracker: Add spinlock and use it
2025-09-29 20:34:56 -04:00
hayodea
2390042892
QtxAcqHistTracker: implement heuristic gridlock detector
2025-09-29 20:02:23 -04:00
hayodea
d32cb1ddac
Lockvoker: print contin vaddr in false-positive ack
2025-09-29 19:46:44 -04:00
hayodea
0cf86cf18a
Lockvoker: Gridlock only algo likely if heuristically likely
...
Only run the algorithmically complete scan if the heuristic
scan detected it as likely.
2025-09-29 19:43:28 -04:00
hayodea
5c7a92b3a4
SerializedAsyncContin:getAcquiredQutexHistory returns rval ref
...
This ensures that the caller takes ownership.
2025-09-29 19:40:51 -04:00
hayodea
21da27649e
Formattign
2025-09-29 19:30:20 -04:00
hayodea
71564b4d83
Add QutexAcquisitionHistoryTracker; integrate plumbing
...
We add the new Qutex acquisision history tracker that allows us
to dynamically detect qutex gridlocks. We've integrated it into
LockerAndInvoker::operator() in a preliminary way.
We also moved all of the trace*ForGridlockOn() methods into the
new QutexAcquisitionHistoryTracker singleton class. They're
more appropriately located there. They're still unimplemented
though.
2025-09-29 19:27:02 -04:00
hayodea
8123ec1227
Qutex: Deprecate old gridlock trace; add skeleton new trace
...
We add the skeleton of a correct history tracer for gridlocks. The
previous history tracer made the incorrect assumption that we would
find the foreign sequence's currently desired LockSet inside of the
lockvoker that it has stored inside of Qutex::currOwner.
2025-09-29 18:14:10 -04:00
hayodea
2a60fdd9df
Qutex: currOwner should use registered sh_ptr to Lockvoker
...
This ensures that the Lockvoker object we access from currOwner
remains valid past the lifetime of the Lockvoker object that
gets copied and invoked by boost::asio
2025-09-29 14:37:16 -04:00
hayodea
462247d743
Qutex: Add gridlock detection
2025-09-29 13:38:53 -04:00
hayodea
6b4fe05fc0
Qutex: Add gridlock detection wireframing
...
This is the basic wireframing required to enable us to detect
gridlocks among requests.
2025-09-29 12:58:41 -04:00
hayodea
0090aa6e3a
Qutex: Add getter for currOwner pointer
2025-09-29 12:46:58 -04:00
hayodea
7e514a1fa3
Qutex: Add currOwner pointer for debugging
...
We'll use this to detect gridlock-type deadlocks between
two requests
2025-09-29 12:40:43 -04:00
hayodea
93103aa8d4
DevMgr: Add DeviceReattacher daemon plumbing
...
This is the plumbing for a periodic polling thread that tries
to reattach DA specs that failed to attach in the startup phase.
2025-09-28 23:07:39 -04:00