15d62536a9
hw/core/cpu.h is already using struct forward declarations in some cases to avoid inclusions, and otherwise CPUAddressSpace and CPUJumpCache are only used together with their definition. CPUTLBEntryFull is always used when their definition is available. Remove all three from typedefs.h. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
34 lines
873 B
C
34 lines
873 B
C
/*
|
|
* The per-CPU TranslationBlock jump cache.
|
|
*
|
|
* Copyright (c) 2003 Fabrice Bellard
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef ACCEL_TCG_TB_JMP_CACHE_H
|
|
#define ACCEL_TCG_TB_JMP_CACHE_H
|
|
|
|
#include "qemu/rcu.h"
|
|
#include "exec/cpu-common.h"
|
|
|
|
#define TB_JMP_CACHE_BITS 12
|
|
#define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
|
|
|
|
/*
|
|
* Invalidated in parallel; all accesses to 'tb' must be atomic.
|
|
* A valid entry is read/written by a single CPU, therefore there is
|
|
* no need for qatomic_rcu_read() and pc is always consistent with a
|
|
* non-NULL value of 'tb'. Strictly speaking pc is only needed for
|
|
* CF_PCREL, but it's used always for simplicity.
|
|
*/
|
|
typedef struct CPUJumpCache {
|
|
struct rcu_head rcu;
|
|
struct {
|
|
TranslationBlock *tb;
|
|
vaddr pc;
|
|
} array[TB_JMP_CACHE_SIZE];
|
|
} CPUJumpCache;
|
|
|
|
#endif /* ACCEL_TCG_TB_JMP_CACHE_H */
|