<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 30 Aug 2016, at 15:21, shijunjie92 <<a href="mailto:shijunjie92@gmail.com" class="">shijunjie92@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">When we simulate the critical section within one task using 'rtspin'. We will enter the resource id. But there is no such id information included by semaphore. So how can we know the semaphore locks which resource. (Different resources use different wait_queues?)</div></div></blockquote><div><br class=""></div><div>The FDSO interface (“file-descriptor-attached shared objects”) maps the user-space provided IDs to objects. To share a semaphore between two processes, both need to open the same file (= name space), and reference the same ID (= index in object table attached to file). </div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Why the function pfp_mpcp_lock( as well as other lock function) calls 'init_waitqueue_entry' everytime when the resource is occupied. When more then two tasks try to get the resource, the wait_queue will be initialized more than once? How to explain that?<br class=""></div></div></blockquote><div><br class=""></div><div>It initializes a wait queue *entry*, not the entire wait queue. Every blocked task allocates such an entry on its stack.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">The last question is about the MPCP_VS protocol in P-FP plugin.</div><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">When we use MPCP_VS protocol:</div><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">cpu_0: task_0 is excuting by holding the resource_0<span class="Apple-converted-space"> </span><br class="">cpu_1: task_1 is excuting by holding the resource_1<span class="Apple-converted-space"> </span><br class="">cpu_2: task_2 is spinning but not excuting for waitting one resource (resource_0 or resource_1)</div><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""> </div><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Now, task_0 is preempted by one higher priority task, but it still hold the semaphore of resource_0.<br class=""></div></div></blockquote><div><br class=""></div><div>Isn’t a resource-holding task priority-boosted?</div><br class=""><blockquote type="cite" class=""><div style="font-family: 'times new roman'; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Is there any possible that lets task_0 know whether the task_2 is waitting for resource_0 or resource_1 or not?</div></blockquote></div><br class=""><div class="">In the kernel, you can always lock and look at the wait queue associated with the semaphore. All tasks blocked on the lock are queued.</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Björn</div><div class=""><br class=""></div></body></html>