CC: devel@rtems.org Preserving this discussion for posterity.
On Fri, Sep 16, 2022 at 3:09 PM Jian-Jia Chen <jian-jia.c...@cs.uni-dortmund.de> wrote: > > Dear Gedare, dear Sebastian, > I would like to clarify a few things. > > == historical perspectives == > First of all, let me shortly talk about the history of PCP and the > extension of it. PCP was proposed in 1989 with two advantages in comparison > to PIP > > Under PCP, the access of resources in a nested manner is deadlock-free > Under PCP, a higher-priority job J_i is blocked by at most one lower-priority > critical section whose priority ceiling has a higher priority than or the > same priority as J_i. > > > PCP therefore has become an interesting result. However, in its original > design, a lower-priority job only inherits the priority of a higher-priority > job that it blocks. It was later noted that the original PCP design can be > extended to the so-called immediate ceiling priority protocol (ICPP) which > promotes the priority of a lower-priority job immediately to its priority > ceiling after the lock. This extension ensures that the two important > properties of PCP remain valid. > > Now, in our discussion, we should further clarify whether the > implementation of RTEMS is the ICPP described above or not. If yes, then it > should be deadlock-free under any nested resource access sequence. Otherwise, > it is not supposed to be the ICPP described above. You may want to call it > “restrictive ICPP” or anything alike. > > When we submitted the paper, one reviewer also asked a question whether the > issue we found is a bug or a feature. I believe that it is both because there > is no documentation. However, in case there is no documentation on such a > limitation, then it is a bug as the implementation does not comply to the > ICPP; otherwise, it is a feature for the implemented “restrictive ICPP”. > > == designers’ perspectives == > > Now, coming to the discussion whether “acquiring mutexes in an arbitrary > priority order is a good application design” or not, I think we have to also > clarify two things: > > The program's semantics of resource access: it is supposed to lock first > resource R1 (guarded by mutex M1) and then potentially resource R2 (guarded > by mutex M2) in a nested manner, depending on the condition needed. > The resource priority ceiling: it is unrelated to the program context but > just used to ensure that there is no deadlock in any request order and there > is at most one blocking from the lower-priority jobs. > > > So, (1) is about the context of the program(s) and (2) is about the > resource management schemes. > > One can of course enforce the sequence of locks, but as soon as the > designer changes the priority assignment of the tasks or adds a new task, the > program may have to be rewritten in their statements and may not be able to > keep the same program behavior. Therefore, I think the beauty of PCP and ICPP > for achieving the deadlock-free property is destroyed if the mutex usage has > to follow a strict order to ensure deadlock free. In fact, under this strict > order, as there is no circular waiting, there is by definition no deadlock. > > == ending == > > Furthermore, no matter which approach is taken, it is important to document > the assertions/assumptions that must hold to lead to the correctness of the > implemented IPCC. > > > Best Regards, > Jian-Jia Chen > > > > On Sep 16, 2022, at 9:47 AM, Kuan-Hsun Chen <c00...@gmail.com> wrote: > > > > ---------- Forwarded message --------- > From: Sebastian Huber <sebastian.hu...@embedded-brains.de> > > Date: Fri, Sep 16, 2022 at 08:09 > Subject: Re: [PATCH] icpp remedy > To: Gedare Bloom <ged...@rtems.org>, Kuan-Hsun Chen <c00...@gmail.com> > Cc: Strange369 <junjie....@tu-dortmund.de>, rtems-de...@rtems.org > <devel@rtems.org> > > > On 15.09.22 00:06, Gedare Bloom wrote: > > On Tue, Sep 13, 2022 at 12:42 PM Kuan-Hsun Chen<c00...@gmail.com> wrote: > >> Thanks for the prompt reply. Yes, I will guide Junjie to make a ticket and > >> go through the issue. > >> > >>> Is there a test case for this? > >> Yes, a test case is also ready to be reviewed and can be part of the > >> testsuite to test out ICPP (MrsP should also pass). > >> > >>> If it applies to 5 or 4.11, there needs to be another ticket to get the > >>> fix back ported. > >> So each release version with one ticket? We only check 5.1 in this work. > >> My intuitive guess is that if the functionality does not change over the > >> versions, the remedy should be similar. > >> Let us figure it out. > >> > >> On Tue, Sep 13, 2022 at 8:21 PM Joel Sherrill<j...@rtems.org> wrote: > >>> > >>> > >>> On Tue, Sep 13, 2022, 1:14 PM Kuan-Hsun Chen<c00...@gmail.com> wrote: > >>>> (Oh, I just noticed that the patch was submitted faster than my mail to > >>>> share this patch :P). > >>> > >>> No problem. That's why I asked what the issue was. > >>> > >>> It needs at least a much better log message. It needs a ticket given the > >>> gravity of the issue. That ticket can explain the situation and include > >>> links. Probably needs a comment above the change explaining what's going > >>> on. > >>> > >>> Is there a test case for this? > >>> > >>> If it applies to 5 or 4.11, there needs to be another ticket to get the > >>> fix back ported. > >>> > >>> Great catch. Just need to do a good job on the log, test, ticket(s), etc > >>> > >>> --joel > >>> > >>>> Hi Joel, > >>>> > >>>> Let me clarify what happened here. In our recent study, we adopt Frama-C > >>>> to formally verify the implementation of ICPP (also MrsP) and note that > >>>> the current flow may lead to a deadlock. The patch is a simple remedy to > >>>> fix the issue. > >>>> > >>>> The resource’s ceiling is not checked against the thread’s base > >>>> priority, but against its current dynamic priority derived from the > >>>> task’s priority aggregation. However, a resource’s ceiling is required > >>>> to be set as the highest base priority of all tasks that are requesting > >>>> it. This mismatch may lead to a deadlock by denying legitimate nested > >>>> resource access if resources are requested in descending order of > >>>> priority. So this adaption is needed to resolve the issue. A similar > >>>> issue can also be found in MrsP due to the usage of this function. A > >>>> detailed explanation can be found at the end of Section V in the > >>>> attached preprint, and a toy example is provided there to reveal the > >>>> issue. > >>>> > > By changing this to check the base priority instead of the dynamic > > priority, the mutex seize will now allow a task to acquire a ceiling > > mutex even though its dynamic priority is higher than the ceiling. The > > specification to check against the base priority of tasks comes from > > the ICPP without nested lock behavior as I recall, and I'm not 100% > > sure where the requirement comes from that "a resource’s ceiling is > > required to be set as the highest base priority of all tasks that are > > requesting it" -- is that requirement proved anywhere for ICPP with > > nested resources? I'm a little concerned about making this kind of > > fundamental change deep within the (shared) locking protocol code, > > especially since it primarily seems to cater to a uniprocessor corner > > case. > > > > This is a tricky situation, and clearly a lot of work has already gone > > into discovering it. I think we need to discuss this patch a bit more. > > If I understood correctly, this deadlock can't happen if locks are > > always acquired in the increasing priority order. Changing this code > > allows for applications to acquire locks in arbitrary priority order. > > I'm not sure that is permissible in multiprocessor systems to still > > ensure correctness of the locking protocol correctness. It would be > > therefore also valid to state this as an explicit requirement for > > applications to make correct use of ICPP. The same thing is also true > > for MrsP, and for multiprocessor locking protocols in general I > > believe it is required for locks to be acquired in priority order? I'd > > be inclined to instead say that we should confirm that locks are > > acquired in the proper priority ordering as a way to avoid the > > identified deadlock situation. > > The check against the dynamic priority is there for a long time (at > least RTEMS 3.6.0). The questions is how much policy we want to enforce > through such checks. I am not sure if acquiring mutexes in an arbitrary > priority order is a good application design. However, from an > implementation point of view we could remove the check completely. Each > priority ceiling mutex provides a priority node for the task, so it is > independent of other priority contributions. We also have a dedicated > deadlock detection. > > > > > Either way this discussion/patch goes, we should document these issues > > inhttps://docs.rtems.org/branches/master/c-user/key_concepts.html#priorityceiling > > Yes. > > -- > embedded brains GmbH > Herr Sebastian HUBER > Dornierstr. 4 > 82178 Puchheim > Germany > email: sebastian.hu...@embedded-brains.de > phone: +49-89-18 94 741 - 16 > fax: +49-89-18 94 741 - 08 > > Registergericht: Amtsgericht München > Registernummer: HRB 157899 > Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler > Unsere Datenschutzerklärung finden Sie hier: > https://embedded-brains.de/datenschutzerklaerung/ > -- > Diese Mail wurde mobil geschrieben. Etwaige Rechtschreibfehler sind volle > Absicht und als großzügiges Geschenk zu verstehen. > > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel