All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tang Chen <tangchen@cn.fujitsu.com>
To: "Mika Penttilä" <mika.j.penttila@gmail.com>
Cc: rjw@rjwysocki.net, gongzhaogang@inspur.com, x86@kernel.org,
	linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org
Subject: Re: [PATCH 3/5] x86, acpi, cpu-hotplug: Introduce apicid_to_cpuid[] array to store persistent cpuid <-> apicid mapping.
Date: Wed, 15 Jul 2015 11:33:57 +0800	[thread overview]
Message-ID: <55A5D4A5.8040806@cn.fujitsu.com> (raw)
In-Reply-To: <CAChTCPw6ZLs7XgApfN1exeB6TVcQji6ryq+HrK-admp=FGfiTA@mail.gmail.com>

Hi Mika,

On 07/07/2015 07:14 PM, Mika Penttilä wrote:
> I think you forgot to reserve CPU 0 for BSP in cpuid mask.

Sorry for the late reply.

I'm not familiar with BSP.  Do you mean in get_cpuid(),
I should reserve 0 for physical cpu0 in BSP ?

Would you please share more detail ?

Thanks.

>
> --Mika
>
> On Tue, Jul 7, 2015 at 12:30 PM, Tang Chen <tangchen@cn.fujitsu.com> wrote:
>> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>>
>> In this patch, we introduce a new static array named apicid_to_cpuid[],
>> which is large enough to store info for all possible cpus.
>>
>> And then, we modify the cpuid calculation. In generic_processor_info(),
>> it simply finds the next unused cpuid. And it is also why the cpuid <-> nodeid
>> mapping changes with node hotplug.
>>
>> After this patch, we find the next unused cpuid, map it to an apicid,
>> and store the mapping in apicid_to_cpuid[], so that cpuid <-> apicid
>> mapping will be persistent.
>>
>> And finally we will use this array to make cpuid <-> nodeid persistent.
>>
>> cpuid <-> apicid mapping is established at local apic registeration time.
>> But non-present or disabled cpus are ignored.
>>
>> In this patch, we establish all possible cpuid <-> apicid mapping when
>> registering local apic.
>>
>>
>> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>> ---
>>   arch/x86/include/asm/mpspec.h |  1 +
>>   arch/x86/kernel/acpi/boot.c   |  6 ++----
>>   arch/x86/kernel/apic/apic.c   | 47 ++++++++++++++++++++++++++++++++++++++++---
>>   3 files changed, 47 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
>> index b07233b..db902d8 100644
>> --- a/arch/x86/include/asm/mpspec.h
>> +++ b/arch/x86/include/asm/mpspec.h
>> @@ -86,6 +86,7 @@ static inline void early_reserve_e820_mpc_new(void) { }
>>   #endif
>>
>>   int generic_processor_info(int apicid, int version);
>> +int __generic_processor_info(int apicid, int version, bool enabled);
>>
>>   #define PHYSID_ARRAY_SIZE      BITS_TO_LONGS(MAX_LOCAL_APIC)
>>
>> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
>> index e49ee24..bcc85b2 100644
>> --- a/arch/x86/kernel/acpi/boot.c
>> +++ b/arch/x86/kernel/acpi/boot.c
>> @@ -174,15 +174,13 @@ static int acpi_register_lapic(int id, u8 enabled)
>>                  return -EINVAL;
>>          }
>>
>> -       if (!enabled) {
>> +       if (!enabled)
>>                  ++disabled_cpus;
>> -               return -EINVAL;
>> -       }
>>
>>          if (boot_cpu_physical_apicid != -1U)
>>                  ver = apic_version[boot_cpu_physical_apicid];
>>
>> -       return generic_processor_info(id, ver);
>> +       return __generic_processor_info(id, ver, enabled);
>>   }
>>
>>   static int __init
>> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
>> index a9c9830..c744ffb 100644
>> --- a/arch/x86/kernel/apic/apic.c
>> +++ b/arch/x86/kernel/apic/apic.c
>> @@ -1977,7 +1977,38 @@ void disconnect_bsp_APIC(int virt_wire_setup)
>>          apic_write(APIC_LVT1, value);
>>   }
>>
>> -static int __generic_processor_info(int apicid, int version, bool enabled)
>> +/*
>> + * Logic cpu number(cpuid) to local APIC id persistent mappings.
>> + * Do not clear the mapping even if cpu is hot-removed.
>> + */
>> +static int apicid_to_cpuid[] = {
>> +       [0 ... NR_CPUS - 1] = -1,
>> +};
>> +
>> +/*
>> + * Internal cpu id bits, set the bit once cpu present, and never clear it.
>> + */
>> +static cpumask_t cpuid_mask = CPU_MASK_NONE;
>> +
>> +static int get_cpuid(int apicid)
>> +{
>> +       int free_id, i;
>> +
>> +       free_id = cpumask_next_zero(-1, &cpuid_mask);
>> +       if (free_id >= nr_cpu_ids)
>> +               return -1;
>> +
>> +       for (i = 0; i < free_id; i++)
>> +               if (apicid_to_cpuid[i] == apicid)
>> +                       return i;
>> +
>> +       apicid_to_cpuid[free_id] = apicid;
>> +       cpumask_set_cpu(free_id, &cpuid_mask);
>> +
>> +       return free_id;
>> +}
>> +
>> +int __generic_processor_info(int apicid, int version, bool enabled)
>>   {
>>          int cpu, max = nr_cpu_ids;
>>          bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid,
>> @@ -2058,8 +2089,18 @@ static int __generic_processor_info(int apicid, int version, bool enabled)
>>                   * for BSP.
>>                   */
>>                  cpu = 0;
>> -       } else
>> -               cpu = cpumask_next_zero(-1, cpu_present_mask);
>> +       } else {
>> +               cpu = get_cpuid(apicid);
>> +               if (cpu < 0) {
>> +                       int thiscpu = max + disabled_cpus;
>> +
>> +                       pr_warning("  Processor %d/0x%x ignored.\n",
>> +                                  thiscpu, apicid);
>> +                       if (enabled)
>> +                               disabled_cpus++;
>> +                       return -EINVAL;
>> +               }
>> +       }
>>
>>          /*
>>           * Validate version
>> --
>> 1.9.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
> .
>

WARNING: multiple messages have this Message-ID (diff)
From: Tang Chen <tangchen@cn.fujitsu.com>
To: "Mika Penttilä" <mika.j.penttila@gmail.com>
Cc: rjw@rjwysocki.net, gongzhaogang@inspur.com, x86@kernel.org,
	linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org
Subject: Re: [PATCH 3/5] x86, acpi, cpu-hotplug: Introduce apicid_to_cpuid[] array to store persistent cpuid <-> apicid mapping.
Date: Wed, 15 Jul 2015 11:33:57 +0800	[thread overview]
Message-ID: <55A5D4A5.8040806@cn.fujitsu.com> (raw)
In-Reply-To: <CAChTCPw6ZLs7XgApfN1exeB6TVcQji6ryq+HrK-admp=FGfiTA@mail.gmail.com>

Hi Mika,

On 07/07/2015 07:14 PM, Mika Penttilä wrote:
> I think you forgot to reserve CPU 0 for BSP in cpuid mask.

Sorry for the late reply.

I'm not familiar with BSP.  Do you mean in get_cpuid(),
I should reserve 0 for physical cpu0 in BSP ?

Would you please share more detail ?

Thanks.

>
> --Mika
>
> On Tue, Jul 7, 2015 at 12:30 PM, Tang Chen <tangchen@cn.fujitsu.com> wrote:
>> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>>
>> In this patch, we introduce a new static array named apicid_to_cpuid[],
>> which is large enough to store info for all possible cpus.
>>
>> And then, we modify the cpuid calculation. In generic_processor_info(),
>> it simply finds the next unused cpuid. And it is also why the cpuid <-> nodeid
>> mapping changes with node hotplug.
>>
>> After this patch, we find the next unused cpuid, map it to an apicid,
>> and store the mapping in apicid_to_cpuid[], so that cpuid <-> apicid
>> mapping will be persistent.
>>
>> And finally we will use this array to make cpuid <-> nodeid persistent.
>>
>> cpuid <-> apicid mapping is established at local apic registeration time.
>> But non-present or disabled cpus are ignored.
>>
>> In this patch, we establish all possible cpuid <-> apicid mapping when
>> registering local apic.
>>
>>
>> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>> ---
>>   arch/x86/include/asm/mpspec.h |  1 +
>>   arch/x86/kernel/acpi/boot.c   |  6 ++----
>>   arch/x86/kernel/apic/apic.c   | 47 ++++++++++++++++++++++++++++++++++++++++---
>>   3 files changed, 47 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
>> index b07233b..db902d8 100644
>> --- a/arch/x86/include/asm/mpspec.h
>> +++ b/arch/x86/include/asm/mpspec.h
>> @@ -86,6 +86,7 @@ static inline void early_reserve_e820_mpc_new(void) { }
>>   #endif
>>
>>   int generic_processor_info(int apicid, int version);
>> +int __generic_processor_info(int apicid, int version, bool enabled);
>>
>>   #define PHYSID_ARRAY_SIZE      BITS_TO_LONGS(MAX_LOCAL_APIC)
>>
>> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
>> index e49ee24..bcc85b2 100644
>> --- a/arch/x86/kernel/acpi/boot.c
>> +++ b/arch/x86/kernel/acpi/boot.c
>> @@ -174,15 +174,13 @@ static int acpi_register_lapic(int id, u8 enabled)
>>                  return -EINVAL;
>>          }
>>
>> -       if (!enabled) {
>> +       if (!enabled)
>>                  ++disabled_cpus;
>> -               return -EINVAL;
>> -       }
>>
>>          if (boot_cpu_physical_apicid != -1U)
>>                  ver = apic_version[boot_cpu_physical_apicid];
>>
>> -       return generic_processor_info(id, ver);
>> +       return __generic_processor_info(id, ver, enabled);
>>   }
>>
>>   static int __init
>> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
>> index a9c9830..c744ffb 100644
>> --- a/arch/x86/kernel/apic/apic.c
>> +++ b/arch/x86/kernel/apic/apic.c
>> @@ -1977,7 +1977,38 @@ void disconnect_bsp_APIC(int virt_wire_setup)
>>          apic_write(APIC_LVT1, value);
>>   }
>>
>> -static int __generic_processor_info(int apicid, int version, bool enabled)
>> +/*
>> + * Logic cpu number(cpuid) to local APIC id persistent mappings.
>> + * Do not clear the mapping even if cpu is hot-removed.
>> + */
>> +static int apicid_to_cpuid[] = {
>> +       [0 ... NR_CPUS - 1] = -1,
>> +};
>> +
>> +/*
>> + * Internal cpu id bits, set the bit once cpu present, and never clear it.
>> + */
>> +static cpumask_t cpuid_mask = CPU_MASK_NONE;
>> +
>> +static int get_cpuid(int apicid)
>> +{
>> +       int free_id, i;
>> +
>> +       free_id = cpumask_next_zero(-1, &cpuid_mask);
>> +       if (free_id >= nr_cpu_ids)
>> +               return -1;
>> +
>> +       for (i = 0; i < free_id; i++)
>> +               if (apicid_to_cpuid[i] == apicid)
>> +                       return i;
>> +
>> +       apicid_to_cpuid[free_id] = apicid;
>> +       cpumask_set_cpu(free_id, &cpuid_mask);
>> +
>> +       return free_id;
>> +}
>> +
>> +int __generic_processor_info(int apicid, int version, bool enabled)
>>   {
>>          int cpu, max = nr_cpu_ids;
>>          bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid,
>> @@ -2058,8 +2089,18 @@ static int __generic_processor_info(int apicid, int version, bool enabled)
>>                   * for BSP.
>>                   */
>>                  cpu = 0;
>> -       } else
>> -               cpu = cpumask_next_zero(-1, cpu_present_mask);
>> +       } else {
>> +               cpu = get_cpuid(apicid);
>> +               if (cpu < 0) {
>> +                       int thiscpu = max + disabled_cpus;
>> +
>> +                       pr_warning("  Processor %d/0x%x ignored.\n",
>> +                                  thiscpu, apicid);
>> +                       if (enabled)
>> +                               disabled_cpus++;
>> +                       return -EINVAL;
>> +               }
>> +       }
>>
>>          /*
>>           * Validate version
>> --
>> 1.9.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
> .
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Tang Chen <tangchen@cn.fujitsu.com>
To: "Mika Penttilä" <mika.j.penttila@gmail.com>
Cc: <rjw@rjwysocki.net>, <gongzhaogang@inspur.com>, <x86@kernel.org>,
	<linux-acpi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-mm@kvack.org>
Subject: Re: [PATCH 3/5] x86, acpi, cpu-hotplug: Introduce apicid_to_cpuid[] array to store persistent cpuid <-> apicid mapping.
Date: Wed, 15 Jul 2015 11:33:57 +0800	[thread overview]
Message-ID: <55A5D4A5.8040806@cn.fujitsu.com> (raw)
In-Reply-To: <CAChTCPw6ZLs7XgApfN1exeB6TVcQji6ryq+HrK-admp=FGfiTA@mail.gmail.com>

Hi Mika,

On 07/07/2015 07:14 PM, Mika Penttilä wrote:
> I think you forgot to reserve CPU 0 for BSP in cpuid mask.

Sorry for the late reply.

I'm not familiar with BSP.  Do you mean in get_cpuid(),
I should reserve 0 for physical cpu0 in BSP ?

Would you please share more detail ?

Thanks.

>
> --Mika
>
> On Tue, Jul 7, 2015 at 12:30 PM, Tang Chen <tangchen@cn.fujitsu.com> wrote:
>> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>>
>> In this patch, we introduce a new static array named apicid_to_cpuid[],
>> which is large enough to store info for all possible cpus.
>>
>> And then, we modify the cpuid calculation. In generic_processor_info(),
>> it simply finds the next unused cpuid. And it is also why the cpuid <-> nodeid
>> mapping changes with node hotplug.
>>
>> After this patch, we find the next unused cpuid, map it to an apicid,
>> and store the mapping in apicid_to_cpuid[], so that cpuid <-> apicid
>> mapping will be persistent.
>>
>> And finally we will use this array to make cpuid <-> nodeid persistent.
>>
>> cpuid <-> apicid mapping is established at local apic registeration time.
>> But non-present or disabled cpus are ignored.
>>
>> In this patch, we establish all possible cpuid <-> apicid mapping when
>> registering local apic.
>>
>>
>> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>> ---
>>   arch/x86/include/asm/mpspec.h |  1 +
>>   arch/x86/kernel/acpi/boot.c   |  6 ++----
>>   arch/x86/kernel/apic/apic.c   | 47 ++++++++++++++++++++++++++++++++++++++++---
>>   3 files changed, 47 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
>> index b07233b..db902d8 100644
>> --- a/arch/x86/include/asm/mpspec.h
>> +++ b/arch/x86/include/asm/mpspec.h
>> @@ -86,6 +86,7 @@ static inline void early_reserve_e820_mpc_new(void) { }
>>   #endif
>>
>>   int generic_processor_info(int apicid, int version);
>> +int __generic_processor_info(int apicid, int version, bool enabled);
>>
>>   #define PHYSID_ARRAY_SIZE      BITS_TO_LONGS(MAX_LOCAL_APIC)
>>
>> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
>> index e49ee24..bcc85b2 100644
>> --- a/arch/x86/kernel/acpi/boot.c
>> +++ b/arch/x86/kernel/acpi/boot.c
>> @@ -174,15 +174,13 @@ static int acpi_register_lapic(int id, u8 enabled)
>>                  return -EINVAL;
>>          }
>>
>> -       if (!enabled) {
>> +       if (!enabled)
>>                  ++disabled_cpus;
>> -               return -EINVAL;
>> -       }
>>
>>          if (boot_cpu_physical_apicid != -1U)
>>                  ver = apic_version[boot_cpu_physical_apicid];
>>
>> -       return generic_processor_info(id, ver);
>> +       return __generic_processor_info(id, ver, enabled);
>>   }
>>
>>   static int __init
>> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
>> index a9c9830..c744ffb 100644
>> --- a/arch/x86/kernel/apic/apic.c
>> +++ b/arch/x86/kernel/apic/apic.c
>> @@ -1977,7 +1977,38 @@ void disconnect_bsp_APIC(int virt_wire_setup)
>>          apic_write(APIC_LVT1, value);
>>   }
>>
>> -static int __generic_processor_info(int apicid, int version, bool enabled)
>> +/*
>> + * Logic cpu number(cpuid) to local APIC id persistent mappings.
>> + * Do not clear the mapping even if cpu is hot-removed.
>> + */
>> +static int apicid_to_cpuid[] = {
>> +       [0 ... NR_CPUS - 1] = -1,
>> +};
>> +
>> +/*
>> + * Internal cpu id bits, set the bit once cpu present, and never clear it.
>> + */
>> +static cpumask_t cpuid_mask = CPU_MASK_NONE;
>> +
>> +static int get_cpuid(int apicid)
>> +{
>> +       int free_id, i;
>> +
>> +       free_id = cpumask_next_zero(-1, &cpuid_mask);
>> +       if (free_id >= nr_cpu_ids)
>> +               return -1;
>> +
>> +       for (i = 0; i < free_id; i++)
>> +               if (apicid_to_cpuid[i] == apicid)
>> +                       return i;
>> +
>> +       apicid_to_cpuid[free_id] = apicid;
>> +       cpumask_set_cpu(free_id, &cpuid_mask);
>> +
>> +       return free_id;
>> +}
>> +
>> +int __generic_processor_info(int apicid, int version, bool enabled)
>>   {
>>          int cpu, max = nr_cpu_ids;
>>          bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid,
>> @@ -2058,8 +2089,18 @@ static int __generic_processor_info(int apicid, int version, bool enabled)
>>                   * for BSP.
>>                   */
>>                  cpu = 0;
>> -       } else
>> -               cpu = cpumask_next_zero(-1, cpu_present_mask);
>> +       } else {
>> +               cpu = get_cpuid(apicid);
>> +               if (cpu < 0) {
>> +                       int thiscpu = max + disabled_cpus;
>> +
>> +                       pr_warning("  Processor %d/0x%x ignored.\n",
>> +                                  thiscpu, apicid);
>> +                       if (enabled)
>> +                               disabled_cpus++;
>> +                       return -EINVAL;
>> +               }
>> +       }
>>
>>          /*
>>           * Validate version
>> --
>> 1.9.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
> .
>


  reply	other threads:[~2015-07-15  3:33 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-07  9:30 [PATCH 0/5] Make cpuid <-> nodeid mapping persistent Tang Chen
2015-07-07  9:30 ` Tang Chen
2015-07-07  9:30 ` Tang Chen
2015-07-07  9:30 ` [PATCH 1/5] x86, gfp: Cache best near node for memory allocation Tang Chen
2015-07-07  9:30   ` Tang Chen
2015-07-15 21:48   ` Tejun Heo
2015-07-15 21:48     ` Tejun Heo
2015-08-04  3:36     ` Tang Chen
2015-08-04  3:36       ` Tang Chen
2015-08-04  3:36       ` Tang Chen
2015-08-04  8:05       ` Jiang Liu
2015-08-04  8:05         ` Jiang Liu
2015-08-04  8:24         ` Tang Chen
2015-08-04  8:24           ` Tang Chen
2015-08-04  8:24           ` Tang Chen
2015-08-09  6:15         ` Tang Chen
2015-08-09  6:15           ` Tang Chen
2015-08-12  1:53           ` Jiang Liu
2015-08-12  1:53             ` Jiang Liu
2015-08-04  8:26       ` gongzhaogang
2015-08-04  8:26         ` gongzhaogang
2015-08-04  8:53         ` Tang Chen
2015-08-04  8:58         ` Tang Chen
2015-07-07  9:30 ` [PATCH 2/5] x86, acpi, cpu-hotplug: Enable acpi to register all possible cpus at boot time Tang Chen
2015-07-07  9:30   ` Tang Chen
2015-07-07  9:30 ` [PATCH 3/5] x86, acpi, cpu-hotplug: Introduce apicid_to_cpuid[] array to store persistent cpuid <-> apicid mapping Tang Chen
2015-07-07  9:30   ` Tang Chen
2015-07-07 11:14   ` Mika Penttilä
2015-07-07 11:14     ` Mika Penttilä
2015-07-15  3:33     ` Tang Chen [this message]
2015-07-15  3:33       ` Tang Chen
2015-07-15  3:33       ` Tang Chen
2015-07-15  5:35       ` Jiang Liu
2015-07-15  5:35         ` Jiang Liu
2015-07-15  5:35         ` Jiang Liu
2015-07-15  6:26         ` Tang Chen
2015-07-15  6:26           ` Tang Chen
2015-07-15  6:26           ` Tang Chen
2015-07-15 22:02   ` Tejun Heo
2015-07-15 22:02     ` Tejun Heo
2015-07-07  9:30 ` [PATCH 4/5] x86, acpi, cpu-hotplug: Enable MADT APIs to return disabled apicid Tang Chen
2015-07-07  9:30   ` Tang Chen
2015-07-15 22:06   ` Tejun Heo
2015-07-15 22:06     ` Tejun Heo
2015-07-07  9:30 ` [PATCH 5/5] x86, acpi, cpu-hotplug: Set persistent cpuid <-> nodeid mapping when booting Tang Chen
2015-07-07  9:30   ` Tang Chen
2015-07-15 22:13 ` [PATCH 0/5] Make cpuid <-> nodeid mapping persistent Tejun Heo
2015-07-15 22:13   ` Tejun Heo
2015-07-23  4:44   ` Tang Chen
2015-07-23  4:44     ` Tang Chen
2015-07-23  4:44     ` Tang Chen
2015-07-23 18:32     ` Tejun Heo
2015-07-23 18:32       ` Tejun Heo
  -- strict thread matches above, loose matches on Subject: below --
2015-07-01  4:45 Tang Chen
2015-07-01  4:45 ` [PATCH 3/5] x86, acpi, cpu-hotplug: Introduce apicid_to_cpuid[] array to store persistent cpuid <-> apicid mapping Tang Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55A5D4A5.8040806@cn.fujitsu.com \
    --to=tangchen@cn.fujitsu.com \
    --cc=gongzhaogang@inspur.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mika.j.penttila@gmail.com \
    --cc=rjw@rjwysocki.net \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.