lkml.org 
[lkml]   [2011]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 0/3] v4 Improve task->comm locking situation
From
Date
What about replacing
char comm[TASK_COMM_LEN];
with
char *rcu_commname;
and switching it atomically using RCU?

Advantages:
Readers can use RCU read lock rather than spinlock.
Makes task_struct smaller.

Disadvantages:
Need to allocate TASK_COMM_LEN bytes upon dup_task_struct() and set_task_comm().
Need to rewrite all task_struct.comm readers (steps shown below).

Steps to rewrite task_struct.comm readers

(1) Introduce a temporary accessor (say, task_comm).

#define task_comm(tsk) (tsk)->comm

(2) Rewrite all tsk->comm users to task_comm(tsk).

(3) Replace sizeof(tsk->comm) with TASK_COMM_LEN.

(4) Temporarily rename from

char comm[TASK_COMM_LEN];

to

char comm_access_me_via_task_comm[TASK_COMM_LEN];

for blocking new tsk->comm users.

(5) Convert to use RCU.

(6) Rename from

char comm_access_me_via_task_comm[TASK_COMM_LEN];

to

char *rcu_commname;

.

(7) Rewrite task_comm(tsk) to use %ptc .

(8) Remove the temporary accessor.


\
 
 \ /
  Last update: 2011-05-18 05:19    [W:0.121 / U:0.708 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site