From: "Alex Bennée" <alex.bennee@linaro.org>
To: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Peter Maydell <peter.maydell@linaro.org>,
kvm-devel <kvm@vger.kernel.org>,
arm-mail-list <linux-arm-kernel@lists.infradead.org>,
"kvmarm\@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
Marc Zyngier <marc.zyngier@arm.com>,
Alexander Graf <agraf@suse.de>, Andrew Jones <drjones@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Zhichao Huang <zhichao.huang@linaro.org>,
"J. Kiszka" <jan.kiszka@siemens.com>,
David Hildenbrand <dahi@linux.vnet.ibm.com>,
Bharat Bhushan <r65777@freescale.com>,
bp@suse.de, Gleb Natapov <gleb@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
Russell King <linux@arm.linux.org.uk>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
"open list\:DOCUMENTATION" <linux-doc@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 06/10] KVM: arm64: guest debug, add SW break point support
Date: Wed, 29 Apr 2015 16:08:51 +0100 [thread overview]
Message-ID: <87oam70y64.fsf@linaro.org> (raw)
In-Reply-To: <20150429103814.GC4137@cbox>
Christoffer Dall <christoffer.dall@linaro.org> writes:
> On Wed, Apr 29, 2015 at 10:18:18AM +0100, Alex Bennée wrote:
>>
>> Christoffer Dall <christoffer.dall@linaro.org> writes:
>>
>> > On Tue, Apr 28, 2015 at 03:37:01PM +0100, Alex Bennée wrote:
>> >>
>> >> Christoffer Dall <christoffer.dall@linaro.org> writes:
>> >>
>> >> > On Tue, Apr 28, 2015 at 10:34:12AM +0100, Peter Maydell wrote:
>> >> >> On 28 April 2015 at 09:42, Alex Bennée <alex.bennee@linaro.org> wrote:
>> >> >> > Peter Maydell <peter.maydell@linaro.org> writes:
>> >> >> >> Does the kernel already have a conveniently implemented "inject
>> >> >> >> exception into guest" lump of code? If so it might be less effort
>> >> >> >> to do it that way round, maybe.
>> >> >> >
<snip>
>> >>
>> >> Certainly there are some cases where the kernel doesn't have all the
>> >> information. For example it doesn't know if the soft break was inserted
>> >> by the guest or the host. That to me favours the "let userspace deal
>> >> with the ugly" approach.
>> >>
>> > Not sure I follow.
>> >
>> > If it's an exception for the guest, then that must be because the guest
>> > put in the breakpoint instruction, right?
>>
>> No the host can add breakpoint instructions as well. They both generate
>> the same (redirected) exception to the hypervisor which then has to
>> figure out who planted the breakpoint and where the eventual exception
>> will be handled.
>
> I understand this; let's just rewind here.
>
> If you've concluded that the exception is for the guest, then the guest
> must have placed the breakpoint instruction there, correct? Otherwise,
> the exception is for the hypervisor and the discussion about how to
> inject an exception for the guest is invalid.
But only userspace has enough information to make that conclusion (after
searching the list of breakpoints it added to the code). So from
userspace we can:
- re-enter KVM telling it to re-route the exception it just delivered
to userspace somehow
or
- make the changes to deliver the exception in userspace and re-enter
KVM as normal.
It seems to me if we have already exited into userspace it may as well
clean up if it has all the information it needs?
> Or are you talking about the corner case where the host uses a soft
> breakpoint to get a breakpoint on an instruction which is also a
> breakpoint in the guest?
I think in this case host debugging just wins.
>
>>
>> > However, that's a separate discussion from that of *how* userspace or
>> > the kernel then injects an exception to the guest.
>> >
>> > By using some QEMU TCG functionality or by QEMU calling back into KVM
>> > and asking it to inject an exception for it.
>>
>> I don't know if there is explicit TCG functionality to use but QEMU can
>> set the registers and PC up for exception entry and re-enter KVM.
>>
>
> I also understand this. I think Peter's point was exactly that if we
> have existing code somewhere which we can reuse, then we should consider
> reusing it.
I'm not sure such code exists. The only injection code I know of in KVMs
handle_exit code where a +ve return value signals KVM to deliver the
exception to the guest. This is used by the hvc and svc handlers after
calling kvm_inject_undefined() and the wfx handler which advances the PC
first.
> Again, I don't care particularly which way, I just want the expected
> working behavior to be clearly defined.
I think it makes sense to do it in userspace. I have the kernels
inject_fault code for reference for what needs setting up but I'll see
if I can find anything in QEMU that already handles this for some other
thing (although I don't think it does at first glance).
--
Alex Bennée
next prev parent reply other threads:[~2015-04-29 15:08 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1427814488-28467-1-git-send-email-alex.bennee@linaro.org>
2015-03-31 15:07 ` [PATCH v2 01/10] KVM: add commentary for kvm_debug_exit_arch struct Alex Bennée
2015-04-01 15:38 ` David Hildenbrand
2015-04-10 12:58 ` Andrew Jones
2015-04-13 10:57 ` Christoffer Dall
2015-03-31 15:08 ` [PATCH v2 02/10] KVM: define common __KVM_GUESTDBG_USE_SW/HW_BP values Alex Bennée
2015-04-10 12:59 ` Andrew Jones
2015-04-13 11:55 ` Christoffer Dall
2015-04-13 14:51 ` Alex Bennée
2015-04-13 15:07 ` Andrew Jones
2015-04-14 8:24 ` Christoffer Dall
2015-03-31 15:08 ` [PATCH v2 03/10] KVM: arm: guest debug, define API headers Alex Bennée
2015-04-01 15:46 ` David Hildenbrand
2015-04-01 16:01 ` Alex Bennée
2015-04-01 16:05 ` David Hildenbrand
2015-04-01 16:09 ` Peter Maydell
2015-04-10 13:05 ` Andrew Jones
2015-04-13 12:08 ` Christoffer Dall
2015-04-23 9:54 ` Alex Bennée
2015-03-31 15:08 ` [PATCH v2 04/10] KVM: arm: guest debug, add stub KVM_SET_GUEST_DEBUG ioctl Alex Bennée
2015-04-01 15:55 ` David Hildenbrand
2015-04-09 12:28 ` Andrew Jones
2015-04-09 14:19 ` Alex Bennée
2015-04-13 12:12 ` Christoffer Dall
2015-04-14 6:31 ` David Hildenbrand
2015-04-14 8:03 ` Alex Bennée
2015-03-31 15:08 ` [PATCH v2 05/10] KVM: arm: introduce kvm_arch_setup/clear_debug() Alex Bennée
2015-04-01 16:28 ` David Hildenbrand
2015-04-09 12:56 ` Andrew Jones
2015-04-09 14:18 ` Alex Bennée
2015-04-09 12:55 ` Andrew Jones
2015-04-13 14:36 ` Christoffer Dall
2015-04-13 14:48 ` Christoffer Dall
2015-04-13 15:29 ` Alex Bennée
2015-03-31 15:08 ` [PATCH v2 06/10] KVM: arm64: guest debug, add SW break point support Alex Bennée
2015-04-02 12:52 ` David Hildenbrand
2015-04-02 14:06 ` Alex Bennée
2015-04-10 13:09 ` Andrew Jones
2015-04-14 8:25 ` Christoffer Dall
2015-04-23 14:26 ` Alex Bennée
2015-04-27 20:04 ` Christoffer Dall
2015-04-27 21:57 ` Peter Maydell
2015-04-28 8:42 ` Alex Bennée
2015-04-28 9:34 ` Peter Maydell
2015-04-28 12:56 ` Christoffer Dall
2015-04-28 14:37 ` Alex Bennée
2015-04-29 8:10 ` Christoffer Dall
2015-04-29 9:18 ` Alex Bennée
2015-04-29 10:38 ` Christoffer Dall
2015-04-29 15:08 ` Alex Bennée [this message]
2015-04-29 19:20 ` Christoffer Dall
[not found] ` <CADt_bzh=zhSmoQnKxp5cUski3S=riYG5AnmCsm=qeTSjm=cprA@mail.gmail.com>
2015-04-22 9:46 ` Alex Bennée
2015-03-31 15:08 ` [PATCH v2 07/10] KVM: arm64: guest debug, add support for single-step Alex Bennée
2015-04-09 13:24 ` Andrew Jones
2015-04-09 14:16 ` Alex Bennée
2015-04-14 8:27 ` Christoffer Dall
2015-03-31 15:08 ` [PATCH v2 08/10] KVM: arm64: guest debug, HW assisted debug support Alex Bennée
2015-04-10 12:25 ` Andrew Jones
2015-04-13 8:00 ` Alex Bennée
2015-04-14 10:23 ` Christoffer Dall
2015-04-14 10:17 ` Christoffer Dall
2015-03-31 15:08 ` [PATCH v2 09/10] KVM: arm64: trap nested debug register access Alex Bennée
2015-04-10 12:38 ` Andrew Jones
2015-04-13 7:59 ` Alex Bennée
2015-04-14 10:27 ` Christoffer Dall
2015-04-14 10:30 ` Christoffer Dall
2015-03-31 15:08 ` [PATCH v2 10/10] KVM: arm64: add trace points for guest_debug debug Alex Bennée
2015-04-10 12:54 ` Andrew Jones
2015-04-13 7:57 ` Alex Bennée
2015-04-14 10:32 ` Christoffer Dall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87oam70y64.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=agraf@suse.de \
--cc=bp@suse.de \
--cc=catalin.marinas@arm.com \
--cc=christoffer.dall@linaro.org \
--cc=corbet@lwn.net \
--cc=dahi@linux.vnet.ibm.com \
--cc=drjones@redhat.com \
--cc=gleb@kernel.org \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=marc.zyngier@arm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=r65777@freescale.com \
--cc=will.deacon@arm.com \
--cc=zhichao.huang@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox