This is a limitation of Salvo's design ... trading the ability to block at any level for much-reduced memory requirements and a very simple overall structure.
Some people have suggested using callbacks, or other similar approaches.
Some others have modified Salvo to support full stack frames, hence being able to block at any level -- Pumpkin does not current offer Salvo in this form.
One other way is to "macrotize" a given multi-level function to turn it into something completely flat (single call level) -- not pretty, not efficient, but it works.
My gut feeling is that your Linux-based implementation will be most easily implemented with a conventional RTOS (i.e., one with dedicated task stacks) -- this would permit you to maintain both versions and develop & test them in parallel.