diff for duplicates of <1367892390.3398.12@snotra> diff --git a/a/1.txt b/N1/1.txt index 7af94eb..bb780c9 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -2,71 +2,71 @@ On 05/06/2013 08:56:25 PM, tiejun.chen wrote: > On 05/07/2013 07:50 AM, Scott Wood wrote: >> On 05/05/2013 10:13:17 PM, tiejun.chen wrote: >>> On 05/06/2013 11:10 AM, Tiejun Chen wrote: ->>>> For the external interrupt, the decrementer exception and the =20 +>>>> For the external interrupt, the decrementer exception and the >>>> doorbell ->>>> excpetion, we also need to soft-disable interrupts while doing as =20 +>>>> excpetion, we also need to soft-disable interrupts while doing as >>>> host ->>>> interrupt handlers since the DO_KVM hook is always performed to =20 +>>>> interrupt handlers since the DO_KVM hook is always performed to >>>> skip ->>>> EXCEPTION_COMMON then miss this original chance with the 'ints' =20 +>>>> EXCEPTION_COMMON then miss this original chance with the 'ints' >>>> (INTS_DISABLE). ->>=20 +>> >> http://patchwork.ozlabs.org/patch/241344/ >> http://patchwork.ozlabs.org/patch/241412/ ->>=20 +>> >> :-) ->=20 +> > I'm observing the same behaviour as well: ->=20 +> > WARN_ON_ONCE(!irqs_disabled()); -So, could you explain the benefits of your approach over what's being =20 +So, could you explain the benefits of your approach over what's being discussed in those threads? ->> Why wouldn't we always disable them? kvmppc_handle_exit() will =20 +>> Why wouldn't we always disable them? kvmppc_handle_exit() will >> enable >> interrupts when it's ready. ->=20 -> This only disable soft interrupt for kvmppc_restart_interrupt() that =20 +> +> This only disable soft interrupt for kvmppc_restart_interrupt() that > restarts interrupts if they were meant for the host: ->=20 -> a. SOFT_DISABLE_INTS() only for BOOKE_INTERRUPT_EXTERNAL | =20 +> +> a. SOFT_DISABLE_INTS() only for BOOKE_INTERRUPT_EXTERNAL | > BOOKE_INTERRUPT_DECREMENTER | BOOKE_INTERRUPT_DOORBELL -Those aren't the only exceptions that can end up going to the host. We =20 +Those aren't the only exceptions that can end up going to the host. We could get a TLB miss that results in a heavyweight MMIO exit, etc. And I'd rather see any fix for this problem stay out of the asm code. > b. bl kvmppc_handle_exit ->=20 +> > c. kvmppc_handle_exit() > { -> int r =3D RESUME_HOST; +> int r = RESUME_HOST; > int s; ->=20 +> > /* update before a new last_exit_type is rewritten */ > kvmppc_update_timing_stats(vcpu); ->=20 +> > /* restart interrupts if they were meant for the host */ > kvmppc_restart_interrupt(vcpu, exit_nr); ->=20 -> local_irq_enable(); =3D=3D> Enable again. +> +> local_irq_enable(); ==> Enable again. > .... ->=20 -> And shouldn't we handle kvmppc_restart_interrupt() like the original =20 +> +> And shouldn't we handle kvmppc_restart_interrupt() like the original > HOST flow? ->=20 -> #define MASKABLE_EXCEPTION(trapnum, intnum, label, hdlr, =20 +> +> #define MASKABLE_EXCEPTION(trapnum, intnum, label, hdlr, > ack) \ -> =20 +> > START_EXCEPTION(label); \ -> NORMAL_EXCEPTION_PROLOG(trapnum, intnum, =20 +> NORMAL_EXCEPTION_PROLOG(trapnum, intnum, > PROLOG_ADDITION_MASKABLE)\ -> EXCEPTION_COMMON(trapnum, PACA_EXGEN, =20 +> EXCEPTION_COMMON(trapnum, PACA_EXGEN, > *INTS_DISABLE*) \ > ... Could you elaborate on what you mean? --Scott= +-Scott diff --git a/a/content_digest b/N1/content_digest index 9610f68..7333bb1 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -13,73 +13,73 @@ "> On 05/07/2013 07:50 AM, Scott Wood wrote:\n" ">> On 05/05/2013 10:13:17 PM, tiejun.chen wrote:\n" ">>> On 05/06/2013 11:10 AM, Tiejun Chen wrote:\n" - ">>>> For the external interrupt, the decrementer exception and the =20\n" + ">>>> For the external interrupt, the decrementer exception and the \n" ">>>> doorbell\n" - ">>>> excpetion, we also need to soft-disable interrupts while doing as =20\n" + ">>>> excpetion, we also need to soft-disable interrupts while doing as \n" ">>>> host\n" - ">>>> interrupt handlers since the DO_KVM hook is always performed to =20\n" + ">>>> interrupt handlers since the DO_KVM hook is always performed to \n" ">>>> skip\n" - ">>>> EXCEPTION_COMMON then miss this original chance with the 'ints' =20\n" + ">>>> EXCEPTION_COMMON then miss this original chance with the 'ints' \n" ">>>> (INTS_DISABLE).\n" - ">>=20\n" + ">> \n" ">> http://patchwork.ozlabs.org/patch/241344/\n" ">> http://patchwork.ozlabs.org/patch/241412/\n" - ">>=20\n" + ">> \n" ">> :-)\n" - ">=20\n" + "> \n" "> I'm observing the same behaviour as well:\n" - ">=20\n" + "> \n" "> \tWARN_ON_ONCE(!irqs_disabled());\n" "\n" - "So, could you explain the benefits of your approach over what's being =20\n" + "So, could you explain the benefits of your approach over what's being \n" "discussed in those threads?\n" "\n" - ">> Why wouldn't we always disable them? kvmppc_handle_exit() will =20\n" + ">> Why wouldn't we always disable them? kvmppc_handle_exit() will \n" ">> enable\n" ">> interrupts when it's ready.\n" - ">=20\n" - "> This only disable soft interrupt for kvmppc_restart_interrupt() that =20\n" + "> \n" + "> This only disable soft interrupt for kvmppc_restart_interrupt() that \n" "> restarts interrupts if they were meant for the host:\n" - ">=20\n" - "> a. SOFT_DISABLE_INTS() only for BOOKE_INTERRUPT_EXTERNAL | =20\n" + "> \n" + "> a. SOFT_DISABLE_INTS() only for BOOKE_INTERRUPT_EXTERNAL | \n" "> BOOKE_INTERRUPT_DECREMENTER | BOOKE_INTERRUPT_DOORBELL\n" "\n" - "Those aren't the only exceptions that can end up going to the host. We =20\n" + "Those aren't the only exceptions that can end up going to the host. We \n" "could get a TLB miss that results in a heavyweight MMIO exit, etc.\n" "\n" "And I'd rather see any fix for this problem stay out of the asm code.\n" "\n" "> b. bl kvmppc_handle_exit\n" - ">=20\n" + "> \n" "> c. kvmppc_handle_exit()\n" "> {\n" - "> int r =3D RESUME_HOST;\n" + "> int r = RESUME_HOST;\n" "> int s;\n" - ">=20\n" + "> \n" "> /* update before a new last_exit_type is rewritten */\n" "> kvmppc_update_timing_stats(vcpu);\n" - ">=20\n" + "> \n" "> /* restart interrupts if they were meant for the host */\n" "> kvmppc_restart_interrupt(vcpu, exit_nr);\n" - ">=20\n" - "> local_irq_enable();\t=3D=3D> Enable again.\n" + "> \n" + "> local_irq_enable();\t==> Enable again.\n" "> ....\n" - ">=20\n" - "> And shouldn't we handle kvmppc_restart_interrupt() like the original =20\n" + "> \n" + "> And shouldn't we handle kvmppc_restart_interrupt() like the original \n" "> HOST flow?\n" - ">=20\n" - "> #define MASKABLE_EXCEPTION(trapnum, intnum, label, hdlr, =20\n" + "> \n" + "> #define MASKABLE_EXCEPTION(trapnum, intnum, label, hdlr, \n" "> ack) \\\n" - "> =20\n" + "> \n" "> START_EXCEPTION(label); \\\n" - "> NORMAL_EXCEPTION_PROLOG(trapnum, intnum, =20\n" + "> NORMAL_EXCEPTION_PROLOG(trapnum, intnum, \n" "> PROLOG_ADDITION_MASKABLE)\\\n" - "> EXCEPTION_COMMON(trapnum, PACA_EXGEN, =20\n" + "> EXCEPTION_COMMON(trapnum, PACA_EXGEN, \n" "> *INTS_DISABLE*) \\\n" "> \t...\n" "\n" "Could you elaborate on what you mean?\n" "\n" - -Scott= + -Scott -069dd557d37281c874c2a0529579ba652db2856457e050316a6fdd94c74c0a29 +909d9e970cd4ab74b9adc11efb3646d53bb8e417d35f706d9abe4cd23020e9d0
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.