So far the major items are:

  • Performance evaluation of the changes, with these requirements:
    • Support the same number of NMI nesting level we have now.
    • Overflow detection for irq disable nest levels
    • One major impact is that hardware access vs per-CPU memory access at each time we disable/enable irq.
      • Maybe we can use refscale (kernel/rcu/refscale.c) as a skeletion for micro-benchmarking?
  • Plan/tool/work of avoiding introduction of another irq disable/enable primitives.
    • So what we have current is:

      • local_irq_disable() and local_irq_enable()
      • local_irq_save() and local_irq_restore()
    • And what we are introducing is:

      • local_interrupt_disable() and local_interrupt_enable().

Boqun: Maybe we only need to prove that we can do this (not necessarily clean up at first)

Lyude: will need to get the kernel boot into a reasonable state to figure what are the creative use cases and how to detect and resolve them.

Boqun: Keep in mind the least we can do is implement a Rust version of local_interrupt_disable() and only use it in Rust for the moment.

If we want to avoid 3 sets of API in total, the thing we should do is using local_interrupt_disable() to replace either local_irq_disable() or local_irq_save(). My gut feeling is that replacing local_irq_disable() will be easier.

Takeaways

  • Figuring out long-term plan for converting APIs
  • Performance concerns (lower priority)
    • If we can't solve the performance concerns ATM/cannot deal with them, keeping the implementation limited to rust might be an option?
  • Consider doing topic in plumbers to get more attention on some of the potential issues w/ conversion&performance (should be fine w/ long term plan, will let us decouple merging/blocking on conv&perf)
  • Figuring out plan for handling performance issues before sending out next version (can be limiting usage, or showing that performance is fine)