Messages in this thread | | | From | Nadav Amit <> | Subject | Re: [RFC PATCH 1/5] x86: introduce preemption disable prefix | Date | Thu, 18 Oct 2018 03:26:36 +0000 |
| |
at 8:11 PM, Nadav Amit <namit@vmware.com> wrote:
> at 6:22 PM, Andy Lutomirski <luto@amacapital.net> wrote: > >>> On Oct 17, 2018, at 5:54 PM, Nadav Amit <namit@vmware.com> wrote: >>> >>> It is sometimes beneficial to prevent preemption for very few >>> instructions, or prevent preemption for some instructions that precede >>> a branch (this latter case will be introduced in the next patches). >>> >>> To provide such functionality on x86-64, we use an empty REX-prefix >>> (opcode 0x40) as an indication that preemption is disabled for the >>> following instruction. >> >> Nifty! >> >> That being said, I think you have a few bugs. First, you can’t just ignore >> a rescheduling interrupt, as you introduce unbounded latency when this >> happens — you’re effectively emulating preempt_enable_no_resched(), which >> is not a drop-in replacement for preempt_enable(). To fix this, you may >> need to jump to a slow-path trampoline that calls schedule() at the end or >> consider rewinding one instruction instead. Or use TF, which is only a >> little bit terrifying… > > Yes, I didn’t pay enough attention here. For my use-case, I think that the > easiest solution would be to make synchronize_sched() ignore preemptions > that happen while the prefix is detected. It would slightly change the > meaning of the prefix.
Ignore this nonsense that I wrote. I’ll try to come up with a decent solution.
>> You also aren’t accounting for the case where you get an exception that >> is, in turn, preempted. > > Hmm.. Can you give me an example for such an exception in my use-case? I > cannot think of an exception that might be preempted (assuming #BP, #MC > cannot be preempted). > > I agree that for super-general case this might be inappropriate.
| |