Compare commits
46 Commits
ppc-for-2.
...
pull-input
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bdcc3a28b7 | ||
|
|
0419f78fae | ||
|
|
e82597f6f8 | ||
|
|
63678e17cf | ||
|
|
58b590148c | ||
|
|
7d4d7975e5 | ||
|
|
0d6d1ab499 | ||
|
|
c8c14bcb72 | ||
|
|
8648fcd52a | ||
|
|
b3706faf0d | ||
|
|
3b6144bdbb | ||
|
|
b89834f4d7 | ||
|
|
1a8e80d7e8 | ||
|
|
9c5793c503 | ||
|
|
c6c09ba995 | ||
|
|
c36ad13fe9 | ||
|
|
5c31207941 | ||
|
|
6ff45f01c7 | ||
|
|
3768d505ad | ||
|
|
c9f2d70cc8 | ||
|
|
af23906d50 | ||
|
|
0bc60bd7b3 | ||
|
|
7d45e78401 | ||
|
|
a879125b47 | ||
|
|
a1f7f97b95 | ||
|
|
def6029882 | ||
|
|
00b0179347 | ||
|
|
f45cb2f43f | ||
|
|
d9631b90da | ||
|
|
ac43fa508c | ||
|
|
6d55574a65 | ||
|
|
2cd49cbfab | ||
|
|
e939c6ed61 | ||
|
|
340fb41b31 | ||
|
|
3363278808 | ||
|
|
b533f658a9 | ||
|
|
a443bc3496 | ||
|
|
08cf99629d | ||
|
|
06ab66cfab | ||
|
|
6df05bdd17 | ||
|
|
ecb4e01e34 | ||
|
|
9ad665df2a | ||
|
|
a7a5544a3a | ||
|
|
d4715c4183 | ||
|
|
9013dca553 | ||
|
|
4297c8ee6f |
@@ -84,3 +84,10 @@ and clarity it comes on a line by itself:
|
||||
Rationale: a consistent (except for functions...) bracing style reduces
|
||||
ambiguity and avoids needless churn when lines are added or removed.
|
||||
Furthermore, it is the QEMU coding style.
|
||||
|
||||
5. Declarations
|
||||
|
||||
Mixed declarations (interleaving statements and declarations within blocks)
|
||||
are not allowed; declarations should be at the beginning of blocks. In other
|
||||
words, the code should not generate warnings if using GCC's
|
||||
-Wdeclaration-after-statement option.
|
||||
|
||||
46
configure
vendored
46
configure
vendored
@@ -198,6 +198,7 @@ audio_win_int=""
|
||||
cc_i386=i386-pc-linux-gnu-gcc
|
||||
libs_qga=""
|
||||
debug_info="yes"
|
||||
stack_protector=""
|
||||
|
||||
# Don't accept a target_list environment variable.
|
||||
unset target_list
|
||||
@@ -950,6 +951,10 @@ for opt do
|
||||
;;
|
||||
--disable-werror) werror="no"
|
||||
;;
|
||||
--enable-stack-protector) stack_protector="yes"
|
||||
;;
|
||||
--disable-stack-protector) stack_protector="no"
|
||||
;;
|
||||
--disable-curses) curses="no"
|
||||
;;
|
||||
--enable-curses) curses="yes"
|
||||
@@ -1219,6 +1224,7 @@ Advanced options (experts only):
|
||||
--disable-sparse disable sparse checker (default)
|
||||
--disable-strip disable stripping binaries
|
||||
--disable-werror disable compilation abort on warning
|
||||
--disable-stack-protector disable compiler-provided stack protection
|
||||
--disable-sdl disable SDL
|
||||
--enable-sdl enable SDL
|
||||
--with-sdlabi select preferred SDL ABI 1.2 or 2.0
|
||||
@@ -1439,9 +1445,15 @@ for flag in $gcc_flags; do
|
||||
fi
|
||||
done
|
||||
|
||||
if compile_prog "-Werror -fstack-protector-all" "" ; then
|
||||
QEMU_CFLAGS="$QEMU_CFLAGS -fstack-protector-all"
|
||||
LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,-fstack-protector-all"
|
||||
if test "$stack_protector" != "no" ; then
|
||||
gcc_flags="-fstack-protector-strong -fstack-protector-all"
|
||||
for flag in $gcc_flags; do
|
||||
if compile_prog "-Werror $flag" "" ; then
|
||||
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
||||
LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
|
||||
@@ -2712,6 +2724,24 @@ if test "$mingw32" != yes -a "$pthread" = no; then
|
||||
"Make sure to have the pthread libs and headers installed."
|
||||
fi
|
||||
|
||||
# check for pthread_setname_np
|
||||
pthread_setname_np=no
|
||||
cat > $TMPC << EOF
|
||||
#include <pthread.h>
|
||||
|
||||
static void *f(void *p) { return NULL; }
|
||||
int main(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, 0, f, 0);
|
||||
pthread_setname_np(thread, "QEMU");
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
if compile_prog "" "$pthread_lib" ; then
|
||||
pthread_setname_np=yes
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# rbd probe
|
||||
if test "$rbd" != "no" ; then
|
||||
@@ -4648,6 +4678,16 @@ if test "$rdma" = "yes" ; then
|
||||
echo "CONFIG_RDMA=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
# Hold two types of flag:
|
||||
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
||||
# a thread we have a handle to
|
||||
# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
|
||||
# platform
|
||||
if test "$pthread_setname_np" = "yes" ; then
|
||||
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
||||
echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$tcg_interpreter" = "yes"; then
|
||||
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
|
||||
elif test "$ARCH" = "sparc64" ; then
|
||||
|
||||
@@ -534,7 +534,6 @@ static QEMUMachine integratorcp_machine = {
|
||||
.name = "integratorcp",
|
||||
.desc = "ARM Integrator/CP (ARM926EJ-S)",
|
||||
.init = integratorcp_init,
|
||||
.is_default = 1,
|
||||
};
|
||||
|
||||
static void integratorcp_machine_init(void)
|
||||
|
||||
@@ -841,7 +841,7 @@ static void build_pci_bus_end(PCIBus *bus, void *bus_state)
|
||||
pc = PCI_DEVICE_GET_CLASS(pdev);
|
||||
dc = DEVICE_GET_CLASS(pdev);
|
||||
|
||||
if (pc->class_id == PCI_CLASS_BRIDGE_ISA) {
|
||||
if (pc->class_id == PCI_CLASS_BRIDGE_ISA || pc->is_bridge) {
|
||||
set_bit(slot, slot_device_system);
|
||||
}
|
||||
|
||||
@@ -882,7 +882,7 @@ static void build_pci_bus_end(PCIBus *bus, void *bus_state)
|
||||
memcpy(pcihp, ACPI_PCIVGA_AML, ACPI_PCIVGA_SIZEOF);
|
||||
patch_pcivga(i, pcihp);
|
||||
} else if (system) {
|
||||
/* Nothing to do: system devices are in DSDT. */
|
||||
/* Nothing to do: system devices are in DSDT or in SSDT above. */
|
||||
} else if (present) {
|
||||
void *pcihp = acpi_data_push(bus_table,
|
||||
ACPI_PCINOHP_SIZEOF);
|
||||
@@ -907,7 +907,7 @@ static void build_pci_bus_end(PCIBus *bus, void *bus_state)
|
||||
|
||||
build_append_byte(notify, 0x7B); /* AndOp */
|
||||
build_append_byte(notify, 0x68); /* Arg0Op */
|
||||
build_append_int(notify, 0x1 << i);
|
||||
build_append_int(notify, 0x1U << i);
|
||||
build_append_byte(notify, 0x00); /* NullName */
|
||||
build_append_byte(notify, 0x86); /* NotifyOp */
|
||||
build_append_nameseg(notify, "S%.02X_", PCI_DEVFN(i, 0));
|
||||
|
||||
@@ -421,7 +421,7 @@ static const VMStateDescription vmstate_bmdma_current = {
|
||||
}
|
||||
};
|
||||
|
||||
const VMStateDescription vmstate_bmdma_status = {
|
||||
static const VMStateDescription vmstate_bmdma_status = {
|
||||
.name ="ide bmdma/status",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
|
||||
@@ -201,12 +201,12 @@ static void apic_external_nmi(APICCommonState *s)
|
||||
|
||||
#define foreach_apic(apic, deliver_bitmask, code) \
|
||||
{\
|
||||
int __i, __j, __mask;\
|
||||
int __i, __j;\
|
||||
for(__i = 0; __i < MAX_APIC_WORDS; __i++) {\
|
||||
__mask = deliver_bitmask[__i];\
|
||||
uint32_t __mask = deliver_bitmask[__i];\
|
||||
if (__mask) {\
|
||||
for(__j = 0; __j < 32; __j++) {\
|
||||
if (__mask & (1 << __j)) {\
|
||||
if (__mask & (1U << __j)) {\
|
||||
apic = local_apics[__i * 32 + __j];\
|
||||
if (apic) {\
|
||||
code;\
|
||||
|
||||
@@ -123,7 +123,7 @@ static FslMpicInfo fsl_mpic_42 = {
|
||||
#define TCCR_TOG 0x80000000 /* toggles when decrement to zero */
|
||||
|
||||
#define IDR_EP_SHIFT 31
|
||||
#define IDR_EP_MASK (1 << IDR_EP_SHIFT)
|
||||
#define IDR_EP_MASK (1U << IDR_EP_SHIFT)
|
||||
#define IDR_CI0_SHIFT 30
|
||||
#define IDR_CI1_SHIFT 29
|
||||
#define IDR_P1_SHIFT 1
|
||||
@@ -220,17 +220,17 @@ typedef struct IRQSource {
|
||||
} IRQSource;
|
||||
|
||||
#define IVPR_MASK_SHIFT 31
|
||||
#define IVPR_MASK_MASK (1 << IVPR_MASK_SHIFT)
|
||||
#define IVPR_MASK_MASK (1U << IVPR_MASK_SHIFT)
|
||||
#define IVPR_ACTIVITY_SHIFT 30
|
||||
#define IVPR_ACTIVITY_MASK (1 << IVPR_ACTIVITY_SHIFT)
|
||||
#define IVPR_ACTIVITY_MASK (1U << IVPR_ACTIVITY_SHIFT)
|
||||
#define IVPR_MODE_SHIFT 29
|
||||
#define IVPR_MODE_MASK (1 << IVPR_MODE_SHIFT)
|
||||
#define IVPR_MODE_MASK (1U << IVPR_MODE_SHIFT)
|
||||
#define IVPR_POLARITY_SHIFT 23
|
||||
#define IVPR_POLARITY_MASK (1 << IVPR_POLARITY_SHIFT)
|
||||
#define IVPR_POLARITY_MASK (1U << IVPR_POLARITY_SHIFT)
|
||||
#define IVPR_SENSE_SHIFT 22
|
||||
#define IVPR_SENSE_MASK (1 << IVPR_SENSE_SHIFT)
|
||||
#define IVPR_SENSE_MASK (1U << IVPR_SENSE_SHIFT)
|
||||
|
||||
#define IVPR_PRIORITY_MASK (0xF << 16)
|
||||
#define IVPR_PRIORITY_MASK (0xFU << 16)
|
||||
#define IVPR_PRIORITY(_ivprr_) ((int)(((_ivprr_) & IVPR_PRIORITY_MASK) >> 16))
|
||||
#define IVPR_VECTOR(opp, _ivprr_) ((_ivprr_) & (opp)->vector_mask)
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ static void slavio_check_interrupts(SLAVIO_INTCTLState *s, int set_irqs)
|
||||
CPU_IRQ_TIMER_IN;
|
||||
if (i == s->target_cpu) {
|
||||
for (j = 0; j < 32; j++) {
|
||||
if ((s->intregm_pending & (1 << j)) && intbit_to_level[j]) {
|
||||
if ((s->intregm_pending & (1U << j)) && intbit_to_level[j]) {
|
||||
s->slaves[i].intreg_pending |= 1 << intbit_to_level[j];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,8 +71,9 @@ static void update_irq(struct xlx_pic *p)
|
||||
|
||||
/* Update the vector register. */
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (p->regs[R_IPR] & (1 << i))
|
||||
if (p->regs[R_IPR] & (1U << i)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == 32)
|
||||
i = ~0;
|
||||
|
||||
@@ -58,11 +58,11 @@ do { printf("APB: " fmt , ## __VA_ARGS__); } while (0)
|
||||
#define PBM_PCI_IMR_MASK 0x7fffffff
|
||||
#define PBM_PCI_IMR_ENABLED 0x80000000
|
||||
|
||||
#define POR (1 << 31)
|
||||
#define SOFT_POR (1 << 30)
|
||||
#define SOFT_XIR (1 << 29)
|
||||
#define BTN_POR (1 << 28)
|
||||
#define BTN_XIR (1 << 27)
|
||||
#define POR (1U << 31)
|
||||
#define SOFT_POR (1U << 30)
|
||||
#define SOFT_XIR (1U << 29)
|
||||
#define BTN_POR (1U << 28)
|
||||
#define BTN_XIR (1U << 27)
|
||||
#define RESET_MASK 0xf8000000
|
||||
#define RESET_WCMASK 0x98000000
|
||||
#define RESET_WMASK 0x60000000
|
||||
|
||||
@@ -189,9 +189,9 @@ static void pci_do_device_reset(PCIDevice *dev)
|
||||
{
|
||||
int r;
|
||||
|
||||
dev->irq_state = 0;
|
||||
pci_update_irq_status(dev);
|
||||
pci_device_deassert_intx(dev);
|
||||
assert(dev->irq_state == 0);
|
||||
|
||||
/* Clear all writable bits */
|
||||
pci_word_test_and_clear_mask(dev->config + PCI_COMMAND,
|
||||
pci_get_word(dev->wmask + PCI_COMMAND) |
|
||||
|
||||
@@ -142,8 +142,9 @@ static uint64_t pci_host_data_read(void *opaque,
|
||||
{
|
||||
PCIHostState *s = opaque;
|
||||
uint32_t val;
|
||||
if (!(s->config_reg & (1 << 31)))
|
||||
if (!(s->config_reg & (1U << 31))) {
|
||||
return 0xffffffff;
|
||||
}
|
||||
val = pci_data_read(s->bus, s->config_reg | (addr & 3), len);
|
||||
PCI_DPRINTF("read addr " TARGET_FMT_plx " len %d val %x\n",
|
||||
addr, len, val);
|
||||
|
||||
@@ -1002,7 +1002,7 @@ static void cpu_4xx_wdt_cb (void *opaque)
|
||||
case 0x1:
|
||||
timer_mod(ppc40x_timer->wdt_timer, next);
|
||||
ppc40x_timer->wdt_next = next;
|
||||
env->spr[SPR_40x_TSR] |= 1 << 31;
|
||||
env->spr[SPR_40x_TSR] |= 1U << 31;
|
||||
break;
|
||||
case 0x2:
|
||||
timer_mod(ppc40x_timer->wdt_timer, next);
|
||||
|
||||
@@ -128,7 +128,7 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env,
|
||||
|
||||
tlb->attr = 0;
|
||||
tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
|
||||
tlb->size = 1 << 31; /* up to 0x80000000 */
|
||||
tlb->size = 1U << 31; /* up to 0x80000000 */
|
||||
tlb->EPN = va & TARGET_PAGE_MASK;
|
||||
tlb->RPN = pa & TARGET_PAGE_MASK;
|
||||
tlb->PID = 0;
|
||||
@@ -136,7 +136,7 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env,
|
||||
tlb = &env->tlb.tlbe[1];
|
||||
tlb->attr = 0;
|
||||
tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
|
||||
tlb->size = 1 << 31; /* up to 0xffffffff */
|
||||
tlb->size = 1U << 31; /* up to 0xffffffff */
|
||||
tlb->EPN = 0x80000000 & TARGET_PAGE_MASK;
|
||||
tlb->RPN = 0x80000000 & TARGET_PAGE_MASK;
|
||||
tlb->PID = 0;
|
||||
|
||||
@@ -161,7 +161,7 @@ static void ppcuic_set_irq (void *opaque, int irq_num, int level)
|
||||
uint32_t mask, sr;
|
||||
|
||||
uic = opaque;
|
||||
mask = 1 << (31-irq_num);
|
||||
mask = 1U << (31-irq_num);
|
||||
LOG_UIC("%s: irq %d level %d uicsr %08" PRIx32
|
||||
" mask %08" PRIx32 " => %08" PRIx32 " %08" PRIx32 "\n",
|
||||
__func__, irq_num, level,
|
||||
|
||||
@@ -34,15 +34,15 @@
|
||||
/* Timer Control Register */
|
||||
|
||||
#define TCR_WP_SHIFT 30 /* Watchdog Timer Period */
|
||||
#define TCR_WP_MASK (0x3 << TCR_WP_SHIFT)
|
||||
#define TCR_WP_MASK (0x3U << TCR_WP_SHIFT)
|
||||
#define TCR_WRC_SHIFT 28 /* Watchdog Timer Reset Control */
|
||||
#define TCR_WRC_MASK (0x3 << TCR_WRC_SHIFT)
|
||||
#define TCR_WIE (1 << 27) /* Watchdog Timer Interrupt Enable */
|
||||
#define TCR_DIE (1 << 26) /* Decrementer Interrupt Enable */
|
||||
#define TCR_WRC_MASK (0x3U << TCR_WRC_SHIFT)
|
||||
#define TCR_WIE (1U << 27) /* Watchdog Timer Interrupt Enable */
|
||||
#define TCR_DIE (1U << 26) /* Decrementer Interrupt Enable */
|
||||
#define TCR_FP_SHIFT 24 /* Fixed-Interval Timer Period */
|
||||
#define TCR_FP_MASK (0x3 << TCR_FP_SHIFT)
|
||||
#define TCR_FIE (1 << 23) /* Fixed-Interval Timer Interrupt Enable */
|
||||
#define TCR_ARE (1 << 22) /* Auto-Reload Enable */
|
||||
#define TCR_FP_MASK (0x3U << TCR_FP_SHIFT)
|
||||
#define TCR_FIE (1U << 23) /* Fixed-Interval Timer Interrupt Enable */
|
||||
#define TCR_ARE (1U << 22) /* Auto-Reload Enable */
|
||||
|
||||
/* Timer Control Register (e500 specific fields) */
|
||||
|
||||
@@ -53,12 +53,12 @@
|
||||
|
||||
/* Timer Status Register */
|
||||
|
||||
#define TSR_FIS (1 << 26) /* Fixed-Interval Timer Interrupt Status */
|
||||
#define TSR_DIS (1 << 27) /* Decrementer Interrupt Status */
|
||||
#define TSR_FIS (1U << 26) /* Fixed-Interval Timer Interrupt Status */
|
||||
#define TSR_DIS (1U << 27) /* Decrementer Interrupt Status */
|
||||
#define TSR_WRS_SHIFT 28 /* Watchdog Timer Reset Status */
|
||||
#define TSR_WRS_MASK (0x3 << TSR_WRS_SHIFT)
|
||||
#define TSR_WIS (1 << 30) /* Watchdog Timer Interrupt Status */
|
||||
#define TSR_ENW (1 << 31) /* Enable Next Watchdog Timer */
|
||||
#define TSR_WRS_MASK (0x3U << TSR_WRS_SHIFT)
|
||||
#define TSR_WIS (1U << 30) /* Watchdog Timer Interrupt Status */
|
||||
#define TSR_ENW (1U << 31) /* Enable Next Watchdog Timer */
|
||||
|
||||
typedef struct booke_timer_t booke_timer_t;
|
||||
struct booke_timer_t {
|
||||
|
||||
@@ -71,7 +71,7 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env,
|
||||
|
||||
tlb->attr = 0;
|
||||
tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
|
||||
tlb->size = 1 << 31; /* up to 0x80000000 */
|
||||
tlb->size = 1U << 31; /* up to 0x80000000 */
|
||||
tlb->EPN = va & TARGET_PAGE_MASK;
|
||||
tlb->RPN = pa & TARGET_PAGE_MASK;
|
||||
tlb->PID = 0;
|
||||
@@ -79,7 +79,7 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env,
|
||||
tlb = &env->tlb.tlbe[1];
|
||||
tlb->attr = 0;
|
||||
tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
|
||||
tlb->size = 1 << 31; /* up to 0xffffffff */
|
||||
tlb->size = 1U << 31; /* up to 0xffffffff */
|
||||
tlb->EPN = 0x80000000 & TARGET_PAGE_MASK;
|
||||
tlb->RPN = 0x80000000 & TARGET_PAGE_MASK;
|
||||
tlb->PID = 0;
|
||||
|
||||
@@ -328,7 +328,6 @@ static void grlib_gptimer_reset(DeviceState *d)
|
||||
|
||||
unit->scaler = 0;
|
||||
unit->reload = 0;
|
||||
unit->config = 0;
|
||||
|
||||
unit->config = unit->nr_timers;
|
||||
unit->config |= unit->irq_line << 3;
|
||||
|
||||
@@ -506,7 +506,8 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
|
||||
timer->cmp = (uint32_t)timer->cmp;
|
||||
timer->period = (uint32_t)timer->period;
|
||||
}
|
||||
if (activating_bit(old_val, new_val, HPET_TN_ENABLE)) {
|
||||
if (activating_bit(old_val, new_val, HPET_TN_ENABLE) &&
|
||||
hpet_enabled(s)) {
|
||||
hpet_set_timer(timer);
|
||||
} else if (deactivating_bit(old_val, new_val, HPET_TN_ENABLE)) {
|
||||
hpet_del_timer(timer);
|
||||
|
||||
@@ -234,15 +234,15 @@ struct ohci_iso_td {
|
||||
#define OHCI_STATUS_OCR (1<<3)
|
||||
#define OHCI_STATUS_SOC ((1<<6)|(1<<7))
|
||||
|
||||
#define OHCI_INTR_SO (1<<0) /* Scheduling overrun */
|
||||
#define OHCI_INTR_WD (1<<1) /* HcDoneHead writeback */
|
||||
#define OHCI_INTR_SF (1<<2) /* Start of frame */
|
||||
#define OHCI_INTR_RD (1<<3) /* Resume detect */
|
||||
#define OHCI_INTR_UE (1<<4) /* Unrecoverable error */
|
||||
#define OHCI_INTR_FNO (1<<5) /* Frame number overflow */
|
||||
#define OHCI_INTR_RHSC (1<<6) /* Root hub status change */
|
||||
#define OHCI_INTR_OC (1<<30) /* Ownership change */
|
||||
#define OHCI_INTR_MIE (1<<31) /* Master Interrupt Enable */
|
||||
#define OHCI_INTR_SO (1U<<0) /* Scheduling overrun */
|
||||
#define OHCI_INTR_WD (1U<<1) /* HcDoneHead writeback */
|
||||
#define OHCI_INTR_SF (1U<<2) /* Start of frame */
|
||||
#define OHCI_INTR_RD (1U<<3) /* Resume detect */
|
||||
#define OHCI_INTR_UE (1U<<4) /* Unrecoverable error */
|
||||
#define OHCI_INTR_FNO (1U<<5) /* Frame number overflow */
|
||||
#define OHCI_INTR_RHSC (1U<<6) /* Root hub status change */
|
||||
#define OHCI_INTR_OC (1U<<30) /* Ownership change */
|
||||
#define OHCI_INTR_MIE (1U<<31) /* Master Interrupt Enable */
|
||||
|
||||
#define OHCI_HCCA_SIZE 0x100
|
||||
#define OHCI_HCCA_MASK 0xffffff00
|
||||
@@ -253,7 +253,7 @@ struct ohci_iso_td {
|
||||
#define OHCI_FMI_FSMPS 0xffff0000
|
||||
#define OHCI_FMI_FIT 0x80000000
|
||||
|
||||
#define OHCI_FR_RT (1<<31)
|
||||
#define OHCI_FR_RT (1U<<31)
|
||||
|
||||
#define OHCI_LS_THRESH 0x628
|
||||
|
||||
@@ -265,12 +265,12 @@ struct ohci_iso_td {
|
||||
#define OHCI_RHA_NOCP (1<<12)
|
||||
#define OHCI_RHA_POTPGT_MASK 0xff000000
|
||||
|
||||
#define OHCI_RHS_LPS (1<<0)
|
||||
#define OHCI_RHS_OCI (1<<1)
|
||||
#define OHCI_RHS_DRWE (1<<15)
|
||||
#define OHCI_RHS_LPSC (1<<16)
|
||||
#define OHCI_RHS_OCIC (1<<17)
|
||||
#define OHCI_RHS_CRWE (1<<31)
|
||||
#define OHCI_RHS_LPS (1U<<0)
|
||||
#define OHCI_RHS_OCI (1U<<1)
|
||||
#define OHCI_RHS_DRWE (1U<<15)
|
||||
#define OHCI_RHS_LPSC (1U<<16)
|
||||
#define OHCI_RHS_OCIC (1U<<17)
|
||||
#define OHCI_RHS_CRWE (1U<<31)
|
||||
|
||||
#define OHCI_PORT_CCS (1<<0)
|
||||
#define OHCI_PORT_PES (1<<1)
|
||||
|
||||
@@ -472,4 +472,6 @@ size_t buffer_find_nonzero_offset(const void *buf, size_t len);
|
||||
*/
|
||||
int parse_debug_env(const char *name, int max, int initial);
|
||||
|
||||
const char *qemu_ether_ntoa(const MACAddr *mac);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -53,7 +53,12 @@ typedef uint64_t vaddr;
|
||||
|
||||
#define TYPE_CPU "cpu"
|
||||
|
||||
#define CPU(obj) OBJECT_CHECK(CPUState, (obj), TYPE_CPU)
|
||||
/* Since this macro is used a lot in hot code paths and in conjunction with
|
||||
* FooCPU *foo_env_get_cpu(), we deviate from usual QOM practice by using
|
||||
* an unchecked cast.
|
||||
*/
|
||||
#define CPU(obj) ((CPUState *)(obj))
|
||||
|
||||
#define CPU_CLASS(class) OBJECT_CLASS_CHECK(CPUClass, (class), TYPE_CPU)
|
||||
#define CPU_GET_CLASS(obj) OBJECT_GET_CLASS(CPUClass, (obj), TYPE_CPU)
|
||||
|
||||
|
||||
@@ -441,7 +441,7 @@ static int kvm_physical_sync_dirty_bitmap(MemoryRegionSection *section)
|
||||
|
||||
d.slot = mem->slot;
|
||||
|
||||
if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
|
||||
if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) < 0) {
|
||||
DPRINTF("ioctl failed %d\n", errno);
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
@@ -4043,8 +4043,6 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka,
|
||||
struct target_rt_sigframe *frame;
|
||||
abi_ulong info_addr, uc_addr;
|
||||
|
||||
frame_addr = get_sigframe(ka, env, sizeof *frame);
|
||||
|
||||
frame_addr = get_sigframe(ka, env, sizeof(*frame));
|
||||
if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0)) {
|
||||
goto give_sigsegv;
|
||||
|
||||
30
migration.c
30
migration.c
@@ -26,16 +26,6 @@
|
||||
#include "qmp-commands.h"
|
||||
#include "trace.h"
|
||||
|
||||
//#define DEBUG_MIGRATION
|
||||
|
||||
#ifdef DEBUG_MIGRATION
|
||||
#define DPRINTF(fmt, ...) \
|
||||
do { printf("migration: " fmt, ## __VA_ARGS__); } while (0)
|
||||
#else
|
||||
#define DPRINTF(fmt, ...) \
|
||||
do { } while (0)
|
||||
#endif
|
||||
|
||||
enum {
|
||||
MIG_STATE_ERROR = -1,
|
||||
MIG_STATE_NONE,
|
||||
@@ -112,7 +102,6 @@ static void process_incoming_migration_co(void *opaque)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
qemu_announce_self();
|
||||
DPRINTF("successfully loaded vm state\n");
|
||||
|
||||
bdrv_clear_incoming_migration_all();
|
||||
/* Make sure all file formats flush their mutable metadata */
|
||||
@@ -306,7 +295,7 @@ static void migrate_fd_cleanup(void *opaque)
|
||||
s->cleanup_bh = NULL;
|
||||
|
||||
if (s->file) {
|
||||
DPRINTF("closing file\n");
|
||||
trace_migrate_fd_cleanup();
|
||||
qemu_mutex_unlock_iothread();
|
||||
qemu_thread_join(&s->thread);
|
||||
qemu_mutex_lock_iothread();
|
||||
@@ -329,7 +318,7 @@ static void migrate_fd_cleanup(void *opaque)
|
||||
|
||||
void migrate_fd_error(MigrationState *s)
|
||||
{
|
||||
DPRINTF("setting error state\n");
|
||||
trace_migrate_fd_error();
|
||||
assert(s->file == NULL);
|
||||
s->state = MIG_STATE_ERROR;
|
||||
trace_migrate_set_state(MIG_STATE_ERROR);
|
||||
@@ -339,7 +328,7 @@ void migrate_fd_error(MigrationState *s)
|
||||
static void migrate_fd_cancel(MigrationState *s)
|
||||
{
|
||||
int old_state ;
|
||||
DPRINTF("cancelling migration\n");
|
||||
trace_migrate_fd_cancel();
|
||||
|
||||
do {
|
||||
old_state = s->state;
|
||||
@@ -589,29 +578,23 @@ static void *migration_thread(void *opaque)
|
||||
int64_t start_time = initial_time;
|
||||
bool old_vm_running = false;
|
||||
|
||||
DPRINTF("beginning savevm\n");
|
||||
qemu_savevm_state_begin(s->file, &s->params);
|
||||
|
||||
s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
|
||||
migrate_set_state(s, MIG_STATE_SETUP, MIG_STATE_ACTIVE);
|
||||
|
||||
DPRINTF("setup complete\n");
|
||||
|
||||
while (s->state == MIG_STATE_ACTIVE) {
|
||||
int64_t current_time;
|
||||
uint64_t pending_size;
|
||||
|
||||
if (!qemu_file_rate_limit(s->file)) {
|
||||
DPRINTF("iterate\n");
|
||||
pending_size = qemu_savevm_state_pending(s->file, max_size);
|
||||
DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n",
|
||||
pending_size, max_size);
|
||||
trace_migrate_pending(pending_size, max_size);
|
||||
if (pending_size && pending_size >= max_size) {
|
||||
qemu_savevm_state_iterate(s->file);
|
||||
} else {
|
||||
int ret;
|
||||
|
||||
DPRINTF("done iterating\n");
|
||||
qemu_mutex_lock_iothread();
|
||||
start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
|
||||
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
|
||||
@@ -650,9 +633,8 @@ static void *migration_thread(void *opaque)
|
||||
s->mbps = time_spent ? (((double) transferred_bytes * 8.0) /
|
||||
((double) time_spent / 1000.0)) / 1000.0 / 1000.0 : -1;
|
||||
|
||||
DPRINTF("transferred %" PRIu64 " time_spent %" PRIu64
|
||||
" bandwidth %g max_size %" PRId64 "\n",
|
||||
transferred_bytes, time_spent, bandwidth, max_size);
|
||||
trace_migrate_transferred(transferred_bytes, time_spent,
|
||||
bandwidth, max_size);
|
||||
/* if we haven't sent anything, we don't want to recalculate
|
||||
10000 is a small enough number for our purposes */
|
||||
if (s->dirty_bytes_rate && transferred_bytes > 10000) {
|
||||
|
||||
@@ -1938,7 +1938,7 @@ The following options are specific to the PowerPC emulation:
|
||||
|
||||
@item -g @var{W}x@var{H}[x@var{DEPTH}]
|
||||
|
||||
Set the initial VGA graphic mode. The default is 800x600x15.
|
||||
Set the initial VGA graphic mode. The default is 800x600x32.
|
||||
|
||||
@item -prom-env @var{string}
|
||||
|
||||
@@ -1996,7 +1996,7 @@ QEMU emulates the following sun4m peripherals:
|
||||
@item
|
||||
IOMMU
|
||||
@item
|
||||
TCX Frame buffer
|
||||
TCX or cgthree Frame buffer
|
||||
@item
|
||||
Lance (Am7990) Ethernet
|
||||
@item
|
||||
@@ -2023,7 +2023,7 @@ firmware implementation. The goal is to implement a 100% IEEE
|
||||
|
||||
A sample Linux 2.6 series kernel and ram disk image are available on
|
||||
the QEMU web site. There are still issues with NetBSD and OpenBSD, but
|
||||
some kernel versions work. Please note that currently Solaris kernels
|
||||
some kernel versions work. Please note that currently older Solaris kernels
|
||||
don't work probably due to interface issues between OpenBIOS and
|
||||
Solaris.
|
||||
|
||||
@@ -2035,8 +2035,9 @@ The following options are specific to the Sparc32 emulation:
|
||||
|
||||
@item -g @var{W}x@var{H}x[x@var{DEPTH}]
|
||||
|
||||
Set the initial TCX graphic mode. The default is 1024x768x8, currently
|
||||
the only other possible mode is 1024x768x24.
|
||||
Set the initial graphics mode. For TCX, the default is 1024x768x8 with the
|
||||
option of 1024x768x24. For cgthree, the default is 1024x768x8 with the option
|
||||
of 1152x900x8 for people who wish to use OBP.
|
||||
|
||||
@item -prom-env @var{string}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "block/coroutine.h"
|
||||
#include "migration/migration.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "trace.h"
|
||||
|
||||
#define IO_BUF_SIZE 32768
|
||||
#define MAX_IOV_SIZE MIN(IOV_MAX, 64)
|
||||
@@ -595,6 +596,7 @@ int qemu_fclose(QEMUFile *f)
|
||||
ret = f->last_error;
|
||||
}
|
||||
g_free(f);
|
||||
trace_qemu_file_fclose();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1043,7 +1043,7 @@ Rotate graphical output some deg left (only PXA LCD).
|
||||
ETEXI
|
||||
|
||||
DEF("vga", HAS_ARG, QEMU_OPTION_vga,
|
||||
"-vga [std|cirrus|vmware|qxl|xenfb|none]\n"
|
||||
"-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|none]\n"
|
||||
" select video card type\n", QEMU_ARCH_ALL)
|
||||
STEXI
|
||||
@item -vga @var{type}
|
||||
@@ -1068,6 +1068,14 @@ card.
|
||||
QXL paravirtual graphic card. It is VGA compatible (including VESA
|
||||
2.0 VBE support). Works best with qxl guest drivers installed though.
|
||||
Recommended choice when using the spice protocol.
|
||||
@item tcx
|
||||
(sun4m only) Sun TCX framebuffer. This is the default framebuffer for
|
||||
sun4m machines and offers both 8-bit and 24-bit colour depths at a
|
||||
fixed resolution of 1024x768.
|
||||
@item cg3
|
||||
(sun4m only) Sun cgthree framebuffer. This is a simple 8-bit framebuffer
|
||||
for sun4m machines available in both 1024x768 (OpenBIOS) and 1152x900 (OBP)
|
||||
resolutions aimed at people wishing to run older Solaris versions.
|
||||
@item none
|
||||
Disable VGA card.
|
||||
@end table
|
||||
|
||||
8
savevm.c
8
savevm.c
@@ -81,6 +81,7 @@ static void qemu_announce_self_iter(NICState *nic, void *opaque)
|
||||
uint8_t buf[60];
|
||||
int len;
|
||||
|
||||
trace_qemu_announce_self_iter(qemu_ether_ntoa(&nic->conf->macaddr));
|
||||
len = announce_self_create(buf, nic->conf->macaddr.a);
|
||||
|
||||
qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
|
||||
@@ -429,6 +430,7 @@ void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
|
||||
|
||||
static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
|
||||
{
|
||||
trace_vmstate_load(se->idstr, se->vmsd ? se->vmsd->name : "(old)");
|
||||
if (!se->vmsd) { /* Old style */
|
||||
return se->ops->load_state(f, se->opaque, version_id);
|
||||
}
|
||||
@@ -437,6 +439,7 @@ static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
|
||||
|
||||
static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
|
||||
{
|
||||
trace_vmstate_save(se->idstr, se->vmsd ? se->vmsd->name : "(old)");
|
||||
if (!se->vmsd) { /* Old style */
|
||||
se->ops->save_state(f, se->opaque);
|
||||
return;
|
||||
@@ -463,6 +466,7 @@ void qemu_savevm_state_begin(QEMUFile *f,
|
||||
SaveStateEntry *se;
|
||||
int ret;
|
||||
|
||||
trace_savevm_state_begin();
|
||||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||
if (!se->ops || !se->ops->set_params) {
|
||||
continue;
|
||||
@@ -515,6 +519,7 @@ int qemu_savevm_state_iterate(QEMUFile *f)
|
||||
SaveStateEntry *se;
|
||||
int ret = 1;
|
||||
|
||||
trace_savevm_state_iterate();
|
||||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||
if (!se->ops || !se->ops->save_live_iterate) {
|
||||
continue;
|
||||
@@ -554,6 +559,8 @@ void qemu_savevm_state_complete(QEMUFile *f)
|
||||
SaveStateEntry *se;
|
||||
int ret;
|
||||
|
||||
trace_savevm_state_complete();
|
||||
|
||||
cpu_synchronize_all_states();
|
||||
|
||||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||
@@ -628,6 +635,7 @@ void qemu_savevm_state_cancel(void)
|
||||
{
|
||||
SaveStateEntry *se;
|
||||
|
||||
trace_savevm_state_cancel();
|
||||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||
if (se->ops && se->ops->cancel) {
|
||||
se->ops->cancel(se->opaque);
|
||||
|
||||
@@ -18,6 +18,7 @@ git clone "${src}" ${destination}
|
||||
pushd ${destination}
|
||||
git checkout "v${version}"
|
||||
git submodule update --init
|
||||
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
||||
rm -rf .git roms/*/.git dtc/.git pixman/.git
|
||||
popd
|
||||
tar cfj ${destination}.tar.bz2 ${destination}
|
||||
|
||||
@@ -88,7 +88,7 @@ static bool m_needed(void *opaque)
|
||||
return arm_feature(env, ARM_FEATURE_M);
|
||||
}
|
||||
|
||||
const VMStateDescription vmstate_m = {
|
||||
static const VMStateDescription vmstate_m = {
|
||||
.name = "cpu/m",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
|
||||
@@ -316,7 +316,7 @@ typedef struct X86RegisterInfo32 {
|
||||
|
||||
#define REGISTER(reg) \
|
||||
[R_##reg] = { .name = #reg, .qapi_enum = X86_CPU_REGISTER32_##reg }
|
||||
X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = {
|
||||
static const X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = {
|
||||
REGISTER(EAX),
|
||||
REGISTER(ECX),
|
||||
REGISTER(EDX),
|
||||
|
||||
@@ -194,35 +194,35 @@
|
||||
#define CR0_PE_SHIFT 0
|
||||
#define CR0_MP_SHIFT 1
|
||||
|
||||
#define CR0_PE_MASK (1 << 0)
|
||||
#define CR0_MP_MASK (1 << 1)
|
||||
#define CR0_EM_MASK (1 << 2)
|
||||
#define CR0_TS_MASK (1 << 3)
|
||||
#define CR0_ET_MASK (1 << 4)
|
||||
#define CR0_NE_MASK (1 << 5)
|
||||
#define CR0_WP_MASK (1 << 16)
|
||||
#define CR0_AM_MASK (1 << 18)
|
||||
#define CR0_PG_MASK (1 << 31)
|
||||
#define CR0_PE_MASK (1U << 0)
|
||||
#define CR0_MP_MASK (1U << 1)
|
||||
#define CR0_EM_MASK (1U << 2)
|
||||
#define CR0_TS_MASK (1U << 3)
|
||||
#define CR0_ET_MASK (1U << 4)
|
||||
#define CR0_NE_MASK (1U << 5)
|
||||
#define CR0_WP_MASK (1U << 16)
|
||||
#define CR0_AM_MASK (1U << 18)
|
||||
#define CR0_PG_MASK (1U << 31)
|
||||
|
||||
#define CR4_VME_MASK (1 << 0)
|
||||
#define CR4_PVI_MASK (1 << 1)
|
||||
#define CR4_TSD_MASK (1 << 2)
|
||||
#define CR4_DE_MASK (1 << 3)
|
||||
#define CR4_PSE_MASK (1 << 4)
|
||||
#define CR4_PAE_MASK (1 << 5)
|
||||
#define CR4_MCE_MASK (1 << 6)
|
||||
#define CR4_PGE_MASK (1 << 7)
|
||||
#define CR4_PCE_MASK (1 << 8)
|
||||
#define CR4_VME_MASK (1U << 0)
|
||||
#define CR4_PVI_MASK (1U << 1)
|
||||
#define CR4_TSD_MASK (1U << 2)
|
||||
#define CR4_DE_MASK (1U << 3)
|
||||
#define CR4_PSE_MASK (1U << 4)
|
||||
#define CR4_PAE_MASK (1U << 5)
|
||||
#define CR4_MCE_MASK (1U << 6)
|
||||
#define CR4_PGE_MASK (1U << 7)
|
||||
#define CR4_PCE_MASK (1U << 8)
|
||||
#define CR4_OSFXSR_SHIFT 9
|
||||
#define CR4_OSFXSR_MASK (1 << CR4_OSFXSR_SHIFT)
|
||||
#define CR4_OSXMMEXCPT_MASK (1 << 10)
|
||||
#define CR4_VMXE_MASK (1 << 13)
|
||||
#define CR4_SMXE_MASK (1 << 14)
|
||||
#define CR4_FSGSBASE_MASK (1 << 16)
|
||||
#define CR4_PCIDE_MASK (1 << 17)
|
||||
#define CR4_OSXSAVE_MASK (1 << 18)
|
||||
#define CR4_SMEP_MASK (1 << 20)
|
||||
#define CR4_SMAP_MASK (1 << 21)
|
||||
#define CR4_OSFXSR_MASK (1U << CR4_OSFXSR_SHIFT)
|
||||
#define CR4_OSXMMEXCPT_MASK (1U << 10)
|
||||
#define CR4_VMXE_MASK (1U << 13)
|
||||
#define CR4_SMXE_MASK (1U << 14)
|
||||
#define CR4_FSGSBASE_MASK (1U << 16)
|
||||
#define CR4_PCIDE_MASK (1U << 17)
|
||||
#define CR4_OSXSAVE_MASK (1U << 18)
|
||||
#define CR4_SMEP_MASK (1U << 20)
|
||||
#define CR4_SMAP_MASK (1U << 21)
|
||||
|
||||
#define DR6_BD (1 << 13)
|
||||
#define DR6_BS (1 << 14)
|
||||
@@ -407,96 +407,96 @@ typedef enum FeatureWord {
|
||||
typedef uint32_t FeatureWordArray[FEATURE_WORDS];
|
||||
|
||||
/* cpuid_features bits */
|
||||
#define CPUID_FP87 (1 << 0)
|
||||
#define CPUID_VME (1 << 1)
|
||||
#define CPUID_DE (1 << 2)
|
||||
#define CPUID_PSE (1 << 3)
|
||||
#define CPUID_TSC (1 << 4)
|
||||
#define CPUID_MSR (1 << 5)
|
||||
#define CPUID_PAE (1 << 6)
|
||||
#define CPUID_MCE (1 << 7)
|
||||
#define CPUID_CX8 (1 << 8)
|
||||
#define CPUID_APIC (1 << 9)
|
||||
#define CPUID_SEP (1 << 11) /* sysenter/sysexit */
|
||||
#define CPUID_MTRR (1 << 12)
|
||||
#define CPUID_PGE (1 << 13)
|
||||
#define CPUID_MCA (1 << 14)
|
||||
#define CPUID_CMOV (1 << 15)
|
||||
#define CPUID_PAT (1 << 16)
|
||||
#define CPUID_PSE36 (1 << 17)
|
||||
#define CPUID_PN (1 << 18)
|
||||
#define CPUID_CLFLUSH (1 << 19)
|
||||
#define CPUID_DTS (1 << 21)
|
||||
#define CPUID_ACPI (1 << 22)
|
||||
#define CPUID_MMX (1 << 23)
|
||||
#define CPUID_FXSR (1 << 24)
|
||||
#define CPUID_SSE (1 << 25)
|
||||
#define CPUID_SSE2 (1 << 26)
|
||||
#define CPUID_SS (1 << 27)
|
||||
#define CPUID_HT (1 << 28)
|
||||
#define CPUID_TM (1 << 29)
|
||||
#define CPUID_IA64 (1 << 30)
|
||||
#define CPUID_PBE (1 << 31)
|
||||
#define CPUID_FP87 (1U << 0)
|
||||
#define CPUID_VME (1U << 1)
|
||||
#define CPUID_DE (1U << 2)
|
||||
#define CPUID_PSE (1U << 3)
|
||||
#define CPUID_TSC (1U << 4)
|
||||
#define CPUID_MSR (1U << 5)
|
||||
#define CPUID_PAE (1U << 6)
|
||||
#define CPUID_MCE (1U << 7)
|
||||
#define CPUID_CX8 (1U << 8)
|
||||
#define CPUID_APIC (1U << 9)
|
||||
#define CPUID_SEP (1U << 11) /* sysenter/sysexit */
|
||||
#define CPUID_MTRR (1U << 12)
|
||||
#define CPUID_PGE (1U << 13)
|
||||
#define CPUID_MCA (1U << 14)
|
||||
#define CPUID_CMOV (1U << 15)
|
||||
#define CPUID_PAT (1U << 16)
|
||||
#define CPUID_PSE36 (1U << 17)
|
||||
#define CPUID_PN (1U << 18)
|
||||
#define CPUID_CLFLUSH (1U << 19)
|
||||
#define CPUID_DTS (1U << 21)
|
||||
#define CPUID_ACPI (1U << 22)
|
||||
#define CPUID_MMX (1U << 23)
|
||||
#define CPUID_FXSR (1U << 24)
|
||||
#define CPUID_SSE (1U << 25)
|
||||
#define CPUID_SSE2 (1U << 26)
|
||||
#define CPUID_SS (1U << 27)
|
||||
#define CPUID_HT (1U << 28)
|
||||
#define CPUID_TM (1U << 29)
|
||||
#define CPUID_IA64 (1U << 30)
|
||||
#define CPUID_PBE (1U << 31)
|
||||
|
||||
#define CPUID_EXT_SSE3 (1 << 0)
|
||||
#define CPUID_EXT_PCLMULQDQ (1 << 1)
|
||||
#define CPUID_EXT_DTES64 (1 << 2)
|
||||
#define CPUID_EXT_MONITOR (1 << 3)
|
||||
#define CPUID_EXT_DSCPL (1 << 4)
|
||||
#define CPUID_EXT_VMX (1 << 5)
|
||||
#define CPUID_EXT_SMX (1 << 6)
|
||||
#define CPUID_EXT_EST (1 << 7)
|
||||
#define CPUID_EXT_TM2 (1 << 8)
|
||||
#define CPUID_EXT_SSSE3 (1 << 9)
|
||||
#define CPUID_EXT_CID (1 << 10)
|
||||
#define CPUID_EXT_FMA (1 << 12)
|
||||
#define CPUID_EXT_CX16 (1 << 13)
|
||||
#define CPUID_EXT_XTPR (1 << 14)
|
||||
#define CPUID_EXT_PDCM (1 << 15)
|
||||
#define CPUID_EXT_PCID (1 << 17)
|
||||
#define CPUID_EXT_DCA (1 << 18)
|
||||
#define CPUID_EXT_SSE41 (1 << 19)
|
||||
#define CPUID_EXT_SSE42 (1 << 20)
|
||||
#define CPUID_EXT_X2APIC (1 << 21)
|
||||
#define CPUID_EXT_MOVBE (1 << 22)
|
||||
#define CPUID_EXT_POPCNT (1 << 23)
|
||||
#define CPUID_EXT_TSC_DEADLINE_TIMER (1 << 24)
|
||||
#define CPUID_EXT_AES (1 << 25)
|
||||
#define CPUID_EXT_XSAVE (1 << 26)
|
||||
#define CPUID_EXT_OSXSAVE (1 << 27)
|
||||
#define CPUID_EXT_AVX (1 << 28)
|
||||
#define CPUID_EXT_F16C (1 << 29)
|
||||
#define CPUID_EXT_RDRAND (1 << 30)
|
||||
#define CPUID_EXT_HYPERVISOR (1 << 31)
|
||||
#define CPUID_EXT_SSE3 (1U << 0)
|
||||
#define CPUID_EXT_PCLMULQDQ (1U << 1)
|
||||
#define CPUID_EXT_DTES64 (1U << 2)
|
||||
#define CPUID_EXT_MONITOR (1U << 3)
|
||||
#define CPUID_EXT_DSCPL (1U << 4)
|
||||
#define CPUID_EXT_VMX (1U << 5)
|
||||
#define CPUID_EXT_SMX (1U << 6)
|
||||
#define CPUID_EXT_EST (1U << 7)
|
||||
#define CPUID_EXT_TM2 (1U << 8)
|
||||
#define CPUID_EXT_SSSE3 (1U << 9)
|
||||
#define CPUID_EXT_CID (1U << 10)
|
||||
#define CPUID_EXT_FMA (1U << 12)
|
||||
#define CPUID_EXT_CX16 (1U << 13)
|
||||
#define CPUID_EXT_XTPR (1U << 14)
|
||||
#define CPUID_EXT_PDCM (1U << 15)
|
||||
#define CPUID_EXT_PCID (1U << 17)
|
||||
#define CPUID_EXT_DCA (1U << 18)
|
||||
#define CPUID_EXT_SSE41 (1U << 19)
|
||||
#define CPUID_EXT_SSE42 (1U << 20)
|
||||
#define CPUID_EXT_X2APIC (1U << 21)
|
||||
#define CPUID_EXT_MOVBE (1U << 22)
|
||||
#define CPUID_EXT_POPCNT (1U << 23)
|
||||
#define CPUID_EXT_TSC_DEADLINE_TIMER (1U << 24)
|
||||
#define CPUID_EXT_AES (1U << 25)
|
||||
#define CPUID_EXT_XSAVE (1U << 26)
|
||||
#define CPUID_EXT_OSXSAVE (1U << 27)
|
||||
#define CPUID_EXT_AVX (1U << 28)
|
||||
#define CPUID_EXT_F16C (1U << 29)
|
||||
#define CPUID_EXT_RDRAND (1U << 30)
|
||||
#define CPUID_EXT_HYPERVISOR (1U << 31)
|
||||
|
||||
#define CPUID_EXT2_FPU (1 << 0)
|
||||
#define CPUID_EXT2_VME (1 << 1)
|
||||
#define CPUID_EXT2_DE (1 << 2)
|
||||
#define CPUID_EXT2_PSE (1 << 3)
|
||||
#define CPUID_EXT2_TSC (1 << 4)
|
||||
#define CPUID_EXT2_MSR (1 << 5)
|
||||
#define CPUID_EXT2_PAE (1 << 6)
|
||||
#define CPUID_EXT2_MCE (1 << 7)
|
||||
#define CPUID_EXT2_CX8 (1 << 8)
|
||||
#define CPUID_EXT2_APIC (1 << 9)
|
||||
#define CPUID_EXT2_SYSCALL (1 << 11)
|
||||
#define CPUID_EXT2_MTRR (1 << 12)
|
||||
#define CPUID_EXT2_PGE (1 << 13)
|
||||
#define CPUID_EXT2_MCA (1 << 14)
|
||||
#define CPUID_EXT2_CMOV (1 << 15)
|
||||
#define CPUID_EXT2_PAT (1 << 16)
|
||||
#define CPUID_EXT2_PSE36 (1 << 17)
|
||||
#define CPUID_EXT2_MP (1 << 19)
|
||||
#define CPUID_EXT2_NX (1 << 20)
|
||||
#define CPUID_EXT2_MMXEXT (1 << 22)
|
||||
#define CPUID_EXT2_MMX (1 << 23)
|
||||
#define CPUID_EXT2_FXSR (1 << 24)
|
||||
#define CPUID_EXT2_FFXSR (1 << 25)
|
||||
#define CPUID_EXT2_PDPE1GB (1 << 26)
|
||||
#define CPUID_EXT2_RDTSCP (1 << 27)
|
||||
#define CPUID_EXT2_LM (1 << 29)
|
||||
#define CPUID_EXT2_3DNOWEXT (1 << 30)
|
||||
#define CPUID_EXT2_3DNOW (1 << 31)
|
||||
#define CPUID_EXT2_FPU (1U << 0)
|
||||
#define CPUID_EXT2_VME (1U << 1)
|
||||
#define CPUID_EXT2_DE (1U << 2)
|
||||
#define CPUID_EXT2_PSE (1U << 3)
|
||||
#define CPUID_EXT2_TSC (1U << 4)
|
||||
#define CPUID_EXT2_MSR (1U << 5)
|
||||
#define CPUID_EXT2_PAE (1U << 6)
|
||||
#define CPUID_EXT2_MCE (1U << 7)
|
||||
#define CPUID_EXT2_CX8 (1U << 8)
|
||||
#define CPUID_EXT2_APIC (1U << 9)
|
||||
#define CPUID_EXT2_SYSCALL (1U << 11)
|
||||
#define CPUID_EXT2_MTRR (1U << 12)
|
||||
#define CPUID_EXT2_PGE (1U << 13)
|
||||
#define CPUID_EXT2_MCA (1U << 14)
|
||||
#define CPUID_EXT2_CMOV (1U << 15)
|
||||
#define CPUID_EXT2_PAT (1U << 16)
|
||||
#define CPUID_EXT2_PSE36 (1U << 17)
|
||||
#define CPUID_EXT2_MP (1U << 19)
|
||||
#define CPUID_EXT2_NX (1U << 20)
|
||||
#define CPUID_EXT2_MMXEXT (1U << 22)
|
||||
#define CPUID_EXT2_MMX (1U << 23)
|
||||
#define CPUID_EXT2_FXSR (1U << 24)
|
||||
#define CPUID_EXT2_FFXSR (1U << 25)
|
||||
#define CPUID_EXT2_PDPE1GB (1U << 26)
|
||||
#define CPUID_EXT2_RDTSCP (1U << 27)
|
||||
#define CPUID_EXT2_LM (1U << 29)
|
||||
#define CPUID_EXT2_3DNOWEXT (1U << 30)
|
||||
#define CPUID_EXT2_3DNOW (1U << 31)
|
||||
|
||||
/* CPUID[8000_0001].EDX bits that are aliase of CPUID[1].EDX bits on AMD CPUs */
|
||||
#define CPUID_EXT2_AMD_ALIASES (CPUID_EXT2_FPU | CPUID_EXT2_VME | \
|
||||
@@ -509,53 +509,53 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
|
||||
CPUID_EXT2_PAT | CPUID_EXT2_PSE36 | \
|
||||
CPUID_EXT2_MMX | CPUID_EXT2_FXSR)
|
||||
|
||||
#define CPUID_EXT3_LAHF_LM (1 << 0)
|
||||
#define CPUID_EXT3_CMP_LEG (1 << 1)
|
||||
#define CPUID_EXT3_SVM (1 << 2)
|
||||
#define CPUID_EXT3_EXTAPIC (1 << 3)
|
||||
#define CPUID_EXT3_CR8LEG (1 << 4)
|
||||
#define CPUID_EXT3_ABM (1 << 5)
|
||||
#define CPUID_EXT3_SSE4A (1 << 6)
|
||||
#define CPUID_EXT3_MISALIGNSSE (1 << 7)
|
||||
#define CPUID_EXT3_3DNOWPREFETCH (1 << 8)
|
||||
#define CPUID_EXT3_OSVW (1 << 9)
|
||||
#define CPUID_EXT3_IBS (1 << 10)
|
||||
#define CPUID_EXT3_XOP (1 << 11)
|
||||
#define CPUID_EXT3_SKINIT (1 << 12)
|
||||
#define CPUID_EXT3_WDT (1 << 13)
|
||||
#define CPUID_EXT3_LWP (1 << 15)
|
||||
#define CPUID_EXT3_FMA4 (1 << 16)
|
||||
#define CPUID_EXT3_TCE (1 << 17)
|
||||
#define CPUID_EXT3_NODEID (1 << 19)
|
||||
#define CPUID_EXT3_TBM (1 << 21)
|
||||
#define CPUID_EXT3_TOPOEXT (1 << 22)
|
||||
#define CPUID_EXT3_PERFCORE (1 << 23)
|
||||
#define CPUID_EXT3_PERFNB (1 << 24)
|
||||
#define CPUID_EXT3_LAHF_LM (1U << 0)
|
||||
#define CPUID_EXT3_CMP_LEG (1U << 1)
|
||||
#define CPUID_EXT3_SVM (1U << 2)
|
||||
#define CPUID_EXT3_EXTAPIC (1U << 3)
|
||||
#define CPUID_EXT3_CR8LEG (1U << 4)
|
||||
#define CPUID_EXT3_ABM (1U << 5)
|
||||
#define CPUID_EXT3_SSE4A (1U << 6)
|
||||
#define CPUID_EXT3_MISALIGNSSE (1U << 7)
|
||||
#define CPUID_EXT3_3DNOWPREFETCH (1U << 8)
|
||||
#define CPUID_EXT3_OSVW (1U << 9)
|
||||
#define CPUID_EXT3_IBS (1U << 10)
|
||||
#define CPUID_EXT3_XOP (1U << 11)
|
||||
#define CPUID_EXT3_SKINIT (1U << 12)
|
||||
#define CPUID_EXT3_WDT (1U << 13)
|
||||
#define CPUID_EXT3_LWP (1U << 15)
|
||||
#define CPUID_EXT3_FMA4 (1U << 16)
|
||||
#define CPUID_EXT3_TCE (1U << 17)
|
||||
#define CPUID_EXT3_NODEID (1U << 19)
|
||||
#define CPUID_EXT3_TBM (1U << 21)
|
||||
#define CPUID_EXT3_TOPOEXT (1U << 22)
|
||||
#define CPUID_EXT3_PERFCORE (1U << 23)
|
||||
#define CPUID_EXT3_PERFNB (1U << 24)
|
||||
|
||||
#define CPUID_SVM_NPT (1 << 0)
|
||||
#define CPUID_SVM_LBRV (1 << 1)
|
||||
#define CPUID_SVM_SVMLOCK (1 << 2)
|
||||
#define CPUID_SVM_NRIPSAVE (1 << 3)
|
||||
#define CPUID_SVM_TSCSCALE (1 << 4)
|
||||
#define CPUID_SVM_VMCBCLEAN (1 << 5)
|
||||
#define CPUID_SVM_FLUSHASID (1 << 6)
|
||||
#define CPUID_SVM_DECODEASSIST (1 << 7)
|
||||
#define CPUID_SVM_PAUSEFILTER (1 << 10)
|
||||
#define CPUID_SVM_PFTHRESHOLD (1 << 12)
|
||||
#define CPUID_SVM_NPT (1U << 0)
|
||||
#define CPUID_SVM_LBRV (1U << 1)
|
||||
#define CPUID_SVM_SVMLOCK (1U << 2)
|
||||
#define CPUID_SVM_NRIPSAVE (1U << 3)
|
||||
#define CPUID_SVM_TSCSCALE (1U << 4)
|
||||
#define CPUID_SVM_VMCBCLEAN (1U << 5)
|
||||
#define CPUID_SVM_FLUSHASID (1U << 6)
|
||||
#define CPUID_SVM_DECODEASSIST (1U << 7)
|
||||
#define CPUID_SVM_PAUSEFILTER (1U << 10)
|
||||
#define CPUID_SVM_PFTHRESHOLD (1U << 12)
|
||||
|
||||
#define CPUID_7_0_EBX_FSGSBASE (1 << 0)
|
||||
#define CPUID_7_0_EBX_BMI1 (1 << 3)
|
||||
#define CPUID_7_0_EBX_HLE (1 << 4)
|
||||
#define CPUID_7_0_EBX_AVX2 (1 << 5)
|
||||
#define CPUID_7_0_EBX_SMEP (1 << 7)
|
||||
#define CPUID_7_0_EBX_BMI2 (1 << 8)
|
||||
#define CPUID_7_0_EBX_ERMS (1 << 9)
|
||||
#define CPUID_7_0_EBX_INVPCID (1 << 10)
|
||||
#define CPUID_7_0_EBX_RTM (1 << 11)
|
||||
#define CPUID_7_0_EBX_MPX (1 << 14)
|
||||
#define CPUID_7_0_EBX_RDSEED (1 << 18)
|
||||
#define CPUID_7_0_EBX_ADX (1 << 19)
|
||||
#define CPUID_7_0_EBX_SMAP (1 << 20)
|
||||
#define CPUID_7_0_EBX_FSGSBASE (1U << 0)
|
||||
#define CPUID_7_0_EBX_BMI1 (1U << 3)
|
||||
#define CPUID_7_0_EBX_HLE (1U << 4)
|
||||
#define CPUID_7_0_EBX_AVX2 (1U << 5)
|
||||
#define CPUID_7_0_EBX_SMEP (1U << 7)
|
||||
#define CPUID_7_0_EBX_BMI2 (1U << 8)
|
||||
#define CPUID_7_0_EBX_ERMS (1U << 9)
|
||||
#define CPUID_7_0_EBX_INVPCID (1U << 10)
|
||||
#define CPUID_7_0_EBX_RTM (1U << 11)
|
||||
#define CPUID_7_0_EBX_MPX (1U << 14)
|
||||
#define CPUID_7_0_EBX_RDSEED (1U << 18)
|
||||
#define CPUID_7_0_EBX_ADX (1U << 19)
|
||||
#define CPUID_7_0_EBX_SMAP (1U << 20)
|
||||
|
||||
#define CPUID_VENDOR_SZ 12
|
||||
|
||||
@@ -571,8 +571,8 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
|
||||
|
||||
#define CPUID_VENDOR_VIA "CentaurHauls"
|
||||
|
||||
#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */
|
||||
#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */
|
||||
#define CPUID_MWAIT_IBE (1U << 1) /* Interrupts can exit capability */
|
||||
#define CPUID_MWAIT_EMX (1U << 0) /* enumeration supported */
|
||||
|
||||
#ifndef HYPERV_SPINLOCK_NEVER_RETRY
|
||||
#define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF
|
||||
|
||||
@@ -941,6 +941,14 @@ hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
|
||||
pdpe = ldq_phys(cs->as, pdpe_addr);
|
||||
if (!(pdpe & PG_PRESENT_MASK))
|
||||
return -1;
|
||||
|
||||
if (pdpe & PG_PSE_MASK) {
|
||||
page_size = 1024 * 1024 * 1024;
|
||||
pte = pdpe & ~( (page_size - 1) & ~0xfff);
|
||||
pte &= ~(PG_NX_MASK | PG_HI_USER_MASK);
|
||||
goto out;
|
||||
}
|
||||
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
@@ -993,6 +1001,9 @@ hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
|
||||
pte = pte & env->a20_mask;
|
||||
}
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
out:
|
||||
#endif
|
||||
page_offset = (addr & TARGET_PAGE_MASK) & (page_size - 1);
|
||||
paddr = (pte & TARGET_PAGE_MASK) + page_offset;
|
||||
return paddr;
|
||||
|
||||
@@ -122,7 +122,7 @@ static struct kvm_cpuid2 *get_supported_cpuid(KVMState *s)
|
||||
return cpuid;
|
||||
}
|
||||
|
||||
struct kvm_para_features {
|
||||
static const struct kvm_para_features {
|
||||
int cap;
|
||||
int feature;
|
||||
} para_features[] = {
|
||||
|
||||
@@ -775,7 +775,7 @@ static inline void compute_hflags(CPUMIPSState *env)
|
||||
and disable the MIPS IV extensions to the MIPS III ISA.
|
||||
Some other MIPS IV CPUs ignore the bit, so the check here
|
||||
would be too restrictive for them. */
|
||||
if (env->CP0_Status & (1 << CP0St_CU3)) {
|
||||
if (env->CP0_Status & (1U << CP0St_CU3)) {
|
||||
env->hflags |= MIPS_HFLAG_COP1X;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,7 +458,7 @@ void mips_cpu_do_interrupt(CPUState *cs)
|
||||
env->hflags &= ~(MIPS_HFLAG_KSU);
|
||||
/* EJTAG probe trap enable is not implemented... */
|
||||
if (!(env->CP0_Status & (1 << CP0St_EXL)))
|
||||
env->CP0_Cause &= ~(1 << CP0Ca_BD);
|
||||
env->CP0_Cause &= ~(1U << CP0Ca_BD);
|
||||
env->active_tc.PC = (int32_t)0xBFC00480;
|
||||
set_hflags_for_handler(env);
|
||||
break;
|
||||
@@ -478,7 +478,7 @@ void mips_cpu_do_interrupt(CPUState *cs)
|
||||
env->hflags |= MIPS_HFLAG_64 | MIPS_HFLAG_CP0;
|
||||
env->hflags &= ~(MIPS_HFLAG_KSU);
|
||||
if (!(env->CP0_Status & (1 << CP0St_EXL)))
|
||||
env->CP0_Cause &= ~(1 << CP0Ca_BD);
|
||||
env->CP0_Cause &= ~(1U << CP0Ca_BD);
|
||||
env->active_tc.PC = (int32_t)0xBFC00000;
|
||||
set_hflags_for_handler(env);
|
||||
break;
|
||||
@@ -616,9 +616,9 @@ void mips_cpu_do_interrupt(CPUState *cs)
|
||||
if (!(env->CP0_Status & (1 << CP0St_EXL))) {
|
||||
env->CP0_EPC = exception_resume_pc(env);
|
||||
if (env->hflags & MIPS_HFLAG_BMASK) {
|
||||
env->CP0_Cause |= (1 << CP0Ca_BD);
|
||||
env->CP0_Cause |= (1U << CP0Ca_BD);
|
||||
} else {
|
||||
env->CP0_Cause &= ~(1 << CP0Ca_BD);
|
||||
env->CP0_Cause &= ~(1U << CP0Ca_BD);
|
||||
}
|
||||
env->CP0_Status |= (1 << CP0St_EXL);
|
||||
env->hflags |= MIPS_HFLAG_64 | MIPS_HFLAG_CP0;
|
||||
|
||||
@@ -648,7 +648,7 @@ static void sync_c0_tcstatus(CPUMIPSState *cpu, int tc,
|
||||
{
|
||||
uint32_t status;
|
||||
uint32_t tcu, tmx, tasid, tksu;
|
||||
uint32_t mask = ((1 << CP0St_CU3)
|
||||
uint32_t mask = ((1U << CP0St_CU3)
|
||||
| (1 << CP0St_CU2)
|
||||
| (1 << CP0St_CU1)
|
||||
| (1 << CP0St_CU0)
|
||||
|
||||
@@ -22,20 +22,20 @@
|
||||
|
||||
/* Have config1, uncached coherency */
|
||||
#define MIPS_CONFIG0 \
|
||||
((1 << CP0C0_M) | (0x2 << CP0C0_K0))
|
||||
((1U << CP0C0_M) | (0x2 << CP0C0_K0))
|
||||
|
||||
/* Have config2, no coprocessor2 attached, no MDMX support attached,
|
||||
no performance counters, watch registers present,
|
||||
no code compression, EJTAG present, no FPU */
|
||||
#define MIPS_CONFIG1 \
|
||||
((1 << CP0C1_M) | \
|
||||
((1U << CP0C1_M) | \
|
||||
(0 << CP0C1_C2) | (0 << CP0C1_MD) | (0 << CP0C1_PC) | \
|
||||
(1 << CP0C1_WR) | (0 << CP0C1_CA) | (1 << CP0C1_EP) | \
|
||||
(0 << CP0C1_FP))
|
||||
|
||||
/* Have config3, no tertiary/secondary caches implemented */
|
||||
#define MIPS_CONFIG2 \
|
||||
((1 << CP0C2_M))
|
||||
((1U << CP0C2_M))
|
||||
|
||||
/* No config4, no DSP ASE, no large physaddr (PABITS),
|
||||
no external interrupt controller, no vectored interrupts,
|
||||
@@ -301,16 +301,16 @@ static const mips_def_t mips_defs[] =
|
||||
(1 << FCR0_D) | (1 << FCR0_S) | (0x95 << FCR0_PRID),
|
||||
.CP0_SRSCtl = (0xf << CP0SRSCtl_HSS),
|
||||
.CP0_SRSConf0_rw_bitmask = 0x3fffffff,
|
||||
.CP0_SRSConf0 = (1 << CP0SRSC0_M) | (0x3fe << CP0SRSC0_SRS3) |
|
||||
.CP0_SRSConf0 = (1U << CP0SRSC0_M) | (0x3fe << CP0SRSC0_SRS3) |
|
||||
(0x3fe << CP0SRSC0_SRS2) | (0x3fe << CP0SRSC0_SRS1),
|
||||
.CP0_SRSConf1_rw_bitmask = 0x3fffffff,
|
||||
.CP0_SRSConf1 = (1 << CP0SRSC1_M) | (0x3fe << CP0SRSC1_SRS6) |
|
||||
.CP0_SRSConf1 = (1U << CP0SRSC1_M) | (0x3fe << CP0SRSC1_SRS6) |
|
||||
(0x3fe << CP0SRSC1_SRS5) | (0x3fe << CP0SRSC1_SRS4),
|
||||
.CP0_SRSConf2_rw_bitmask = 0x3fffffff,
|
||||
.CP0_SRSConf2 = (1 << CP0SRSC2_M) | (0x3fe << CP0SRSC2_SRS9) |
|
||||
.CP0_SRSConf2 = (1U << CP0SRSC2_M) | (0x3fe << CP0SRSC2_SRS9) |
|
||||
(0x3fe << CP0SRSC2_SRS8) | (0x3fe << CP0SRSC2_SRS7),
|
||||
.CP0_SRSConf3_rw_bitmask = 0x3fffffff,
|
||||
.CP0_SRSConf3 = (1 << CP0SRSC3_M) | (0x3fe << CP0SRSC3_SRS12) |
|
||||
.CP0_SRSConf3 = (1U << CP0SRSC3_M) | (0x3fe << CP0SRSC3_SRS12) |
|
||||
(0x3fe << CP0SRSC3_SRS11) | (0x3fe << CP0SRSC3_SRS10),
|
||||
.CP0_SRSConf4_rw_bitmask = 0x3fffffff,
|
||||
.CP0_SRSConf4 = (0x3fe << CP0SRSC4_SRS15) |
|
||||
@@ -355,8 +355,8 @@ static const mips_def_t mips_defs[] =
|
||||
(0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA) |
|
||||
(1 << CP0C1_CA),
|
||||
.CP0_Config2 = MIPS_CONFIG2,
|
||||
.CP0_Config3 = MIPS_CONFIG3 | (1 << CP0C3_M),
|
||||
.CP0_Config4 = MIPS_CONFIG4 | (1 << CP0C4_M),
|
||||
.CP0_Config3 = MIPS_CONFIG3 | (1U << CP0C3_M),
|
||||
.CP0_Config4 = MIPS_CONFIG4 | (1U << CP0C4_M),
|
||||
.CP0_Config4_rw_bitmask = 0,
|
||||
.CP0_Config5 = MIPS_CONFIG5 | (1 << CP0C5_UFR),
|
||||
.CP0_Config5_rw_bitmask = (0 << CP0C5_M) | (1 << CP0C5_K) |
|
||||
@@ -670,7 +670,7 @@ static void mvp_init (CPUMIPSState *env, const mips_def_t *def)
|
||||
programmable cache partitioning implemented, number of allocatable
|
||||
and sharable TLB entries, MVP has allocatable TCs, 2 VPEs
|
||||
implemented, 5 TCs implemented. */
|
||||
env->mvp->CP0_MVPConf0 = (1 << CP0MVPC0_M) | (1 << CP0MVPC0_TLBS) |
|
||||
env->mvp->CP0_MVPConf0 = (1U << CP0MVPC0_M) | (1 << CP0MVPC0_TLBS) |
|
||||
(0 << CP0MVPC0_GS) | (1 << CP0MVPC0_PCP) |
|
||||
// TODO: actually do 2 VPEs.
|
||||
// (1 << CP0MVPC0_TCA) | (0x1 << CP0MVPC0_PVPE) |
|
||||
@@ -684,7 +684,7 @@ static void mvp_init (CPUMIPSState *env, const mips_def_t *def)
|
||||
|
||||
/* Allocatable CP1 have media extensions, allocatable CP1 have FP support,
|
||||
no UDI implemented, no CP2 implemented, 1 CP1 implemented. */
|
||||
env->mvp->CP0_MVPConf1 = (1 << CP0MVPC1_CIM) | (1 << CP0MVPC1_CIF) |
|
||||
env->mvp->CP0_MVPConf1 = (1U << CP0MVPC1_CIM) | (1 << CP0MVPC1_CIF) |
|
||||
(0x0 << CP0MVPC1_PCX) | (0x0 << CP0MVPC1_PCP2) |
|
||||
(0x1 << CP0MVPC1_PCP1);
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ static void s390x_write_elf64_prefix(Note *note, S390CPU *cpu)
|
||||
}
|
||||
|
||||
|
||||
struct NoteFuncDescStruct {
|
||||
static const struct NoteFuncDescStruct {
|
||||
int contents_size;
|
||||
void (*note_contents_func)(Note *note, S390CPU *cpu);
|
||||
} note_func[] = {
|
||||
@@ -146,7 +146,7 @@ static int s390x_write_all_elf64_notes(const char *note_name,
|
||||
void *opaque)
|
||||
{
|
||||
Note note;
|
||||
NoteFuncDesc *nf;
|
||||
const NoteFuncDesc *nf;
|
||||
int note_size;
|
||||
int ret = -1;
|
||||
|
||||
@@ -192,7 +192,7 @@ ssize_t cpu_get_note_size(int class, int machine, int nr_cpus)
|
||||
int name_size = 8; /* "CORE" or "QEMU" rounded */
|
||||
size_t elf_note_size = 0;
|
||||
int note_head_size;
|
||||
NoteFuncDesc *nf;
|
||||
const NoteFuncDesc *nf;
|
||||
|
||||
assert(class == ELFCLASS64);
|
||||
assert(machine == EM_S390);
|
||||
|
||||
@@ -60,6 +60,13 @@ static int arm_arch = __ARM_ARCH;
|
||||
bool use_idiv_instructions;
|
||||
#endif
|
||||
|
||||
/* ??? Ought to think about changing CONFIG_SOFTMMU to always defined. */
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
# define USING_SOFTMMU 1
|
||||
#else
|
||||
# define USING_SOFTMMU 0
|
||||
#endif
|
||||
|
||||
#ifndef NDEBUG
|
||||
static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = {
|
||||
"%r0",
|
||||
@@ -1404,7 +1411,9 @@ static inline void tcg_out_qemu_ld_index(TCGContext *s, TCGMemOp opc,
|
||||
TCGReg dl = (bswap ? datahi : datalo);
|
||||
TCGReg dh = (bswap ? datalo : datahi);
|
||||
|
||||
if (use_armv6_instructions && (dl & 1) == 0 && dh == dl + 1) {
|
||||
/* Avoid ldrd for user-only emulation, to handle unaligned. */
|
||||
if (USING_SOFTMMU && use_armv6_instructions
|
||||
&& (dl & 1) == 0 && dh == dl + 1) {
|
||||
tcg_out_ldrd_r(s, COND_AL, dl, addrlo, addend);
|
||||
} else if (dl != addend) {
|
||||
tcg_out_ld32_rwb(s, COND_AL, dl, addend, addrlo);
|
||||
@@ -1463,7 +1472,9 @@ static inline void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc,
|
||||
TCGReg dl = (bswap ? datahi : datalo);
|
||||
TCGReg dh = (bswap ? datalo : datahi);
|
||||
|
||||
if (use_armv6_instructions && (dl & 1) == 0 && dh == dl + 1) {
|
||||
/* Avoid ldrd for user-only emulation, to handle unaligned. */
|
||||
if (USING_SOFTMMU && use_armv6_instructions
|
||||
&& (dl & 1) == 0 && dh == dl + 1) {
|
||||
tcg_out_ldrd_8(s, COND_AL, dl, addrlo, 0);
|
||||
} else if (dl == addrlo) {
|
||||
tcg_out_ld32_12(s, COND_AL, dh, addrlo, bswap ? 0 : 4);
|
||||
@@ -1548,12 +1559,13 @@ static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, TCGMemOp opc,
|
||||
}
|
||||
break;
|
||||
case MO_64:
|
||||
/* Avoid strd for user-only emulation, to handle unaligned. */
|
||||
if (bswap) {
|
||||
tcg_out_bswap32(s, cond, TCG_REG_R0, datahi);
|
||||
tcg_out_st32_rwb(s, cond, TCG_REG_R0, addend, addrlo);
|
||||
tcg_out_bswap32(s, cond, TCG_REG_R0, datalo);
|
||||
tcg_out_st32_12(s, cond, TCG_REG_R0, addend, 4);
|
||||
} else if (use_armv6_instructions
|
||||
} else if (USING_SOFTMMU && use_armv6_instructions
|
||||
&& (datalo & 1) == 0 && datahi == datalo + 1) {
|
||||
tcg_out_strd_r(s, cond, datalo, addrlo, addend);
|
||||
} else {
|
||||
@@ -1592,12 +1604,13 @@ static inline void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp opc,
|
||||
}
|
||||
break;
|
||||
case MO_64:
|
||||
/* Avoid strd for user-only emulation, to handle unaligned. */
|
||||
if (bswap) {
|
||||
tcg_out_bswap32(s, COND_AL, TCG_REG_R0, datahi);
|
||||
tcg_out_st32_12(s, COND_AL, TCG_REG_R0, addrlo, 0);
|
||||
tcg_out_bswap32(s, COND_AL, TCG_REG_R0, datalo);
|
||||
tcg_out_st32_12(s, COND_AL, TCG_REG_R0, addrlo, 4);
|
||||
} else if (use_armv6_instructions
|
||||
} else if (USING_SOFTMMU && use_armv6_instructions
|
||||
&& (datalo & 1) == 0 && datahi == datalo + 1) {
|
||||
tcg_out_strd_8(s, COND_AL, datalo, addrlo, 0);
|
||||
} else {
|
||||
|
||||
@@ -110,37 +110,37 @@ static void qpci_pc_io_writel(QPCIBus *bus, void *addr, uint32_t value)
|
||||
|
||||
static uint8_t qpci_pc_config_readb(QPCIBus *bus, int devfn, uint8_t offset)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
return inb(0xcfc);
|
||||
}
|
||||
|
||||
static uint16_t qpci_pc_config_readw(QPCIBus *bus, int devfn, uint8_t offset)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
return inw(0xcfc);
|
||||
}
|
||||
|
||||
static uint32_t qpci_pc_config_readl(QPCIBus *bus, int devfn, uint8_t offset)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
return inl(0xcfc);
|
||||
}
|
||||
|
||||
static void qpci_pc_config_writeb(QPCIBus *bus, int devfn, uint8_t offset, uint8_t value)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
outb(0xcfc, value);
|
||||
}
|
||||
|
||||
static void qpci_pc_config_writew(QPCIBus *bus, int devfn, uint8_t offset, uint16_t value)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
outw(0xcfc, value);
|
||||
}
|
||||
|
||||
static void qpci_pc_config_writel(QPCIBus *bus, int devfn, uint8_t offset, uint32_t value)
|
||||
{
|
||||
outl(0xcf8, (1 << 31) | (devfn << 8) | offset);
|
||||
outl(0xcf8, (1U << 31) | (devfn << 8) | offset);
|
||||
outl(0xcfc, value);
|
||||
}
|
||||
|
||||
|
||||
18
trace-events
18
trace-events
@@ -1022,7 +1022,7 @@ gd_update(int x, int y, int w, int h) "x=%d, y=%d, w=%d, h=%d"
|
||||
gd_key_event(int gdk_keycode, int qemu_keycode, const char *action) "translated GDK keycode %d to QEMU keycode %d (%s)"
|
||||
|
||||
# ui/input.c
|
||||
input_event_key_number(int conidx, int number, bool down) "con %d, key number 0x%d, down %d"
|
||||
input_event_key_number(int conidx, int number, bool down) "con %d, key number 0x%x, down %d"
|
||||
input_event_key_qcode(int conidx, const char *qcode, bool down) "con %d, key qcode %s, down %d"
|
||||
input_event_btn(int conidx, const char *btn, bool down) "con %d, button %s, down %d"
|
||||
input_event_rel(int conidx, const char *axis, int value) "con %d, axis %s, value %d"
|
||||
@@ -1042,6 +1042,17 @@ vmware_setmode(uint32_t w, uint32_t h, uint32_t bpp) "%dx%d @ %d bpp"
|
||||
# savevm.c
|
||||
savevm_section_start(const char *id, unsigned int section_id) "%s, section_id %u"
|
||||
savevm_section_end(const char *id, unsigned int section_id) "%s, section_id %u"
|
||||
savevm_state_begin(void) ""
|
||||
savevm_state_iterate(void) ""
|
||||
savevm_state_complete(void) ""
|
||||
savevm_state_cancel(void) ""
|
||||
vmstate_save(const char *idstr, const char *vmsd_name) "%s, %s"
|
||||
vmstate_load(const char *idstr, const char *vmsd_name) "%s, %s"
|
||||
vmstate_load_field_error(const char *field, int ret) "field \"%s\" load failed, ret = %d"
|
||||
qemu_announce_self_iter(const char *mac) "%s"
|
||||
|
||||
# qemu-file.c
|
||||
qemu_file_fclose(void) ""
|
||||
|
||||
# arch_init.c
|
||||
migration_bitmap_sync_start(void) ""
|
||||
@@ -1181,6 +1192,11 @@ flic_reset_failed(int err) "flic: reset failed %d"
|
||||
|
||||
# migration.c
|
||||
migrate_set_state(int new_state) "new state %d"
|
||||
migrate_fd_cleanup(void) ""
|
||||
migrate_fd_error(void) ""
|
||||
migrate_fd_cancel(void) ""
|
||||
migrate_pending(uint64_t size, uint64_t max) "pending size %" PRIu64 " max %" PRIu64
|
||||
migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth, uint64_t size) "transferred %" PRIu64 " time_spent %" PRIu64 " bandwidth %g max_size %" PRId64
|
||||
|
||||
# kvm-all.c
|
||||
kvm_ioctl(int type, void *arg) "type 0x%x, arg %p"
|
||||
|
||||
19
ui/input.c
19
ui/input.c
@@ -143,6 +143,9 @@ void qemu_input_event_send(QemuConsole *src, InputEvent *evt)
|
||||
|
||||
/* send event */
|
||||
s = qemu_input_find_handler(1 << evt->kind);
|
||||
if (!s) {
|
||||
return;
|
||||
}
|
||||
s->handler->event(s->dev, src, evt);
|
||||
s->events++;
|
||||
}
|
||||
@@ -342,15 +345,21 @@ void do_mouse_set(Monitor *mon, const QDict *qdict)
|
||||
int found = 0;
|
||||
|
||||
QTAILQ_FOREACH(s, &handlers, node) {
|
||||
if (s->id == index) {
|
||||
found = 1;
|
||||
qemu_input_handler_activate(s);
|
||||
break;
|
||||
if (s->id != index) {
|
||||
continue;
|
||||
}
|
||||
if (!(s->handler->mask & (INPUT_EVENT_MASK_REL |
|
||||
INPUT_EVENT_MASK_ABS))) {
|
||||
error_report("Input device '%s' is not a mouse", s->handler->name);
|
||||
return;
|
||||
}
|
||||
found = 1;
|
||||
qemu_input_handler_activate(s);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
monitor_printf(mon, "Mouse at given index not found\n");
|
||||
error_report("Mouse at index '%d' not found", index);
|
||||
}
|
||||
|
||||
qemu_input_check_mode_change();
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "qemu/sockets.h"
|
||||
#include "qemu/iov.h"
|
||||
#include "net/net.h"
|
||||
|
||||
void strpadcpy(char *buf, int buf_size, const char *str, char pad)
|
||||
{
|
||||
@@ -530,3 +531,16 @@ int parse_debug_env(const char *name, int max, int initial)
|
||||
}
|
||||
return debug;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper to print ethernet mac address
|
||||
*/
|
||||
const char *qemu_ether_ntoa(const MACAddr *mac)
|
||||
{
|
||||
static char ret[18];
|
||||
|
||||
snprintf(ret, sizeof(ret), "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
mac->a[0], mac->a[1], mac->a[2], mac->a[3], mac->a[4], mac->a[5]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ out:
|
||||
}
|
||||
#endif
|
||||
|
||||
void module_load(module_init_type type)
|
||||
static void module_load(module_init_type type)
|
||||
{
|
||||
#ifdef CONFIG_MODULES
|
||||
char *fname = NULL;
|
||||
|
||||
@@ -32,6 +32,13 @@ static bool name_threads;
|
||||
void qemu_thread_naming(bool enable)
|
||||
{
|
||||
name_threads = enable;
|
||||
|
||||
#ifndef CONFIG_THREAD_SETNAME_BYTHREAD
|
||||
/* This is a debugging option, not fatal */
|
||||
if (enable) {
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void error_exit(int err, const char *msg)
|
||||
@@ -394,6 +401,16 @@ void qemu_event_wait(QemuEvent *ev)
|
||||
}
|
||||
}
|
||||
|
||||
/* Attempt to set the threads name; note that this is for debug, so
|
||||
* we're not going to fail if we can't set it.
|
||||
*/
|
||||
static void qemu_thread_set_name(QemuThread *thread, const char *name)
|
||||
{
|
||||
#ifdef CONFIG_PTHREAD_SETNAME_NP
|
||||
pthread_setname_np(thread->thread, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
void qemu_thread_create(QemuThread *thread, const char *name,
|
||||
void *(*start_routine)(void*),
|
||||
void *arg, int mode)
|
||||
@@ -420,11 +437,9 @@ void qemu_thread_create(QemuThread *thread, const char *name,
|
||||
if (err)
|
||||
error_exit(err, __func__);
|
||||
|
||||
#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12))
|
||||
if (name_threads) {
|
||||
pthread_setname_np(thread->thread, name);
|
||||
qemu_thread_set_name(thread, name);
|
||||
}
|
||||
#endif
|
||||
|
||||
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@ void qemu_thread_naming(bool enable)
|
||||
{
|
||||
/* But note we don't actually name them on Windows yet */
|
||||
name_threads = enable;
|
||||
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
}
|
||||
|
||||
static void error_exit(int err, const char *msg)
|
||||
|
||||
3
vl.c
3
vl.c
@@ -3929,7 +3929,8 @@ int main(int argc, char **argv, char **envp)
|
||||
#endif
|
||||
|
||||
if (machine_class == NULL) {
|
||||
fprintf(stderr, "No machine found.\n");
|
||||
fprintf(stderr, "No machine specified, and there is no default.\n"
|
||||
"Use -machine help to list supported machines!\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "migration/qemu-file.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "trace.h"
|
||||
|
||||
static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
|
||||
void *opaque);
|
||||
@@ -73,6 +74,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
|
||||
|
||||
}
|
||||
if (ret < 0) {
|
||||
trace_vmstate_load_field_error(field->name, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user