* [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper @ 2012-11-13 1:52 Shan Wei 2012-11-13 7:21 ` Steffen Klassert 0 siblings, 1 reply; 6+ messages in thread From: Shan Wei @ 2012-11-13 1:52 UTC (permalink / raw) To: steffen.klassert, David Miller, NetDev, Herbert Xu, Kernel-Maillist, cl, Shan Wei From: Shan Wei <davidshan@tencent.com> Signed-off-by: Shan Wei <davidshan@tencent.com> --- v4: derefrence pointer before reading to avoid compile warning. --- net/xfrm/xfrm_ipcomp.c | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-) diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c index e5246fb..2906d52 100644 --- a/net/xfrm/xfrm_ipcomp.c +++ b/net/xfrm/xfrm_ipcomp.c @@ -276,18 +276,16 @@ static struct crypto_comp * __percpu *ipcomp_alloc_tfms(const char *alg_name) struct crypto_comp * __percpu *tfms; int cpu; - /* This can be any valid CPU ID so we don't need locking. */ - cpu = raw_smp_processor_id(); list_for_each_entry(pos, &ipcomp_tfms_list, list) { struct crypto_comp *tfm; - tfms = pos->tfms; - tfm = *per_cpu_ptr(tfms, cpu); + /* This can be any valid CPU ID so we don't need locking. */ + tfm = __this_cpu_read(*pos->tfms); if (!strcmp(crypto_comp_name(tfm), alg_name)) { pos->users++; - return tfms; + return pos->tfms; } } -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper 2012-11-13 1:52 [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper Shan Wei @ 2012-11-13 7:21 ` Steffen Klassert 2012-11-13 9:33 ` Shan Wei 0 siblings, 1 reply; 6+ messages in thread From: Steffen Klassert @ 2012-11-13 7:21 UTC (permalink / raw) To: Shan Wei; +Cc: David Miller, NetDev, Herbert Xu, Kernel-Maillist, cl On Tue, Nov 13, 2012 at 09:52:09AM +0800, Shan Wei wrote: > From: Shan Wei <davidshan@tencent.com> > Please add a proper commit message, explaining why you do this change. > > Signed-off-by: Shan Wei <davidshan@tencent.com> > --- > v4: > derefrence pointer before reading to avoid compile warning. > --- > net/xfrm/xfrm_ipcomp.c | 8 +++----- > 1 files changed, 3 insertions(+), 5 deletions(-) > > diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c > index e5246fb..2906d52 100644 > --- a/net/xfrm/xfrm_ipcomp.c > +++ b/net/xfrm/xfrm_ipcomp.c > @@ -276,18 +276,16 @@ static struct crypto_comp * __percpu *ipcomp_alloc_tfms(const char *alg_name) > struct crypto_comp * __percpu *tfms; > int cpu; > > - /* This can be any valid CPU ID so we don't need locking. */ > - cpu = raw_smp_processor_id(); > > list_for_each_entry(pos, &ipcomp_tfms_list, list) { > struct crypto_comp *tfm; > > - tfms = pos->tfms; > - tfm = *per_cpu_ptr(tfms, cpu); > + /* This can be any valid CPU ID so we don't need locking. */ > + tfm = __this_cpu_read(*pos->tfms); This should just fetch the tfm pointer, so why exactly __this_cpu_read is better than __this_cpu_ptr? Please keep in mind that performance is not the most important thing here. It's much more important that it works in any case. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper 2012-11-13 7:21 ` Steffen Klassert @ 2012-11-13 9:33 ` Shan Wei 2012-11-13 10:48 ` Steffen Klassert 0 siblings, 1 reply; 6+ messages in thread From: Shan Wei @ 2012-11-13 9:33 UTC (permalink / raw) To: Steffen Klassert, Christoph Lameter Cc: David Miller, NetDev, Herbert Xu, Kernel-Maillist Steffen Klassert said, at 2012/11/13 15:21: > > This should just fetch the tfm pointer, so why exactly __this_cpu_read > is better than __this_cpu_ptr? Please keep in mind that performance is > not the most important thing here. It's much more important that it > works in any case. [0/9] describes why we should submit this series patches. you are not included in original mail. this_cpu_ptr relocates and address. this_cpu_read() relocates the address and performs the fetch. If you want to operate on rda(defined as per_cpu) then you can only use this_cpu_ptr. this_cpu_read() saves you more instructions since it can do the relocation and the fetch in one instruction. More info, please refer to http://www.spinics.net/lists/kernel/msg1435153.html ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper 2012-11-13 9:33 ` Shan Wei @ 2012-11-13 10:48 ` Steffen Klassert 2012-11-13 12:36 ` [PATCH v5 " Shan Wei 0 siblings, 1 reply; 6+ messages in thread From: Steffen Klassert @ 2012-11-13 10:48 UTC (permalink / raw) To: Shan Wei Cc: Christoph Lameter, David Miller, NetDev, Herbert Xu, Kernel-Maillist On Tue, Nov 13, 2012 at 05:33:19PM +0800, Shan Wei wrote: > Steffen Klassert said, at 2012/11/13 15:21: > > > > This should just fetch the tfm pointer, so why exactly __this_cpu_read > > is better than __this_cpu_ptr? Please keep in mind that performance is > > not the most important thing here. It's much more important that it > > works in any case. > > [0/9] describes why we should submit this series patches. > you are not included in original mail. > > this_cpu_ptr relocates and address. this_cpu_read() relocates the address > and performs the fetch. If you want to operate on rda(defined as per_cpu) > then you can only use this_cpu_ptr. this_cpu_read() saves you more instructions > since it can do the relocation and the fetch in one instruction. > Ok, so please add a commit message to describe your changes. Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 3/9] net: xfrm: use __this_cpu_read per-cpu helper 2012-11-13 10:48 ` Steffen Klassert @ 2012-11-13 12:36 ` Shan Wei 2012-11-14 8:43 ` Steffen Klassert 0 siblings, 1 reply; 6+ messages in thread From: Shan Wei @ 2012-11-13 12:36 UTC (permalink / raw) To: Steffen Klassert Cc: Christoph Lameter, David Miller, NetDev, Herbert Xu, Kernel-Maillist Steffen Klassert said, at 2012/11/13 18:48: > > Ok, so please add a commit message to describe your changes. > > Thanks. > [PATCH v5] net: xfrm: use __this_cpu_read per-cpu helper this_cpu_ptr/this_cpu_read is faster than per_cpu_ptr(p, smp_processor_id()) and can reduce memory accesses. The latter helper needs to find the offset for current cpu, and needs more assembler instructions which objdump shows in following. this_cpu_ptr relocates and address. this_cpu_read() relocates the address and performs the fetch. this_cpu_read() saves you more instructions since it can do the relocation and the fetch in one instruction. per_cpu_ptr(p, smp_processor_id()): 1e: 65 8b 04 25 00 00 00 00 mov %gs:0x0,%eax 26: 48 98 cltq 28: 31 f6 xor %esi,%esi 2a: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 31: 48 8b 04 c5 00 00 00 00 mov 0x0(,%rax,8),%rax 39: c7 44 10 04 14 00 00 00 movl $0x14,0x4(%rax,%rdx,1) this_cpu_ptr(p) 1e: 65 48 03 14 25 00 00 00 00 add %gs:0x0,%rdx 27: 31 f6 xor %esi,%esi 29: c7 42 04 14 00 00 00 movl $0x14,0x4(%rdx) 30: 48 c7 c7 00 00 00 00 mov $0x0,%rdi Signed-off-by: Shan Wei <davidshan@tencent.com> --- net/xfrm/xfrm_ipcomp.c | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-) diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c index e5246fb..2906d52 100644 --- a/net/xfrm/xfrm_ipcomp.c +++ b/net/xfrm/xfrm_ipcomp.c @@ -276,18 +276,16 @@ static struct crypto_comp * __percpu *ipcomp_alloc_tfms(const char *alg_name) struct crypto_comp * __percpu *tfms; int cpu; - /* This can be any valid CPU ID so we don't need locking. */ - cpu = raw_smp_processor_id(); list_for_each_entry(pos, &ipcomp_tfms_list, list) { struct crypto_comp *tfm; - tfms = pos->tfms; - tfm = *per_cpu_ptr(tfms, cpu); + /* This can be any valid CPU ID so we don't need locking. */ + tfm = __this_cpu_read(*pos->tfms); if (!strcmp(crypto_comp_name(tfm), alg_name)) { pos->users++; - return tfms; + return pos->tfms; } } -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 3/9] net: xfrm: use __this_cpu_read per-cpu helper 2012-11-13 12:36 ` [PATCH v5 " Shan Wei @ 2012-11-14 8:43 ` Steffen Klassert 0 siblings, 0 replies; 6+ messages in thread From: Steffen Klassert @ 2012-11-14 8:43 UTC (permalink / raw) To: Shan Wei Cc: Christoph Lameter, David Miller, NetDev, Herbert Xu, Kernel-Maillist On Tue, Nov 13, 2012 at 08:36:00PM +0800, Shan Wei wrote: > Steffen Klassert said, at 2012/11/13 18:48: > > > > Ok, so please add a commit message to describe your changes. > > > > Thanks. > > > > [PATCH v5] net: xfrm: use __this_cpu_read per-cpu helper > > this_cpu_ptr/this_cpu_read is faster than per_cpu_ptr(p, smp_processor_id()) > and can reduce memory accesses. > The latter helper needs to find the offset for current cpu, > and needs more assembler instructions which objdump shows in following. > > this_cpu_ptr relocates and address. this_cpu_read() relocates the address > and performs the fetch. this_cpu_read() saves you more instructions > since it can do the relocation and the fetch in one instruction. > > per_cpu_ptr(p, smp_processor_id()): > 1e: 65 8b 04 25 00 00 00 00 mov %gs:0x0,%eax > 26: 48 98 cltq > 28: 31 f6 xor %esi,%esi > 2a: 48 c7 c7 00 00 00 00 mov $0x0,%rdi > 31: 48 8b 04 c5 00 00 00 00 mov 0x0(,%rax,8),%rax > 39: c7 44 10 04 14 00 00 00 movl $0x14,0x4(%rax,%rdx,1) > > this_cpu_ptr(p) > 1e: 65 48 03 14 25 00 00 00 00 add %gs:0x0,%rdx > 27: 31 f6 xor %esi,%esi > 29: c7 42 04 14 00 00 00 movl $0x14,0x4(%rdx) > 30: 48 c7 c7 00 00 00 00 mov $0x0,%rdi > > Signed-off-by: Shan Wei <davidshan@tencent.com> Applied to ipsec-next, thanks! ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-11-14 8:44 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-11-13 1:52 [PATCH v4 3/9] net: xfrm: use __this_cpu_read per-cpu helper Shan Wei 2012-11-13 7:21 ` Steffen Klassert 2012-11-13 9:33 ` Shan Wei 2012-11-13 10:48 ` Steffen Klassert 2012-11-13 12:36 ` [PATCH v5 " Shan Wei 2012-11-14 8:43 ` Steffen Klassert
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).