On 05/06/2015 10:20 AM, penghao122@sina.com wrote: Missing a 'v2' in the subject line (hint: git send-email -v2) Subject line doesn't make sense, and has incorrect spacing after colon. What was wrong with my suggestion that I gave on your v1? keyboard: handle ps2 typing buffer overrun > Starting a linux guest with ps2 keyboard, if you type many times during leaving Trailing whitespace in your commit message. > grub and into linux kernel,then you can't use keyboard after linux initialization > finished. Specally when you setup linux guest from iso file,you will type in grub. s/Specally/Specifically,/ s/file,you/file, you/ > During grub,the work method of ps2 keyboard is like this: s/grub,the/grub, the/ (in general, space after comma in English prose; I'll quit pointing it out) > First, ps2 keyboard driver send command KBD_CCMD_KBD_ENABLE. Second, if there is > a keyboard input, then ps2 keyboard driver read data. Third, ps2 keyboard driver > send command KBD_CCMD_KBD_ENABLE again. > After leaving grub and before finishing linux kernel ps2 driver initialization, > if you type many times, the input data keep saving in ps2 queue of qemu. > Before linux kernel initialize ps2 keyboard,linux call i8042_controller_check, > if i8042_controller_check return fail, then ps2 keyboard driver will never initialize. > > (i8042.c in kernel 2.6.32 ) > static int i8042_controller_check(void) > { > if (i8042_flush() == I8042_BUFFER_SIZE) > return -ENODEV; > return 0; > } > static int i8042_flush(void) > { > ... > while (((str = i8042_read_status()) & I8042_STR_OBF) && (i < I8042_BUFFER_SIZE)) { > udelay(50); > data = i8042_read_data(); > i++; > } > return i; > } > During calling i8042_flush it is full in ps2 queue of qemu. ps_read_data will execute > kbd_update_irq(s->update_arg, q->count != 0). Because q->count!=0, kbd_update_irq can > set I8042_STR_OBF. Then i8042_flush() will return I8042_BUFFER_SIZE. > Signed-off-by: Hao Peng > ---- Incorrect separator. Git relies on exactly '---' as the division between commit message and explanatory text, and then ignores any garbage until the first 'diff' line. Also missing a diffstat, which 'git format-patch' will automatically insert as part of the explanatory text. > diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c > index 9b9a7d7..f4fbcfc 100644 > --- a/hw/input/pckbd.c > +++ b/hw/input/pckbd.c > @@ -207,6 +207,8 @@ static uint64_t kbd_read_status(void *opaque, hwaddr addr, > KBDState *s = opaque; > int val; > val = s->status; > + if(s->write-cmd == KBD_CCMD_KBD_ENABLE) Your patch is fatally flawed: $ git am ../\[Qemu-devel\]\ \[PATCH\]\ keyboard\:fix\ ps2\ keyboard\ can\'t\ use.eml Applying: keyboard:fix ps2 keyboard can't use fatal: corrupt patch at line 6 Patch failed at 0001 keyboard:fix ps2 keyboard can't use The copy of the patch that failed is found in: /home/eblake/qemu/.git/rebase-apply/patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". You probably pasted the contents of your patch into an email composer that adjusted whitespace, and in the process made your patch useless. PLEASE read http://wiki.qemu.org/Contribute/SubmitAPatch, and follow the advice there for sending a patch. While it is possible to send a patch without using 'git send-email', it is so tricky to get it right that we strongly encourage new contributors to just use what git already provides. In particular, I advise that you FIRST send a patch to yourself using 'git send-email', and then use 'git am' to apply the patch locally, to make sure that your configuration is correct and that your patches will survive a round trip through email. Once you have that working, then it is okay to send to the list. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org