All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tianyu Lan <Tianyu.Lan@microsoft.com>
To: "Michael Kelley (EOSG)" <Michael.H.Kelley@microsoft.com>,
	Tianyu Lan <Tianyu.Lan@microsoft.com>
Cc: KY Srinivasan <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"hpa@zytor.com" <hpa@zytor.com>,
	"x86@kernel.org" <x86@kernel.org>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"rkrcmar@redhat.com" <rkrcmar@redhat.com>,
	"devel@linuxdriverproject.org" <devel@linuxdriverproject.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	vkuznets <vkuznets@redhat.com>,
	Jork Loeser <Jork.Loeser@microsoft.com>
Subject: Re: [PATCH 10/13] x86/hyper-v: Add HvFlushGuestAddressList hypercall support
Date: Wed, 12 Sep 2018 13:31:47 +0000	[thread overview]
Message-ID: <037e5cba-c549-01b3-5473-ccfe112f8b63@microsoft.com> (raw)
In-Reply-To: <CY4PR21MB077329ED0E195CDF557A09DEDC1B0@CY4PR21MB0773.namprd21.prod.outlook.com>

Hi Michael:
	Thanks for your review.

On 9/12/2018 8:22 AM, Michael Kelley (EOSG) wrote:
> From: Tianyu Lan  Sent: Monday, September 10, 2018 1:39 AM
>> +
>> +int hyperv_flush_guest_mapping_range(u64 as, struct kvm_tlb_range *range)
> 
> I'm really concerned about defining the Hyper-V function to flush
> guest mappings in terms of a KVM struct definition.  Your patch puts
> this function in arch/x86/hyperv/nested.c.  I haven't investigated all
> the details, but on its face this approach seems like it would cause
> trouble in the long run, and it doesn't support the case of a
> hypervisor other than KVM running at L1.
> 
> I know that KVM code has taken a dependency on Hyper-V types and
> code, but that's because KVM is emulating a lot of Hyper-V functionality
> and it's taking advantage of Hyper-V enlightenments.  Is there a top
> level reason I haven't thought of for Hyper-V code to take a
> dependency on KVM definitions?  I would think we want Hyper-V
> code to be generic, using Hyper-V data structure definitions.  Then in
> keeping with what's already been done, KVM code would use those
> definitions where it needs to make calls to Hyper-V code.
>

I think KVM is only one kernel-based hypervisor and is only caller of 
nested hypercalls. So I reused KVM data structure in the new function.
I will make it more general in the next version.

>> +{
>> +	struct kvm_mmu_page *sp;
>> +	struct hv_guest_mapping_flush_list **flush_pcpu;
>> +	struct hv_guest_mapping_flush_list *flush;
>> +	u64 status = 0;
>> +	unsigned long flags;
>> +	int ret = -ENOTSUPP;
>> +	int gpa_n = 0;
>> +
>> +	if (!hv_hypercall_pg)
>> +		goto fault;
>> +
>> +	local_irq_save(flags);
>> +
>> +	flush_pcpu = (struct hv_guest_mapping_flush_list **)
>> +		this_cpu_ptr(hyperv_pcpu_input_arg);
>> +
>> +	flush = *flush_pcpu;
>> +	if (unlikely(!flush)) {
>> +		local_irq_restore(flags);
>> +		goto fault;
>> +	}
>> +
>> +	flush->address_space = as;
>> +	flush->flags = 0;
>> +
>> +	if (!range->flush_list) {
>> +		gpa_n = fill_flush_list(flush->gpa_list, gpa_n,
>> +				range->start_gfn, range->end_gfn);
>> +	} else {
>> +		list_for_each_entry(sp, range->flush_list,
>> +				flush_link) {
>> +			u64 end_gfn = sp->gfn +
>> +				KVM_PAGES_PER_HPAGE(sp->role.level) - 1;
>> +			gpa_n = fill_flush_list(flush->gpa_list, gpa_n,
>> +					sp->gfn, end_gfn);
>> +		}
> 
> Per the previous comment, if this loop really needs to walk a KVM
> data structure, look for a different way to organize things so that
> the handling of KVM-specific data structures is in code that’s part
> of KVM, rather than in Hyper-V code.
> 
> Michael
> 

  reply	other threads:[~2018-09-12 13:32 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-10  8:38 [PATCH 00/13] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM Tianyu Lan
2018-09-10  8:38 ` [PATCH 1/13] KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops Tianyu Lan
2018-09-10 14:21   ` Sean Christopherson
2018-09-12 13:40     ` Tianyu Lan
2018-09-12 13:40       ` Tianyu Lan
2018-09-10  8:38 ` [PATCH 2/13] KVM/MMU: Add tlb flush with range helper function Tianyu Lan
2018-09-10  8:38 ` [PATCH 3/13] KVM: Replace old tlb flush function with new one to flush a specified range Tianyu Lan
2018-09-10  8:38 ` [PATCH 4/13] KVM/MMU: Flush tlb directly in the kvm_handle_hva_range() Tianyu Lan
2018-09-10  8:38 ` [PATCH 5/13] KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range() Tianyu Lan
2018-09-10  8:39 ` [PATCH 6/13] KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte() Tianyu Lan
2018-09-10  8:39   ` Tianyu Lan
2018-09-10  8:39 ` [PATCH 7/13] KVM: Add flush_link and parent_pte in the struct kvm_mmu_page Tianyu Lan
2018-09-10  8:39 ` [PATCH 8/13] KVM: Add spte's point " Tianyu Lan
2018-09-10  8:39   ` Tianyu Lan
2018-09-10  8:39 ` [PATCH 9/13] KVM/MMU: Replace tlb flush function with range list flush function Tianyu Lan
2018-09-10  8:39   ` Tianyu Lan
2018-09-10  8:39 ` [PATCH 10/13] x86/hyper-v: Add HvFlushGuestAddressList hypercall support Tianyu Lan
2018-09-10  8:39   ` Tianyu Lan
2018-09-12  0:22   ` Michael Kelley (EOSG)
2018-09-12 13:31     ` Tianyu Lan [this message]
2018-09-10  8:39 ` [PATCH 11/13] x86/Hyper-v: Add trace in the hyperv_nested_flush_guest_mapping_range() Tianyu Lan
2018-09-10  8:39   ` Tianyu Lan
2018-09-10  8:39 ` [PATCH 12/13] KVM/VMX: Change hv flush logic when ept tables are mismatched Tianyu Lan
2018-09-10  8:39 ` [PATCH 13/13] KVM/VMX: Add hv tlb range flush support Tianyu Lan

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=037e5cba-c549-01b3-5473-ccfe112f8b63@microsoft.com \
    --to=tianyu.lan@microsoft.com \
    --cc=Jork.Loeser@microsoft.com \
    --cc=Michael.H.Kelley@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=sthemmin@microsoft.com \
    --cc=tglx@linutronix.de \
    --cc=vkuznets@redhat.com \
    --cc=x86@kernel.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 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.