Commit graph

67 commits

Author SHA1 Message Date
Dániel Buga
da4f15d944 Fix fn name 2023-08-14 16:34:10 +02:00
Dániel Buga
9954346143 Remove interrupt executor, remove PenderContext 2023-08-14 16:04:11 +02:00
Dániel Buga
3a51e2d9ca Make PenderContext actually pointer-size 2023-08-14 15:45:43 +02:00
Dániel Buga
986a63ebb8 Remove the non-specific thread-mode executor 2023-08-14 15:41:53 +02:00
Dániel Buga
4c4b12c307 Make PenderContext opaque 2023-08-14 15:16:40 +02:00
Dániel Buga
f6007869bf Remove the Pender enum 2023-08-14 09:00:08 +02:00
Dániel Buga
454a7cbf4c Remove pender-callback 2023-08-14 08:32:26 +02:00
Dániel Buga
ec6bd27df6 Remove thread-context feature 2023-08-14 08:22:22 +02:00
Dániel Buga
6ab0d71d92 Tweak identifiers and comments 2023-08-12 22:42:50 +02:00
Dániel Buga
d5e66f6f87 Lift thread-context feature restrictions 2023-08-12 22:20:11 +02:00
Dániel Buga
bce250bbdc Remove unnecessary !Send markers 2023-08-12 22:17:03 +02:00
Dániel Buga
fbf50cdae8 Remove Pender wrapper 2023-08-12 22:13:08 +02:00
Dániel Buga
675b7fb605 POC: allow custom executors 2023-08-12 18:29:56 +02:00
Dániel Buga
baef856206 Bump version 2023-08-10 23:20:31 +02:00
Dániel Buga
858d520882 Executor: Add changelog 2023-08-10 23:15:02 +02:00
loris
66faba2df7 add wake_task_no_pend for expired timer enqueue inside run_queue 2023-08-05 21:04:51 +02:00
Dániel Buga
a2501bd5c1 Allow clearing finished task from timer queue 2023-07-12 16:56:02 +02:00
Dario Nieuwenhuis
d137286981 Release embassy-time v0.1.2 2023-07-06 01:29:44 +02:00
Kaspar Schleiser
54fc933932 embassy-executor: introduce InterruptExecutor::spawner() 2023-06-16 12:59:23 +02:00
Dario Nieuwenhuis
1d8321b821 Use make_static! from static-cell v1.1 2023-06-01 01:42:34 +02:00
Dániel Buga
5fe36b6bb0 Work around xtensa deadlock, take 2 2023-05-13 15:04:02 +02:00
Ulf Lilleengen
28a3454846 add changelog 2023-04-27 20:19:07 +02:00
Ulf Lilleengen
42a8f1671d Bump versions preparing for -macros and -executor release 2023-04-27 11:54:22 +02:00
Grant Miller
6a6c673c5f Executor: Replace unnecessary atomics in runqueue 2023-04-13 14:21:41 -05:00
Roy Buitenhuis
32836129f6 re-export main_riscv macro as main for riscv arch. 2023-04-11 14:59:38 +02:00
Dario Nieuwenhuis
e2516bba09 executor: fix doc features. 2023-04-06 22:39:36 +02:00
Grant Miller
8290236ed6 executor: Replace unsound critical sections with atomics 2023-04-05 13:23:12 -05:00
Dario Nieuwenhuis
d3c4e4a20a executor: add Pender, rework Cargo features.
This introduces a `Pender` struct with enum cases for thread-mode, interrupt-mode and
custom callback executors. This avoids calls through function pointers when using only
the thread or interrupt executors. Faster, and friendlier to `cargo-call-stack`.

`embassy-executor` now has `arch-xxx` Cargo features to select the arch and to enable
the builtin executors (thread and interrupt).
2023-04-03 03:09:11 +02:00
Dario Nieuwenhuis
b41ee47115 executor: unify export mod. 2023-04-03 01:11:42 +02:00
Dario Nieuwenhuis
80972f1e0e executor,sync: add support for turbo-wakers.
This is a `core` patch to make wakers 1 word (the task pointer) instead of 2 (task pointer + vtable). It allows having the "waker optimization" we had a while back on `WakerRegistration/AtomicWaker`, but EVERYWHERE, without patching all crates.

