From patchwork Tue Nov 13 01:52:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: solomon X-Patchwork-Id: 198522 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 73C422C009A for ; Tue, 13 Nov 2012 12:54:45 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754057Ab2KMBwN (ORCPT ); Mon, 12 Nov 2012 20:52:13 -0500 Received: from mail-da0-f46.google.com ([209.85.210.46]:36812 "EHLO mail-da0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752751Ab2KMBwL (ORCPT ); Mon, 12 Nov 2012 20:52:11 -0500 Received: by mail-da0-f46.google.com with SMTP id n41so2992007dak.19 for ; Mon, 12 Nov 2012 17:52:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=55eErejun3ifgOU6vGIAYX7z0lHmGyVhG5rtKT5V+4I=; b=fI8Lyv6IjKgpe9gEv3bi0z5uXNKCRpamYeOphv6Ut1Ls71FG4GsCyvfUxAGCTLoUBm xlAfI2+Idd3Qwwh6UVwKj7dll9KDBly4eDHn5v8U/MpxicBMaWlpLtEnXrI2BaP0K94p 3byOu5UMyHWdkQEYpZMQ4Rb8vI8EdKdM74U/cXqdPzgu09vpaxaj++dbuSadzXnLBcpE 7bRPnVJBoaywPkb/iaSjAA4rli2ty9/caPSlfEkt3VCQFeGutmbcAepYbWrtmxSGFlpB F20u+hCrDQwGKpoGlLC3Ju3v4iNlNLD1TqYR97kjTrVhSoBuDxV2s/gA3GI1P2nobjSX ou1w== Received: by 10.66.84.40 with SMTP id v8mr59960906pay.47.1352771531197; Mon, 12 Nov 2012 17:52:11 -0800 (PST) Received: from [172.30.10.127] ([121.14.96.125]) by mx.google.com with ESMTPS id d2sm5202517paw.19.2012.11.12.17.52.05 (version=SSLv3 cipher=OTHER); Mon, 12 Nov 2012 17:52:10 -0800 (PST) Message-ID: <50A1A7C1.50308@gmail.com> Date: Tue, 13 Nov 2012 09:52:01 +0800 From: Shan Wei User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 MIME-Version: 1.0 To: venkat.x.venkatsubra@oracle.com, David Miller , rds-devel@oss.oracle.com, NetDev , Kernel-Maillist , cl@linux-foundation.org, Shan Wei Subject: [PATCH v4 2/9] net: rds: use this_cpu_* per-cpu helper Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Shan Wei Signed-off-by: Shan Wei Reviewed-by: Christoph Lameter --- v4: 1. add missing __percpu annotations. 2. [read|write]ing fields of struct rds_ib_cache_head using __this_cpu_* operation, drop per_cpu_ptr. --- net/rds/ib.h | 2 +- net/rds/ib_recv.c | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/net/rds/ib.h b/net/rds/ib.h index 8d2b3d5..7280ab8 100644 --- a/net/rds/ib.h +++ b/net/rds/ib.h @@ -50,7 +50,7 @@ struct rds_ib_cache_head { }; struct rds_ib_refill_cache { - struct rds_ib_cache_head *percpu; + struct rds_ib_cache_head __percpu *percpu; struct list_head *xfer; struct list_head *ready; }; diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index 8d19491..8c5bc85 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c @@ -418,20 +418,21 @@ static void rds_ib_recv_cache_put(struct list_head *new_item, struct rds_ib_refill_cache *cache) { unsigned long flags; - struct rds_ib_cache_head *chp; struct list_head *old; + struct list_head __percpu *chpfirst; local_irq_save(flags); - chp = per_cpu_ptr(cache->percpu, smp_processor_id()); - if (!chp->first) + chpfirst = __this_cpu_read(cache->percpu->first); + if (!chpfirst) INIT_LIST_HEAD(new_item); else /* put on front */ - list_add_tail(new_item, chp->first); - chp->first = new_item; - chp->count++; + list_add_tail(new_item, chpfirst); - if (chp->count < RDS_IB_RECYCLE_BATCH_COUNT) + __this_cpu_write(chpfirst, new_item); + __this_cpu_inc(cache->percpu->count); + + if (__this_cpu_read(cache->percpu->count) < RDS_IB_RECYCLE_BATCH_COUNT) goto end; /* @@ -443,12 +444,13 @@ static void rds_ib_recv_cache_put(struct list_head *new_item, do { old = xchg(&cache->xfer, NULL); if (old) - list_splice_entire_tail(old, chp->first); - old = cmpxchg(&cache->xfer, NULL, chp->first); + list_splice_entire_tail(old, chpfirst); + old = cmpxchg(&cache->xfer, NULL, chpfirst); } while (old); - chp->first = NULL; - chp->count = 0; + + __this_cpu_write(chpfirst, NULL); + __this_cpu_write(cache->percpu->count, 0); end: local_irq_restore(flags); }