All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: Mario Smarduch <m.smarduch@samsung.com>
Cc: "eric.auger@linaro.org" <eric.auger@linaro.org>,
	"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
	"christoffer.dall@linaro.org" <christoffer.dall@linaro.org>,
	이정석 <jays.lee@samsung.com>, 정성진 <sungjinn.chung@samsung.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: [PATCH 3/3] migration dirtybitmap support ARMv7
Date: Wed, 16 Apr 2014 09:13:26 +0100	[thread overview]
Message-ID: <534E3BA6.4050503@arm.com> (raw)
In-Reply-To: <534DDBD8.30502@samsung.com>

Hi Mario,

On 16/04/14 02:24, Mario Smarduch wrote:
> Hi Eric, Mark -
>    what repository should I use to pick up Eric patches?

The initial posting was there:

https://lists.cs.columbia.edu/pipermail/kvmarm/2014-April/008791.html

Reading Eric's patch again, it is not doing exactly the same thing, but
actually dealing with a slightly different (but connected) case.

I suggest you both work together on a common patch (or patch series)
that deals with the various memory region change thingy.

> For kvm_vm_ioctl_get_dirty_log() not sure what to make generic
> it appears generic enough and it does what it needs to do?

What I'm saying is that it should be put in a common location
(virt/kvm/kvm_main.c?), possibly as a weak symbol so it can be
overridden by other architectures.

As much as possible, try to share code with other arches rather than
duplicating it.

Thanks,

	M.

> Thanks,
>   Mario
> 
> On 04/15/2014 02:06 AM, Marc Zyngier wrote:
>> On 15/04/14 02:24, Mario Smarduch wrote:
>>>
>>> - support QEMU interface for initial VM Write Protect
>>> - QEMU Dirty bit map log retrieval
>>>
>>>
>>> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
>>> ---
>>>  arch/arm/kvm/arm.c |   62 +++++++++++++++++++++++++++++++++++++++++++++++++++-
>>>  1 file changed, 61 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
>>> index bd18bb8..9076e3d 100644
>>> --- a/arch/arm/kvm/arm.c
>>> +++ b/arch/arm/kvm/arm.c
>>> @@ -241,6 +241,8 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
>>>  				   const struct kvm_memory_slot *old,
>>>  				   enum kvm_mr_change change)
>>>  {
>>> +	if ((change != KVM_MR_DELETE) && (mem->flags & KVM_MEM_LOG_DIRTY_PAGES))
>>> +		kvm_mmu_slot_remove_write_access(kvm, mem->slot);
>>>  }
>>
>> There is a patch by Eric Auger doing the same thing. Please use it as a
>> dependency.
>>
>>>  void kvm_arch_flush_shadow_all(struct kvm *kvm)
>>> @@ -773,9 +775,67 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
>>>  	}
>>>  }
>>>  
>>> +/*
>>> + * Walks the memslot dirty bitmap, write protects dirty pages for next rount,
>>> + * and stores the dirty bitmap fo QEMU retrieval.
>>> + *
>>> + */
>>>  int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log)
>>>  {
>>> -	return -EINVAL;
>>> +	int r;
>>> +	struct kvm_memory_slot *memslot;
>>> +	unsigned long n, i;
>>> +	unsigned long *dirty_bitmap;
>>> +	unsigned long *dirty_bitmap_buffer;
>>> +	bool is_dirty = false;
>>> +	gfn_t offset;
>>> +
>>> +	mutex_lock(&kvm->slots_lock);
>>> +	r = -EINVAL;
>>> +
>>> +	if (log->slot >= KVM_USER_MEM_SLOTS)
>>> +		goto out;
>>> +
>>> +	memslot = id_to_memslot(kvm->memslots, log->slot);
>>> +	dirty_bitmap = memslot->dirty_bitmap;
>>> +
>>> +	r = -ENOENT;
>>> +	if (!dirty_bitmap)
>>> +		goto out;
>>> +
>>> +	n = kvm_dirty_bitmap_bytes(memslot);
>>> +	dirty_bitmap_buffer = dirty_bitmap + n / sizeof(long);
>>> +	memset(dirty_bitmap_buffer, 0, n);
>>> +
>>> +	spin_lock(&kvm->mmu_lock);
>>> +	for (i = 0; i < n / sizeof(long); i++) {
>>> +		unsigned long mask;
>>> +
>>> +		if (!dirty_bitmap[i])
>>> +			continue;
>>> +
>>> +		is_dirty = true;
>>> +		offset = i * BITS_PER_LONG;
>>> +		kvm_mmu_write_protect_pt_masked(kvm, memslot, offset,
>>> +							dirty_bitmap[i]);
>>> +		mask = dirty_bitmap[i];
>>> +		dirty_bitmap_buffer[i] = mask;
>>> +		dirty_bitmap[i] = 0;
>>> +	}
>>> +
>>> +	if (is_dirty)
>>> +		kvm_tlb_flush_vmid(kvm);
>>> +
>>> +	spin_unlock(&kvm->mmu_lock);
>>> +	r = -EFAULT;
>>> +
>>> +	if (copy_to_user(log->dirty_bitmap, dirty_bitmap_buffer, n))
>>> +		goto out;
>>> +
>>> +	r = 0;
>>> +out:
>>> +	mutex_unlock(&kvm->slots_lock);
>>> +	return r;
>>>  }
>>
>> This is a direct copy of the x86 code. Please make it generic.
>>
>>>  static int kvm_vm_ioctl_set_device_addr(struct kvm *kvm,
>>>
>>
>> Thanks,
>>
>> 	M.
>>
> 
> 


-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2014-04-16  8:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-15  1:24 [PATCH 3/3] migration dirtybitmap support ARMv7 Mario Smarduch
2014-04-15  9:06 ` Marc Zyngier
2014-04-16  1:24   ` Mario Smarduch
2014-04-16  8:13     ` Marc Zyngier [this message]
2014-04-16  8:51       ` Christian Borntraeger

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=534E3BA6.4050503@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@linaro.org \
    --cc=jays.lee@samsung.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=m.smarduch@samsung.com \
    --cc=sungjinn.chung@samsung.com \
    /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.