BAD_APICID is used by cpuinfo_x86's phys_proc_id, cpu_core_id
and compute_unit_id even though these fields don't hold an APIC ID
itself but rather its derivative.
Provide appropriate macros for each of those three (and make them
unsigned).
This also fixes regression introduced by commit
2090f14c5cbd ("sysctl:
make XEN_SYSCTL_topologyinfo sysctl a little more efficient") which
leaked BAD_APICID into common code, breaking ARM.
Reported-by: Julien Grall <julien.grall@linaro.org>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Ditch INVALID_{CORE,SOCKET}ID in favor of always using
XEN_INVALID_{CORE,SOCKET}_ID.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
#include <asm/apic.h>
#include <mach_apic.h>
#include <asm/setup.h>
+#include <public/sysctl.h> /* for XEN_INVALID_{SOCKET,CORE}_ID */
#include "cpu.h"
c->x86_max_cores = 1;
c->x86_num_siblings = 1;
c->x86_clflush_size = 0;
- c->phys_proc_id = BAD_APICID;
- c->cpu_core_id = BAD_APICID;
- c->compute_unit_id = BAD_APICID;
+ c->phys_proc_id = XEN_INVALID_SOCKET_ID;
+ c->cpu_core_id = XEN_INVALID_CORE_ID;
+ c->compute_unit_id = INVALID_CUID;
memset(&c->x86_capability, 0, sizeof c->x86_capability);
generic_identify(c);
cpumask_clear_cpu(cpu, per_cpu(cpu_sibling_mask, sibling));
cpumask_clear(per_cpu(cpu_sibling_mask, cpu));
cpumask_clear(per_cpu(cpu_core_mask, cpu));
- c[cpu].phys_proc_id = BAD_APICID;
- c[cpu].cpu_core_id = BAD_APICID;
- c[cpu].compute_unit_id = BAD_APICID;
+ c[cpu].phys_proc_id = XEN_INVALID_SOCKET_ID;
+ c[cpu].cpu_core_id = XEN_INVALID_CORE_ID;
+ c[cpu].compute_unit_id = INVALID_CUID;
cpumask_clear_cpu(cpu, &cpu_sibling_setup_map);
}
static void init_pcpu(const struct scheduler *ops, int cpu)
{
- int rqi;
+ unsigned rqi;
unsigned long flags;
struct csched2_private *prv = CSCHED2_PRIV(ops);
struct csched2_runqueue_data *rqd;
else
rqi = cpu_to_socket(cpu);
- if ( rqi < 0 )
+ if ( rqi == XEN_INVALID_SOCKET_ID )
{
printk("%s: cpu_to_socket(%d) returned %d!\n",
__func__, cpu, rqi);
{
/* Check to see if the cpu is online yet */
/* Note: cpu 0 doesn't get a STARTING callback */
- if ( cpu == 0 || cpu_to_socket(cpu) >= 0 )
+ if ( cpu == 0 || cpu_to_socket(cpu) != XEN_INVALID_SOCKET_ID )
init_pcpu(ops, cpu);
else
printk("%s: cpu %d not online yet, deferring initializatgion\n",
if ( cpu_present(i) )
{
cputopo.core = cpu_to_core(i);
- if ( cputopo.core == BAD_APICID )
- cputopo.core = XEN_INVALID_CORE_ID;
cputopo.socket = cpu_to_socket(i);
- if ( cputopo.socket == BAD_APICID )
- cputopo.socket = XEN_INVALID_SOCKET_ID;
cputopo.node = cpu_to_node(i);
if ( cputopo.node == NUMA_NO_NODE )
cputopo.node = XEN_INVALID_NODE_ID;
__u32 booted_cores; /* number of cores as seen by OS */
__u32 x86_num_siblings; /* cpuid logical cpus per chip value */
__u32 apicid;
- int phys_proc_id; /* package ID of each logical CPU */
- int cpu_core_id; /* core ID of each logical CPU*/
- int compute_unit_id; /* AMD compute unit ID of each logical CPU */
+ __u32 phys_proc_id; /* package ID of each logical CPU */
+ __u32 cpu_core_id; /* core ID of each logical CPU*/
+ __u32 compute_unit_id; /* AMD compute unit ID of each logical CPU */
unsigned short x86_clflush_size;
} __cacheline_aligned;
#include <asm/mpspec.h>
#endif
-#define BAD_APICID -1U
+#define BAD_APICID (-1U)
+#define INVALID_CUID (~0U) /* AMD Compute Unit ID */
#ifndef __ASSEMBLY__
/*