# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 3864566bc8338de6e162d9e8a484c5e1f6e23183
# Parent 00aa8e4609e202b7204563c4a42f8dd8220e07b4
This patch fixed keyboard issue for linux kernel 2.6 in vmx guest.
linux 2.6 kernel keyboard use a timer to poll the kbd state,in
virtualization environment,the kbd interrupt injection is very likely
to happend just after kbd state query in the kbd timer and thus
will reverse sequence of scan code.
Also fix env->send_event SMP issue.
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
Signed-off-by: Edwin Zhai<edwin.zhai@xxxxxxxxx>
Signed-off-by: Eddion Dong <eddie.dong@xxxxxxxxx>
Signed-off-by: Asit Mallick <asit.k.mallick@xxxxxxxxx>
diff -r 00aa8e4609e2 -r 3864566bc833 tools/ioemu/target-i386-dm/helper2.c
--- a/tools/ioemu/target-i386-dm/helper2.c Tue Nov 15 10:28:33 2005
+++ b/tools/ioemu/target-i386-dm/helper2.c Tue Nov 15 10:34:29 2005
@@ -416,6 +416,7 @@
FD_ZERO(&wakeup_rfds);
FD_SET(evtchn_fd, &wakeup_rfds);
highest_fds = evtchn_fd;
+ env->send_event = 0
while (1) {
if (vm_running) {
if (shutdown_requested) {
@@ -431,7 +432,6 @@
tv.tv_sec = 0;
tv.tv_usec = 100000;
- env->send_event = 0;
retval = select(highest_fds+1, &wakeup_rfds, NULL, NULL, &tv);
if (retval == -1) {
perror("select");
@@ -447,12 +447,13 @@
#define ULONGLONG_MAX ULONG_MAX
#endif
- main_loop_wait(0);
tun_receive_handler(&rfds);
if ( FD_ISSET(evtchn_fd, &rfds) ) {
cpu_handle_ioreq(env);
}
+ main_loop_wait(0);
if (env->send_event) {
+ env->send_event = 0;
struct ioctl_evtchn_notify notify;
notify.port = ioreq_local_port;
(void)ioctl(evtchn_fd, IOCTL_EVTCHN_NOTIFY, ¬ify);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|