Compare commits
	
		
			2 Commits
		
	
	
		
			v2.2.0-rc1
			...
			pull-input
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 51fc44768a | ||
|  | 935fb91522 | 
							
								
								
									
										20
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								MAINTAINERS
									
									
									
									
									
								
							| @@ -880,12 +880,6 @@ S: Maintained | ||||
| F: qobject/ | ||||
| T: git git://repo.or.cz/qemu/qmp-unstable.git queue/qmp | ||||
|  | ||||
| QEMU Guest Agent | ||||
| M: Michael Roth <mdroth@linux.vnet.ibm.com> | ||||
| S: Maintained | ||||
| F: qga/ | ||||
| T: git git://github.com/mdroth/qemu.git qga | ||||
|  | ||||
| QOM | ||||
| M: Anthony Liguori <aliguori@amazon.com> | ||||
| M: Andreas Färber <afaerber@suse.de> | ||||
| @@ -926,15 +920,6 @@ M: Blue Swirl <blauwirbel@gmail.com> | ||||
| S: Odd Fixes | ||||
| F: scripts/checkpatch.pl | ||||
|  | ||||
| Migration | ||||
| M: Juan Quintela <quintela@redhat.com> | ||||
| S: Maintained | ||||
| F: include/migration/ | ||||
| F: migration* | ||||
| F: savevm.c | ||||
| F: arch_init.c | ||||
| F: vmstate.c | ||||
|  | ||||
| Seccomp | ||||
| M: Eduardo Otubo <eduardo.otubo@profitbricks.com> | ||||
| S: Supported | ||||
| @@ -1093,8 +1078,3 @@ M: Chrysostomos Nanakos <cnanakos@grnet.gr> | ||||
| M: Chrysostomos Nanakos <chris@include.gr> | ||||
| S: Maintained | ||||
| F: block/archipelago.c | ||||
|  | ||||
| Bootdevice | ||||
| M: Gonglei <arei.gonglei@huawei.com> | ||||
| S: Maintained | ||||
| F: bootdevice.c | ||||
|   | ||||
							
								
								
									
										6
									
								
								block.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								block.c
									
									
									
									
									
								
							| @@ -3903,9 +3903,9 @@ typedef struct BdrvCoGetBlockStatusData { | ||||
| } BdrvCoGetBlockStatusData; | ||||
|  | ||||
| /* | ||||
|  * Returns the allocation status of the specified sectors. | ||||
|  * Drivers not implementing the functionality are assumed to not support | ||||
|  * backing files, hence all their sectors are reported as allocated. | ||||
|  * Returns true iff the specified sector is present in the disk image. Drivers | ||||
|  * not implementing the functionality are assumed to not support backing files, | ||||
|  * hence all their sectors are reported as allocated. | ||||
|  * | ||||
|  * If 'sector_num' is beyond the end of the disk image the return value is 0 | ||||
|  * and 'pnum' is set to 0. | ||||
|   | ||||
							
								
								
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1823,8 +1823,7 @@ fi | ||||
| # libseccomp check | ||||
|  | ||||
| if test "$seccomp" != "no" ; then | ||||
|     if test "$cpu" = "i386" || test "$cpu" = "x86_64" && | ||||
|         $pkg_config --atleast-version=2.1.1 libseccomp; then | ||||
|     if $pkg_config --atleast-version=2.1.0 libseccomp; then | ||||
|         libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`" | ||||
|         QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`" | ||||
| 	seccomp="yes" | ||||
|   | ||||
| @@ -155,7 +155,7 @@ Coroutine *qemu_coroutine_new(void) | ||||
|     stack_t oss; | ||||
|     sigset_t sigs; | ||||
|     sigset_t osigs; | ||||
|     sigjmp_buf old_env; | ||||
|     jmp_buf old_env; | ||||
|  | ||||
|     /* The way to manipulate stack is with the sigaltstack function. We | ||||
|      * prepare a stack, with it delivering a signal to ourselves and then | ||||
|   | ||||
| @@ -823,10 +823,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) | ||||
|                 action = *p++; | ||||
|                 signal = 0; | ||||
|                 if (action == 'C' || action == 'S') { | ||||
|                     signal = gdb_signal_to_target(strtoul(p, (char **)&p, 16)); | ||||
|                     if (signal == -1) { | ||||
|                         signal = 0; | ||||
|                     } | ||||
|                     signal = strtoul(p, (char **)&p, 16); | ||||
|                 } else if (action != 'c' && action != 's') { | ||||
|                     res = 0; | ||||
|                     break; | ||||
|   | ||||
| @@ -73,11 +73,11 @@ typedef struct ICCBridgeState { | ||||
|     MemoryRegion apic_container; | ||||
| } ICCBridgeState; | ||||
|  | ||||
| #define ICC_BRIDGE(obj) OBJECT_CHECK(ICCBridgeState, (obj), TYPE_ICC_BRIDGE) | ||||
| #define ICC_BRIGDE(obj) OBJECT_CHECK(ICCBridgeState, (obj), TYPE_ICC_BRIDGE) | ||||
|  | ||||
| static void icc_bridge_init(Object *obj) | ||||
| { | ||||
|     ICCBridgeState *s = ICC_BRIDGE(obj); | ||||
|     ICCBridgeState *s = ICC_BRIGDE(obj); | ||||
|     SysBusDevice *sb = SYS_BUS_DEVICE(obj); | ||||
|  | ||||
|     qbus_create_inplace(&s->icc_bus, sizeof(s->icc_bus), TYPE_ICC_BUS, | ||||
|   | ||||
| @@ -83,9 +83,7 @@ typedef enum { | ||||
| #define BDRV_SECTOR_SIZE   (1ULL << BDRV_SECTOR_BITS) | ||||
| #define BDRV_SECTOR_MASK   ~(BDRV_SECTOR_SIZE - 1) | ||||
|  | ||||
| /* | ||||
|  * Allocation status flags | ||||
|  * BDRV_BLOCK_DATA: data is read from bs->file or another file | ||||
| /* BDRV_BLOCK_DATA: data is read from bs->file or another file | ||||
|  * BDRV_BLOCK_ZERO: sectors read as zero | ||||
|  * BDRV_BLOCK_OFFSET_VALID: sector stored in bs->file as raw data | ||||
|  * BDRV_BLOCK_ALLOCATED: the content of the block is determined by this | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
| #define QDEV_MAX_PIO 32 | ||||
|  | ||||
| #define TYPE_SYSTEM_BUS "System" | ||||
| #define SYSTEM_BUS(obj) OBJECT_CHECK(BusState, (obj), TYPE_SYSTEM_BUS) | ||||
| #define SYSTEM_BUS(obj) OBJECT_CHECK(IDEBus, (obj), TYPE_IDE_BUS) | ||||
|  | ||||
| typedef struct SysBusDevice SysBusDevice; | ||||
|  | ||||
|   | ||||
| @@ -161,7 +161,6 @@ typedef struct node_info { | ||||
| extern NodeInfo numa_info[MAX_NODES]; | ||||
| void set_numa_nodes(void); | ||||
| void set_numa_modes(void); | ||||
| void query_numa_node_mem(uint64_t node_mem[]); | ||||
| extern QemuOptsList qemu_numa_opts; | ||||
| int numa_init_func(QemuOpts *opts, void *opaque); | ||||
|  | ||||
|   | ||||
| @@ -1824,7 +1824,7 @@ static void load_elf_image(const char *image_name, int image_fd, | ||||
|             if (a < loaddr) { | ||||
|                 loaddr = a; | ||||
|             } | ||||
|             a = phdr[i].p_vaddr + phdr[i].p_memsz; | ||||
|             a += phdr[i].p_memsz; | ||||
|             if (a > hiaddr) { | ||||
|                 hiaddr = a; | ||||
|             } | ||||
|   | ||||
| @@ -5473,27 +5473,6 @@ static int do_openat(void *cpu_env, int dirfd, const char *pathname, int flags, | ||||
|     return get_errno(sys_openat(dirfd, path(pathname), flags, mode)); | ||||
| } | ||||
|  | ||||
| #define TIMER_MAGIC 0x0caf0000 | ||||
| #define TIMER_MAGIC_MASK 0xffff0000 | ||||
|  | ||||
| /* Convert QEMU provided timer ID back to internal 16bit index format */ | ||||
| static target_timer_t get_timer_id(abi_long arg) | ||||
| { | ||||
|     target_timer_t timerid = arg; | ||||
|  | ||||
|     if ((timerid & TIMER_MAGIC_MASK) != TIMER_MAGIC) { | ||||
|         return -TARGET_EINVAL; | ||||
|     } | ||||
|  | ||||
|     timerid &= 0xffff; | ||||
|  | ||||
|     if (timerid >= ARRAY_SIZE(g_posix_timers)) { | ||||
|         return -TARGET_EINVAL; | ||||
|     } | ||||
|  | ||||
|     return timerid; | ||||
| } | ||||
|  | ||||
| /* do_syscall() should always have a single exit point at the end so | ||||
|    that actions, such as logging of syscall results, can be performed. | ||||
|    All errnos that do_syscall() returns must be -TARGET_<errcode>. */ | ||||
| @@ -9600,6 +9579,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|         /* args: clockid_t clockid, struct sigevent *sevp, timer_t *timerid */ | ||||
|  | ||||
|         struct sigevent host_sevp = { {0}, }, *phost_sevp = NULL; | ||||
|         struct target_timer_t *ptarget_timer; | ||||
|  | ||||
|         int clkid = arg1; | ||||
|         int timer_index = next_free_host_timer(); | ||||
| @@ -9621,9 +9601,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|             if (ret) { | ||||
|                 phtimer = NULL; | ||||
|             } else { | ||||
|                 if (put_user(TIMER_MAGIC | timer_index, arg3, target_timer_t)) { | ||||
|                 if (!lock_user_struct(VERIFY_WRITE, ptarget_timer, arg3, 1)) { | ||||
|                     goto efault; | ||||
|                 } | ||||
|                 ptarget_timer->ptr = tswap32(0xcafe0000 | timer_index); | ||||
|                 unlock_user_struct(ptarget_timer, arg3, 1); | ||||
|             } | ||||
|         } | ||||
|         break; | ||||
| @@ -9635,11 +9617,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|     { | ||||
|         /* args: timer_t timerid, int flags, const struct itimerspec *new_value, | ||||
|          * struct itimerspec * old_value */ | ||||
|         target_timer_t timerid = get_timer_id(arg1); | ||||
|         target_ulong timerid = arg1; | ||||
|  | ||||
|         if (timerid < 0) { | ||||
|             ret = timerid; | ||||
|         } else if (arg3 == 0) { | ||||
|         if (arg3 == 0 || timerid >= ARRAY_SIZE(g_posix_timers)) { | ||||
|             ret = -TARGET_EINVAL; | ||||
|         } else { | ||||
|             timer_t htimer = g_posix_timers[timerid]; | ||||
| @@ -9658,12 +9638,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|     case TARGET_NR_timer_gettime: | ||||
|     { | ||||
|         /* args: timer_t timerid, struct itimerspec *curr_value */ | ||||
|         target_timer_t timerid = get_timer_id(arg1); | ||||
|         target_ulong timerid = arg1; | ||||
|  | ||||
|         if (timerid < 0) { | ||||
|             ret = timerid; | ||||
|         } else if (!arg2) { | ||||
|             ret = -TARGET_EFAULT; | ||||
|         if (!arg2) { | ||||
|             return -TARGET_EFAULT; | ||||
|         } else if (timerid >= ARRAY_SIZE(g_posix_timers)) { | ||||
|             ret = -TARGET_EINVAL; | ||||
|         } else { | ||||
|             timer_t htimer = g_posix_timers[timerid]; | ||||
|             struct itimerspec hspec; | ||||
| @@ -9681,10 +9661,10 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|     case TARGET_NR_timer_getoverrun: | ||||
|     { | ||||
|         /* args: timer_t timerid */ | ||||
|         target_timer_t timerid = get_timer_id(arg1); | ||||
|         target_ulong timerid = arg1; | ||||
|  | ||||
|         if (timerid < 0) { | ||||
|             ret = timerid; | ||||
|         if (timerid >= ARRAY_SIZE(g_posix_timers)) { | ||||
|             ret = -TARGET_EINVAL; | ||||
|         } else { | ||||
|             timer_t htimer = g_posix_timers[timerid]; | ||||
|             ret = get_errno(timer_getoverrun(htimer)); | ||||
| @@ -9697,10 +9677,10 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, | ||||
|     case TARGET_NR_timer_delete: | ||||
|     { | ||||
|         /* args: timer_t timerid */ | ||||
|         target_timer_t timerid = get_timer_id(arg1); | ||||
|         target_ulong timerid = arg1; | ||||
|  | ||||
|         if (timerid < 0) { | ||||
|             ret = timerid; | ||||
|         if (timerid >= ARRAY_SIZE(g_posix_timers)) { | ||||
|             ret = -TARGET_EINVAL; | ||||
|         } else { | ||||
|             timer_t htimer = g_posix_timers[timerid]; | ||||
|             ret = get_errno(timer_delete(htimer)); | ||||
|   | ||||
| @@ -2564,7 +2564,10 @@ struct target_ucred { | ||||
|  | ||||
| #endif | ||||
|  | ||||
| typedef int32_t target_timer_t; | ||||
|  | ||||
| struct target_timer_t { | ||||
|     abi_ulong ptr; | ||||
| }; | ||||
|  | ||||
| #define TARGET_SIGEV_MAX_SIZE 64 | ||||
|  | ||||
|   | ||||
| @@ -1948,10 +1948,7 @@ static void do_info_numa(Monitor *mon, const QDict *qdict) | ||||
| { | ||||
|     int i; | ||||
|     CPUState *cpu; | ||||
|     uint64_t *node_mem; | ||||
|  | ||||
|     node_mem = g_new0(uint64_t, nb_numa_nodes); | ||||
|     query_numa_node_mem(node_mem); | ||||
|     monitor_printf(mon, "%d nodes\n", nb_numa_nodes); | ||||
|     for (i = 0; i < nb_numa_nodes; i++) { | ||||
|         monitor_printf(mon, "node %d cpus:", i); | ||||
| @@ -1962,9 +1959,8 @@ static void do_info_numa(Monitor *mon, const QDict *qdict) | ||||
|         } | ||||
|         monitor_printf(mon, "\n"); | ||||
|         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i, | ||||
|                        node_mem[i] >> 20); | ||||
|             numa_info[i].node_mem >> 20); | ||||
|     } | ||||
|     g_free(node_mem); | ||||
| } | ||||
|  | ||||
| #ifdef CONFIG_PROFILER | ||||
|   | ||||
| @@ -523,21 +523,15 @@ static int slirp_smb(SlirpState* s, const char *exported_dir, | ||||
|     fprintf(f, | ||||
|             "[global]\n" | ||||
|             "private dir=%s\n" | ||||
|             "interfaces=127.0.0.1\n" | ||||
|             "bind interfaces only=yes\n" | ||||
|             "socket address=127.0.0.1\n" | ||||
|             "pid directory=%s\n" | ||||
|             "lock directory=%s\n" | ||||
|             "state directory=%s\n" | ||||
|             "cache directory=%s\n" | ||||
|             "ncalrpc dir=%s/ncalrpc\n" | ||||
|             "log file=%s/log.smbd\n" | ||||
|             "smb passwd file=%s/smbpasswd\n" | ||||
|             "security = user\n" | ||||
|             "map to guest = Bad User\n" | ||||
|             "load printers = no\n" | ||||
|             "printing = bsd\n" | ||||
|             "disable spoolss = yes\n" | ||||
|             "usershare max shares = 0\n" | ||||
|             "[qemu]\n" | ||||
|             "path=%s\n" | ||||
|             "read only=no\n" | ||||
| @@ -550,7 +544,6 @@ static int slirp_smb(SlirpState* s, const char *exported_dir, | ||||
|             s->smb_dir, | ||||
|             s->smb_dir, | ||||
|             s->smb_dir, | ||||
|             s->smb_dir, | ||||
|             exported_dir, | ||||
|             passwd->pw_name | ||||
|             ); | ||||
|   | ||||
							
								
								
									
										38
									
								
								numa.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								numa.c
									
									
									
									
									
								
							| @@ -35,7 +35,6 @@ | ||||
| #include "hw/boards.h" | ||||
| #include "sysemu/hostmem.h" | ||||
| #include "qmp-commands.h" | ||||
| #include "hw/mem/pc-dimm.h" | ||||
|  | ||||
| QemuOptsList qemu_numa_opts = { | ||||
|     .name = "numa", | ||||
| @@ -316,43 +315,6 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void numa_stat_memory_devices(uint64_t node_mem[]) | ||||
| { | ||||
|     MemoryDeviceInfoList *info_list = NULL; | ||||
|     MemoryDeviceInfoList **prev = &info_list; | ||||
|     MemoryDeviceInfoList *info; | ||||
|  | ||||
|     qmp_pc_dimm_device_list(qdev_get_machine(), &prev); | ||||
|     for (info = info_list; info; info = info->next) { | ||||
|         MemoryDeviceInfo *value = info->value; | ||||
|  | ||||
|         if (value) { | ||||
|             switch (value->kind) { | ||||
|             case MEMORY_DEVICE_INFO_KIND_DIMM: | ||||
|                 node_mem[value->dimm->node] += value->dimm->size; | ||||
|                 break; | ||||
|             default: | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     qapi_free_MemoryDeviceInfoList(info_list); | ||||
| } | ||||
|  | ||||
| void query_numa_node_mem(uint64_t node_mem[]) | ||||
| { | ||||
|     int i; | ||||
|  | ||||
|     if (nb_numa_nodes <= 0) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     numa_stat_memory_devices(node_mem); | ||||
|     for (i = 0; i < nb_numa_nodes; i++) { | ||||
|         node_mem[i] += numa_info[i].node_mem; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int query_memdev(Object *obj, void *opaque) | ||||
| { | ||||
|     MemdevList **list = opaque; | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -3231,6 +3231,11 @@ | ||||
| # | ||||
| # Input event union. | ||||
| # | ||||
| # @key: Input event of Keyboard | ||||
| # @btn: Input event of pointer buttons | ||||
| # @rel: Input event of relative pointer motion | ||||
| # @abs: Input event of absolute pointer motion | ||||
| # | ||||
| # Since: 2.0 | ||||
| ## | ||||
| { 'union' : 'InputEvent', | ||||
| @@ -3244,7 +3249,7 @@ | ||||
| # | ||||
| # Send input event(s) to guest. | ||||
| # | ||||
| # @console: Which console to send event(s) to. | ||||
| # @console: #optional console to send event(s) to. | ||||
| # | ||||
| # @events: List of InputEvent union. | ||||
| # | ||||
| @@ -3254,7 +3259,7 @@ | ||||
| # | ||||
| ## | ||||
| { 'command': 'input-send-event', | ||||
|   'data': { 'console':'int', 'events': [ 'InputEvent' ] } } | ||||
|   'data': { '*console':'int', 'events': [ 'InputEvent' ] } } | ||||
|  | ||||
| ## | ||||
| # @NumaOptions | ||||
|   | ||||
| @@ -1631,7 +1631,7 @@ EOF | ||||
| # certtool --generate-certificate \ | ||||
|            --load-ca-certificate ca-cert.pem \ | ||||
|            --load-ca-privkey ca-key.pem \ | ||||
|            --load-privkey server-key.pem \ | ||||
|            --load-privkey server server-key.pem \ | ||||
|            --template server.info \ | ||||
|            --outfile server-cert.pem | ||||
| @end example | ||||
| @@ -1654,7 +1654,7 @@ the secure CA private key: | ||||
| country = GB | ||||
| state = London | ||||
| locality = London | ||||
| organization = Name of your organization | ||||
| organiazation = Name of your organization | ||||
| cn = client.foo.example.com | ||||
| tls_www_client | ||||
| encryption_key | ||||
|   | ||||
| @@ -231,11 +231,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { | ||||
|     { SCMP_SYS(shmctl), 240 }, | ||||
|     { SCMP_SYS(mlock), 240 }, | ||||
|     { SCMP_SYS(munlock), 240 }, | ||||
|     { SCMP_SYS(semctl), 240 }, | ||||
|     { SCMP_SYS(fallocate), 240 }, | ||||
|     { SCMP_SYS(fadvise64), 240 }, | ||||
|     { SCMP_SYS(inotify_init1), 240 }, | ||||
|     { SCMP_SYS(inotify_add_watch), 240 } | ||||
|     { SCMP_SYS(semctl), 240 } | ||||
| }; | ||||
|  | ||||
| int seccomp_start(void) | ||||
|   | ||||
| @@ -3792,7 +3792,7 @@ EQMP | ||||
|  | ||||
|     { | ||||
|         .name       = "input-send-event", | ||||
|         .args_type  = "console:i,events:q", | ||||
|         .args_type  = "console:i?,events:q", | ||||
|         .mhandler.cmd_new = qmp_marshal_input_input_send_event, | ||||
|     }, | ||||
|  | ||||
| @@ -3804,7 +3804,7 @@ Send input event to guest. | ||||
|  | ||||
| Arguments: | ||||
|  | ||||
| - "console": console index. | ||||
| - "console": console index. (json-int, optional) | ||||
| - "events": list of input events. | ||||
|  | ||||
| The consoles are visible in the qom tree, under | ||||
|   | ||||
| @@ -540,8 +540,8 @@ void host_cpuid(uint32_t function, uint32_t count, | ||||
|  * otherwise the string is assumed to sized by a terminating nul. | ||||
|  * Return lexical ordering of *s1:*s2. | ||||
|  */ | ||||
| static int sstrcmp(const char *s1, const char *e1, | ||||
|                    const char *s2, const char *e2) | ||||
| static int sstrcmp(const char *s1, const char *e1, const char *s2, | ||||
|     const char *e2) | ||||
| { | ||||
|     for (;;) { | ||||
|         if (!*s1 || !*s2 || *s1 != *s2) | ||||
| @@ -1859,7 +1859,7 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, | ||||
|  * if flags, suppress names undefined in featureset. | ||||
|  */ | ||||
| static void listflags(char *buf, int bufsize, uint32_t fbits, | ||||
|                       const char **featureset, uint32_t flags) | ||||
|     const char **featureset, uint32_t flags) | ||||
| { | ||||
|     const char **p = &featureset[31]; | ||||
|     char *q, *b, bit; | ||||
|   | ||||
| @@ -472,12 +472,6 @@ static inline xtensa_tlb_entry *xtensa_tlb_get_entry(CPUXtensaState *env, | ||||
|         env->itlb[wi] + ei; | ||||
| } | ||||
|  | ||||
| static inline uint32_t xtensa_replicate_windowstart(CPUXtensaState *env) | ||||
| { | ||||
|     return env->sregs[WINDOW_START] | | ||||
|         (env->sregs[WINDOW_START] << env->config->nareg / 4); | ||||
| } | ||||
|  | ||||
| /* MMU modes definitions */ | ||||
| #define MMU_MODE0_SUFFIX _ring0 | ||||
| #define MMU_MODE1_SUFFIX _ring1 | ||||
|   | ||||
| @@ -235,12 +235,6 @@ void HELPER(entry)(CPUXtensaState *env, uint32_t pc, uint32_t s, uint32_t imm) | ||||
|                 pc, env->sregs[PS]); | ||||
|         HELPER(exception_cause)(env, pc, ILLEGAL_INSTRUCTION_CAUSE); | ||||
|     } else { | ||||
|         uint32_t windowstart = xtensa_replicate_windowstart(env) >> | ||||
|             (env->sregs[WINDOW_BASE] + 1); | ||||
|  | ||||
|         if (windowstart & ((1 << callinc) - 1)) { | ||||
|             HELPER(window_check)(env, pc, callinc); | ||||
|         } | ||||
|         env->regs[(callinc << 2) | (s & 3)] = env->regs[s] - (imm << 3); | ||||
|         rotate_window(env, callinc); | ||||
|         env->sregs[WINDOW_START] |= | ||||
|   | ||||
| @@ -299,55 +299,4 @@ test entry | ||||
|     entry_test 12 | ||||
| test_end | ||||
|  | ||||
| .macro entry_overflow_test window, free, next_window | ||||
|     set_vector window_overflow_4, 0 | ||||
|     set_vector window_overflow_8, 0 | ||||
|     set_vector window_overflow_12, 0 | ||||
|     set_vector window_overflow_\next_window, 10f | ||||
|  | ||||
|     movi    a2, \window | ||||
|     movi    a2, \free | ||||
|     movi    a2, \next_window | ||||
|     reset_window %(1 | ((1 | (1 << ((\next_window) / 4))) << ((\free) / 4))) | ||||
|     reset_ps | ||||
|     movi    a2, 0x4000f | ((\window) << 14) | ||||
|     wsr     a2, ps | ||||
|     isync | ||||
|     movi    a3, 0x12345678 | ||||
|     j       1f | ||||
|     .align  4 | ||||
| 1: | ||||
|     entry   a3, 0x5678 | ||||
|     test_fail | ||||
|     .align  4 | ||||
| 10: | ||||
|     rsr     a2, epc1 | ||||
|     movi    a3, 1b | ||||
|     assert  eq, a2, a3 | ||||
|     movi    a2, 2f | ||||
|     wsr     a2, epc1 | ||||
|  | ||||
|     rsr     a2, windowbase | ||||
|     movi    a3, (\free) / 4 | ||||
|     assert  eq, a2, a3 | ||||
|     rfwo | ||||
| 2: | ||||
| .endm | ||||
|  | ||||
| .macro all_entry_overflow_tests | ||||
|     .irp window, 4, 8, 12 | ||||
|     .irp next_window, 4, 8, 12 | ||||
|     .irp free, 4, 8, 12 | ||||
|     .if \free <= \window | ||||
|     entry_overflow_test \window, \free, \next_window | ||||
|     .endif | ||||
|     .endr | ||||
|     .endr | ||||
|     .endr | ||||
| .endm | ||||
|  | ||||
| test entry_overflow | ||||
|     all_entry_overflow_tests | ||||
| test_end | ||||
|  | ||||
| test_suite_end | ||||
|   | ||||
							
								
								
									
										15
									
								
								ui/input.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ui/input.c
									
									
									
									
									
								
							| @@ -122,16 +122,19 @@ qemu_input_find_handler(uint32_t mask, QemuConsole *con) | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| void qmp_input_send_event(int64_t console, InputEventList *events, | ||||
|                           Error **errp) | ||||
| void qmp_input_send_event(bool has_console, int64_t console, | ||||
|                           InputEventList *events, Error **errp) | ||||
| { | ||||
|     InputEventList *e; | ||||
|     QemuConsole *con; | ||||
|  | ||||
|     con = qemu_console_lookup_by_index(console); | ||||
|     if (!con) { | ||||
|         error_setg(errp, "console %" PRId64 " not found", console); | ||||
|         return; | ||||
|     con = NULL; | ||||
|     if (has_console) { | ||||
|         con = qemu_console_lookup_by_index(console); | ||||
|         if (!con) { | ||||
|             error_setg(errp, "console %" PRId64 " not found", console); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) { | ||||
|   | ||||
| @@ -993,8 +993,9 @@ static void xen_main_loop_prepare(XenIOState *state) | ||||
| static void xen_hvm_change_state_handler(void *opaque, int running, | ||||
|                                          RunState rstate) | ||||
| { | ||||
|     XenIOState *xstate = opaque; | ||||
|     if (running) { | ||||
|         xen_main_loop_prepare((XenIOState *)opaque); | ||||
|         xen_main_loop_prepare(xstate); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user