[ovs-dev] [PATCH] datapath: Improve robustness of this_cpu_ptr definition in compat layer

Andy Zhou azhou at nicira.com
Mon Sep 15 07:23:04 UTC 2014


Thanks, pushed to master.

On Fri, Sep 12, 2014 at 2:43 PM, Pravin Shelar <pshelar at nicira.com> wrote:
> On Fri, Sep 12, 2014 at 12:18 PM, Andy Zhou <azhou at nicira.com> wrote:
>> Yes, older distribution kernels may not follow the upstream kernel
>> pattern. For example, centos-6.5-linux-2.6.32-431.
>>
> ok.
> Acked-by: Pravin B Shelar <pshelar at nicira.com>
>
>> On Thu, Sep 11, 2014 at 6:23 PM, Pravin Shelar <pshelar at nicira.com> wrote:
>>> On Wed, Sep 10, 2014 at 3:58 PM, Andy Zhou <azhou at nicira.com> wrote:
>>>> Current autoconfig detection logic for HAVE_PER_CPU_PTR is not robust.
>>>> Depends on linux kernel version, the definition can be in either
>>>> linux/percpu.h or asm/percpu.h
>>>>
>>> I could not find kernel with this_cpu_ptr () definition in
>>> linux/percpu.h, is it distribution kernel?
>>>
>>>> Turns out it is simpler and safer to handle missing percpu.h
>>>> definitions in linux/percpu.h rather than asm/percpu.h. With this
>>>> change, there is no need for the autoconfig detection logic above.
>>>>
>>>> Signed-off-by: Andy Zhou <azhou at nicira.com>
>>>> ---
>>>>  acinclude.m4                                 |  2 --
>>>>  datapath/linux/Modules.mk                    |  1 -
>>>>  datapath/linux/compat/include/asm/percpu.h   | 10 ----------
>>>>  datapath/linux/compat/include/linux/percpu.h |  4 ++++
>>>>  4 files changed, 4 insertions(+), 13 deletions(-)
>>>>  delete mode 100644 datapath/linux/compat/include/asm/percpu.h
>>>>
>>>> diff --git a/acinclude.m4 b/acinclude.m4
>>>> index b0794d2..ae0f8d8 100644
>>>> --- a/acinclude.m4
>>>> +++ b/acinclude.m4
>>>> @@ -359,8 +359,6 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>>>>    OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
>>>>                    [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
>>>>
>>>> -  OVS_GREP_IFELSE([$KSRC/include/linux/percpu.h], [this_cpu_ptr])
>>>> -
>>>>    OVS_GREP_IFELSE([$KSRC/include/linux/u64_stats_sync.h], [u64_stats_fetch_begin_irq])
>>>>
>>>>    OVS_GREP_IFELSE([$KSRC/include/linux/openvswitch.h], [openvswitch_handle_frame_hook],
>>>> diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk
>>>> index 00922ed..f7c64e2 100644
>>>> --- a/datapath/linux/Modules.mk
>>>> +++ b/datapath/linux/Modules.mk
>>>> @@ -18,7 +18,6 @@ openvswitch_sources += \
>>>>  openvswitch_headers += \
>>>>         linux/compat/gso.h \
>>>>         linux/compat/include/asm/hash.h \
>>>> -       linux/compat/include/asm/percpu.h \
>>>>         linux/compat/include/linux/percpu.h \
>>>>         linux/compat/include/linux/bug.h \
>>>>         linux/compat/include/linux/compiler.h \
>>>> diff --git a/datapath/linux/compat/include/asm/percpu.h b/datapath/linux/compat/include/asm/percpu.h
>>>> deleted file mode 100644
>>>> index 65bce08..0000000
>>>> --- a/datapath/linux/compat/include/asm/percpu.h
>>>> +++ /dev/null
>>>> @@ -1,10 +0,0 @@
>>>> -#ifndef __ASM_PERCPU_WRAPPER_H
>>>> -#define __ASM_PERCPU_WRAPPER_H 1
>>>> -
>>>> -#include_next <asm/percpu.h>
>>>> -
>>>> -#if !defined this_cpu_ptr && !defined HAVE_THIS_CPU_PTR
>>>> -#define this_cpu_ptr(ptr) per_cpu_ptr(ptr, smp_processor_id())
>>>> -#endif
>>>> -
>>>> -#endif
>>>> diff --git a/datapath/linux/compat/include/linux/percpu.h b/datapath/linux/compat/include/linux/percpu.h
>>>> index 9bd6801..e0941f7 100644
>>>> --- a/datapath/linux/compat/include/linux/percpu.h
>>>> +++ b/datapath/linux/compat/include/linux/percpu.h
>>>> @@ -3,6 +3,10 @@
>>>>
>>>>  #include_next <linux/percpu.h>
>>>>
>>>> +#if !defined this_cpu_ptr
>>>> +#define this_cpu_ptr(ptr) per_cpu_ptr(ptr, smp_processor_id())
>>>> +#endif
>>>> +
>>>>  #if !defined this_cpu_read
>>>>  #define this_cpu_read(ptr) percpu_read(ptr)
>>>>  #endif
>>>> --
>>>> 1.9.1
>>>>
>>>> _______________________________________________
>>>> dev mailing list
>>>> dev at openvswitch.org
>>>> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list