From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752563Ab3CBRWS (ORCPT ); Sat, 2 Mar 2013 12:22:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33659 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751527Ab3CBRWQ (ORCPT ); Sat, 2 Mar 2013 12:22:16 -0500 Date: Sat, 2 Mar 2013 18:20:03 +0100 From: Oleg Nesterov To: Lai Jiangshan Cc: Michel Lespinasse , "Srivatsa S. Bhat" , Lai Jiangshan , linux-doc@vger.kernel.org, peterz@infradead.org, fweisbec@gmail.com, linux-kernel@vger.kernel.org, namhyung@kernel.org, mingo@kernel.org, linux-arch@vger.kernel.org, linux@arm.linux.org.uk, xiaoguangrong@linux.vnet.ibm.com, wangyun@linux.vnet.ibm.com, paulmck@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com, linux-pm@vger.kernel.org, rusty@rustcorp.com.au, rostedt@goodmis.org, rjw@sisk.pl, vincent.guittot@linaro.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, sbw@mit.edu, tj@kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH V2] lglock: add read-preference local-global rwlock Message-ID: <20130302172003.GC29769@redhat.com> References: <512CC509.1050000@linux.vnet.ibm.com> <512D0D67.9010609@linux.vnet.ibm.com> <512E7879.20109@linux.vnet.ibm.com> <5130E8E2.50206@cn.fujitsu.com> <20130301182854.GA3631@redhat.com> <5131FB4C.7070408@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5131FB4C.7070408@cn.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/02, Lai Jiangshan wrote: > > +void lg_rwlock_local_read_unlock(struct lgrwlock *lgrw) > +{ > + switch (__this_cpu_read(*lgrw->reader_refcnt)) { > + case 1: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + lg_local_unlock(&lgrw->lglock); > + return; > + case FALLBACK_BASE: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + read_unlock(&lgrw->fallback_rwlock); > + rwlock_release(&lg->lock_dep_map, 1, _RET_IP_); I guess "case 1:" should do rwlock_release() too. Otherwise, at first glance looks correct... However, I still think that FALLBACK_BASE only adds the unnecessary complications. But even if I am right this is subjective of course, please feel free to ignore. And btw, I am not sure about lg->lock_dep_map, perhaps we should use fallback_rwlock->dep_map ? We need rwlock_acquire_read() even in the fast-path, and this acquire_read should be paired with rwlock_acquire() in _write_lock(), but it does spin_acquire(lg->lock_dep_map). Yes, currently this is the same (afaics) but perhaps fallback_rwlock->dep_map would be more clean. Oleg. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleg Nesterov Subject: Re: [PATCH V2] lglock: add read-preference local-global rwlock Date: Sat, 2 Mar 2013 18:20:03 +0100 Message-ID: <20130302172003.GC29769@redhat.com> References: <512CC509.1050000@linux.vnet.ibm.com> <512D0D67.9010609@linux.vnet.ibm.com> <512E7879.20109@linux.vnet.ibm.com> <5130E8E2.50206@cn.fujitsu.com> <20130301182854.GA3631@redhat.com> <5131FB4C.7070408@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Lai Jiangshan , linux-doc@vger.kernel.org, peterz@infradead.org, fweisbec@gmail.com, Michel Lespinasse , mingo@kernel.org, linux-arch@vger.kernel.org, linux@arm.linux.org.uk, xiaoguangrong@linux.vnet.ibm.com, wangyun@linux.vnet.ibm.com, paulmck@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com, linux-pm@vger.kernel.org, rusty@rustcorp.com.au, rostedt@goodmis.org, rjw@sisk.pl, namhyung@kernel.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, vincent.guittot@linaro.org, sbw@mit.edu, "Srivatsa S. Bhat" , tj@kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org To: Lai Jiangshan Return-path: Content-Disposition: inline In-Reply-To: <5131FB4C.7070408@cn.fujitsu.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org On 03/02, Lai Jiangshan wrote: > > +void lg_rwlock_local_read_unlock(struct lgrwlock *lgrw) > +{ > + switch (__this_cpu_read(*lgrw->reader_refcnt)) { > + case 1: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + lg_local_unlock(&lgrw->lglock); > + return; > + case FALLBACK_BASE: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + read_unlock(&lgrw->fallback_rwlock); > + rwlock_release(&lg->lock_dep_map, 1, _RET_IP_); I guess "case 1:" should do rwlock_release() too. Otherwise, at first glance looks correct... However, I still think that FALLBACK_BASE only adds the unnecessary complications. But even if I am right this is subjective of course, please feel free to ignore. And btw, I am not sure about lg->lock_dep_map, perhaps we should use fallback_rwlock->dep_map ? We need rwlock_acquire_read() even in the fast-path, and this acquire_read should be paired with rwlock_acquire() in _write_lock(), but it does spin_acquire(lg->lock_dep_map). Yes, currently this is the same (afaics) but perhaps fallback_rwlock->dep_map would be more clean. Oleg. From mboxrd@z Thu Jan 1 00:00:00 1970 From: oleg@redhat.com (Oleg Nesterov) Date: Sat, 2 Mar 2013 18:20:03 +0100 Subject: [PATCH V2] lglock: add read-preference local-global rwlock In-Reply-To: <5131FB4C.7070408@cn.fujitsu.com> References: <512CC509.1050000@linux.vnet.ibm.com> <512D0D67.9010609@linux.vnet.ibm.com> <512E7879.20109@linux.vnet.ibm.com> <5130E8E2.50206@cn.fujitsu.com> <20130301182854.GA3631@redhat.com> <5131FB4C.7070408@cn.fujitsu.com> Message-ID: <20130302172003.GC29769@redhat.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 03/02, Lai Jiangshan wrote: > > +void lg_rwlock_local_read_unlock(struct lgrwlock *lgrw) > +{ > + switch (__this_cpu_read(*lgrw->reader_refcnt)) { > + case 1: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + lg_local_unlock(&lgrw->lglock); > + return; > + case FALLBACK_BASE: > + __this_cpu_write(*lgrw->reader_refcnt, 0); > + read_unlock(&lgrw->fallback_rwlock); > + rwlock_release(&lg->lock_dep_map, 1, _RET_IP_); I guess "case 1:" should do rwlock_release() too. Otherwise, at first glance looks correct... However, I still think that FALLBACK_BASE only adds the unnecessary complications. But even if I am right this is subjective of course, please feel free to ignore. And btw, I am not sure about lg->lock_dep_map, perhaps we should use fallback_rwlock->dep_map ? We need rwlock_acquire_read() even in the fast-path, and this acquire_read should be paired with rwlock_acquire() in _write_lock(), but it does spin_acquire(lg->lock_dep_map). Yes, currently this is the same (afaics) but perhaps fallback_rwlock->dep_map would be more clean. Oleg.