Does priority inheritance cure priority inversion?
What is meant is that there are situations that can occur that are priority inversion and are not solved by priority inheritance.

An example:
The normal situation used is that task A, B, C are in decreasing priority.  C takes a mutex, then B becomes ready and is running.  Now A becomes ready.  A needs the mutex, so blocks on it.  Then B continues running which prevents C from releasing the mutex.  This effectively makes B have enough priority to block A from doing work.

The priority inheritance would make C have the same priority as A.  But consider the case where C cannot complete its work to release the mutex without B doing work.  Then because of the priority inheritance, you have a deadlock.

Therefore, priority inversion can exist, and it can be hard to detect potential failures.  The solution is to attempt to avoid it by design as much as possible.

Here's the entire blurb from the freertos site:


  Priority inheritance does not cure priority inversion! It just
  minimises its effect in some situations. Hard real time applications
  should be designed such that priority inversion does not happen in the
  first place.