Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/parisc/kernel/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  topology.c   Sprache: C

 
/*
 * arch/parisc/kernel/topology.c
 *
 * Copyright (C) 2017 Helge Deller <deller@gmx.de>
 *
 * based on arch/arm/kernel/topology.c
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 */


#include <linux/percpu.h>
#include <linux/sched.h>
#include <linux/sched/topology.h>
#include <linux/cpu.h>

#include <asm/topology.h>
#include <asm/sections.h>

static DEFINE_PER_CPU(struct cpu, cpu_devices);

/*
 * store_cpu_topology is called at boot when only one cpu is running
 * and with the mutex cpu_hotplug.lock locked, when several cpus have booted,
 * which prevents simultaneous write access to cpu_topology array
 */

void store_cpu_topology(unsigned int cpuid)
{
 struct cpu_topology *cpuid_topo = &cpu_topology[cpuid];
 struct cpuinfo_parisc *p;
 int max_socket = -1;
 unsigned long cpu;

 /* If the cpu topology has been already set, just return */
 if (cpuid_topo->core_id != -1)
  return;

#ifdef CONFIG_HOTPLUG_CPU
 per_cpu(cpu_devices, cpuid).hotpluggable = 1;
#endif
 if (register_cpu(&per_cpu(cpu_devices, cpuid), cpuid))
  pr_warn("Failed to register CPU%d device", cpuid);

 /* create cpu topology mapping */
 cpuid_topo->thread_id = -1;
 cpuid_topo->core_id = 0;

 p = &per_cpu(cpu_data, cpuid);
 for_each_online_cpu(cpu) {
  const struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu);

  if (cpu == cpuid) /* ignore current cpu */
   continue;

  if (cpuinfo->cpu_loc == p->cpu_loc) {
   cpuid_topo->core_id = cpu_topology[cpu].core_id;
   if (p->cpu_loc) {
    cpuid_topo->core_id++;
    cpuid_topo->package_id = cpu_topology[cpu].package_id;
    continue;
   }
  }

  if (cpuid_topo->package_id == -1)
   max_socket = max(max_socket, cpu_topology[cpu].package_id);
 }

 if (cpuid_topo->package_id == -1)
  cpuid_topo->package_id = max_socket + 1;

 update_siblings_masks(cpuid);

 pr_info("CPU%u: cpu core %d of socket %d\n",
  cpuid,
  cpu_topology[cpuid].core_id,
  cpu_topology[cpuid].package_id);
}

/*
 * init_cpu_topology is called at boot when only one cpu is running
 * which prevent simultaneous write access to cpu_topology array
 */

void __init init_cpu_topology(void)
{
 reset_cpu_topology();
}

Messung V0.5
C=94 H=85 G=89

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.