lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 23 Jul 2007 14:16:37 +0300
From:	Avi Kivity <avi@...ranet.com>
To:	Shaohua Li <shaohua.li@...el.com>
CC:	kvm-devel <kvm-devel@...ts.sourceforge.net>,
	lkml <linux-kernel@...r.kernel.org>, Ingo Molnar <mingo@...e.hu>
Subject: Re: [RFC 6/8]KVM: introduce kvm_mmu_zap_pagetbl

Shaohua Li wrote:
> add a routine to zap all shadow pgtble for a gfn. If kvm supports SMP,
> the API should zap pgtble for all vcpus, but kvm shadow page table
> really should be per-vm, instead of per-vcpu.
>
>   

kvm shadow page tables _are_ per-vm.  Current kvm.git even makes that 
more explicit where functions that remove stuff (like rmap_remove()) 
don't require a vcpu.


> Index: linux/drivers/kvm/kvm.h
> ===================================================================
> --- linux.orig/drivers/kvm/kvm.h	2007-07-20 14:19:15.000000000 +0800
> +++ linux/drivers/kvm/kvm.h	2007-07-20 14:26:10.000000000 +0800
> @@ -621,6 +621,7 @@ int kvm_mmu_unprotect_page_virt(struct k
>  void kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu);
>  int kvm_mmu_load(struct kvm_vcpu *vcpu);
>  void kvm_mmu_unload(struct kvm_vcpu *vcpu);
> +void kvm_mmu_zap_pagetbl(struct kvm_vcpu *vcpu, u64 gfn);
>  
>  int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run);
>  
> Index: linux/drivers/kvm/mmu.c
> ===================================================================
> --- linux.orig/drivers/kvm/mmu.c	2007-07-20 14:25:25.000000000 +0800
> +++ linux/drivers/kvm/mmu.c	2007-07-20 14:26:10.000000000 +0800
> @@ -1324,6 +1324,34 @@ void kvm_mmu_zap_all(struct kvm_vcpu *vc
>  	init_kvm_mmu(vcpu);
>  }
>  
> +/* FIXME: this should zap all vcpu's shadow pgtbl for gfn */
> +void kvm_mmu_zap_pagetbl(struct kvm_vcpu *vcpu, u64 gfn)
> +{
> +	struct kvm *kvm = vcpu->kvm;
> +	struct kvm_rmap_desc *desc;
> +	struct page *page;
> +	u64 *spte;
> +
> +	page = gfn_to_page(kvm, gfn);
> +	BUG_ON(!page);
> +
> +	while (page_private(page)) {
> +		if (!(page_private(page) & 1))
> +			spte = (u64 *)page_private(page);
> +		else {
> +			desc = (struct kvm_rmap_desc *)(page_private(page) & ~1ul);
> +			spte = desc->shadow_ptes[0];
> +		}
> +		BUG_ON(!spte);
> +		BUG_ON((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT
> +			!= page_to_pfn(page));
> +		BUG_ON(!(*spte & PT_PRESENT_MASK));
> +		rmap_remove(vcpu, spte);
> +		*spte = 0;
> +	}
> +	kvm_flush_remote_tlbs(vcpu->kvm);
> +}
> +

Suggest kvm_mmu_unmap_page() as a name for this.


-- 
error compiling committee.c: too many arguments to function

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