Message ID | 509C688B.5010502@gmail.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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~ -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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; } }