2012-11-09 02:21:08

by Shan Wei

[permalink] [raw]
Subject: [PATCH v3 3/9] net: xfrm: use __this_cpu_read per-cpu helper

From: Shan Wei <[email protected]>


Signed-off-by: Shan Wei <[email protected]>
---
v3 fix compile warning:
net/xfrm/xfrm_ipcomp.c: In function 'ipcomp_alloc_tfms':
net/xfrm/xfrm_ipcomp.c:285: warning: assignment from incompatible pointer type

---
net/xfrm/xfrm_ipcomp.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c
index e5246fb..898c899 100644
--- a/net/xfrm/xfrm_ipcomp.c
+++ b/net/xfrm/xfrm_ipcomp.c
@@ -276,18 +276,15 @@ 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);
+ tfm = (struct crypto_comp *) __this_cpu_read(pos->tfms);

if (!strcmp(crypto_comp_name(tfm), alg_name)) {
pos->users++;
- return tfms;
+ return pos->tfms;
}
}

--
1.7.1


Subject: Re: [PATCH v3 3/9] net: xfrm: use __this_cpu_read per-cpu helper

On Fri, 9 Nov 2012, Shan Wei wrote:

> v3 fix compile warning:
> net/xfrm/xfrm_ipcomp.c: In function 'ipcomp_alloc_tfms':
> net/xfrm/xfrm_ipcomp.c:285: warning: assignment from incompatible pointer type

Why exactly is the pointer type not compatible? Looks like we have a
problem here.

2012-11-12 01:46:10

by Shan Wei

[permalink] [raw]
Subject: Re: [PATCH v3 3/9] net: xfrm: use __this_cpu_read per-cpu helper

Christoph Lameter said, at 2012/11/10 4:12:
> On Fri, 9 Nov 2012, Shan Wei wrote:
>
>> v3 fix compile warning:
>> net/xfrm/xfrm_ipcomp.c: In function 'ipcomp_alloc_tfms':
>> net/xfrm/xfrm_ipcomp.c:285: warning: assignment from incompatible pointer type
>
> Why exactly is the pointer type not compatible? Looks like we have a
> problem here.
>

pos->tfms(struct crypto_comp **tfms) is a double pointer that point to struct crypto_comp.
returned value is a pointer that point to struct crypto_comp;
So, we need to dereference and then read.

+ tfm = __this_cpu_read(*pos->tfms);

I will update this patch in v4 to fix it.

Thanks~