Advantages:
- Less memory usage.
- Faster.
- `AtomicWaker` can actually use atomics to load/store the waker, No critical section needed.
- No `dyn` call, which means `cargo-call-stack` can now see through wakes.

Disadvantages:
- You have to patch `core`...
- Breaks all executors and other things that create wakers, unless they opt in to using the new `from_ptr` API.

How to use:

- Run this shell script to patch `core`. https://gist.github.com/Dirbaio/c67da7cf318515181539122c9d32b395
- Enable `build-std`
- Enable `build-std-features = core/turbowakers`
- Enable feature `turbowakers` in `embassy-executor`, `embassy-sync`.
- Make sure you have no other crate creating wakers other than `embassy-executor`. These will panic at runtime.

Note that the patched `core` is equivalent to the unpached one when the `turbowakers` feature is not enabled, so it should be fine to leave it there.
2023-03-30 17:55:55 +02:00
Dario Nieuwenhuis
21400da073 executor: Use AtomicPtr for signal_ctx, removes 1 unsafe. 2023-03-27 00:22:00 +02:00
Dario Nieuwenhuis
805bca1f5a executor: deduplicate doc comments. 2023-03-27 00:20:24 +02:00
Grant Miller
41d558a5f4 executor: Allow TaskStorage to auto-implement Sync 2023-03-20 17:08:15 -05:00
Grant Miller
791fbb3ca0 Make poll_fn lazily initialized again 2023-01-31 21:46:25 -06:00
Grant Miller
4a8e9cf4d9 Add internal AvailableTask type 2023-01-31 19:04:41 -06:00
Grant Miller
fb1946be7f Replace the pointer in TaskHeader with an Option<&Executor> 2023-01-31 18:59:03 -06:00
Grant Miller
a697f1517a Set poll_fn in TaskStorage::new 2023-01-31 18:59:03 -06:00
Grant Miller
b6ca6d699a Make wake_task safe 2023-01-29 16:32:12 -06:00
Grant Miller
48e1aab762 executor: Replace NonNull<TaskHeader> with TaskRef 2023-01-29 15:52:13 -06:00
Dario Nieuwenhuis
10c9cc31b1 Remove unnecessary use of atomic-polyfill.
Only use it when CAS is actually needed.
2022-12-23 20:46:49 +01:00
Dario Nieuwenhuis
758f5d7ea2 Release embassy-executor v0.1.1 2022-11-23 14:53:18 +01:00
Dario Nieuwenhuis
db7e153fc0 executor: enable features for docs.rs
Otherwise the non-raw executor and the macros don't show up.
2022-11-23 14:49:40 +01:00
bors[bot]
a4f9e7cbcc
Merge #1071
1071: refactor: autodetect macro variant r=Dirbaio a=lulf

Apply heuristics using target_arch, target_os and target_family to determine which variant of the entry point to use.

Co-authored-by: Ulf Lilleengen <lulf@redhat.com>
2022-11-23 13:21:59 +00:00
Ulf Lilleengen
04a7d97673
refactor: autodetect macro variant
Export all main macro per target architecture from embassy-macros,
and select the appropriate macro in embassy-executor.
2022-11-23 13:54:59 +01:00
Ulf Lilleengen
50c5cc5db6
fix: revert race condition introduced for riscv 2022-11-23 13:17:05 +01:00
bors[bot]
2fa2c1a6fe
Merge #1054
1054: riscv fixes r=lulf a=swolix

With these changes I can run embassy on our RISC-V processor, please consider merging this, feedback is very welcome.

I don't fully understand the code in the executor, but I have implemented a critical section by globally disabling interrupts, which means the wfi inside the critical section will hang the whole thing.

Co-authored-by: Sijmen Woutersen <sijmen.woutersen@gmail.com>
2022-11-23 09:24:11 +00:00
Ulf Lilleengen
51233c0357 doc: update cargo manifests with keywords 2022-11-22 14:51:23 +01:00
Sijmen Woutersen
e70ae71ecc restore SIGNAL_WORK_THREAD_MODE 2022-11-12 10:58:37 +01:00
Sijmen Woutersen
6e1120e17e riscv support 2022-11-10 17:39:41 +01:00
ivmarkov
560eecdb73 Remove the _embassy_time_schedule_wake magic 2022-10-26 18:05:27 +03:00