All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: "Fernando Luis Vázquez Cao" <fernando@oss.ntt.co.jp>
Cc: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>,
	mtosatti@redhat.com, kvm@vger.kernel.org
Subject: Re: [PATCH RFC 1/5] KVM: introduce a set_bit function for bitmaps in user space
Date: Wed, 21 Apr 2010 11:09:57 +0300	[thread overview]
Message-ID: <4BCEB2D5.6090201@redhat.com> (raw)
In-Reply-To: <4BCE8587.7080607@oss.ntt.co.jp>

On 04/21/2010 07:56 AM, Fernando Luis Vázquez Cao wrote:
> On 04/12/2010 02:08 AM, Avi Kivity wrote:
>    
>>> +#define __set_bit_user_asm(nr, addr, err, errret)            \
>>> +    asm volatile("1:    bts %1,%2\n"                \
>>> +             "2:\n"                        \
>>> +             ".section .fixup,\"ax\"\n"                \
>>> +             "3:    mov %3,%0\n"                \
>>> +             "    jmp 2b\n"                    \
>>> +             ".previous\n"                    \
>>> +             _ASM_EXTABLE(1b, 3b)                \
>>> +             : "=r"(err)                    \
>>> +             : "r" (nr), "m" (__m(addr)), "i" (errret), "0" (err))
>>> +
>>> +#define set_bit_user(nr, addr)                        \
>>> +({                                    \
>>> +    int __ret_sbu = 0;                        \
>>> +                                    \
>>> +    might_fault();                            \
>>> +    if (access_ok(VERIFY_WRITE, addr, nr/8 + 1))            \
>>> +        __set_bit_user_asm(nr, addr, __ret_sbu, -EFAULT);    \
>>> +    else                                \
>>> +        __ret_sbu = -EFAULT;                    \
>>> +                                    \
>>> +    __ret_sbu;                            \
>>> +})
>>> +
>>>
>>>        
>> Should be called __set_bit_user() since it is non-atomic.
>>
>> An interesting wart is that this will use the kernel's word size instead
>> of userspace word size for access.  So, a 32-bit process might allocate
>> a 4-byte bitmap, and a 64-bit kernel will use a 64-bit access to touch
>> it, which might result in a fault.  This might be resolved by
>> documenting that userspace bitmaps must be a multiple of 64-bits in size
>> and recommending that they be 64-bit aligned as well.
>>      
> Yes, the inline assembler above generates a REX prefixed bts with the W field
> set (48 0f ab), which means we have a 64 bit operand size. In addition to the
> solution you propose we could also implement a legacy mode version that uses
> a 32bit bts. Compat ioctls and that ilk could pontentially benefit from this.
>    

We generally try to avoid compat ioctls; declaring that the bitmap is 
little endian and uses 64-bit words works around all of the difficulties.

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


  reply	other threads:[~2010-04-21  8:10 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-09  9:27 [PATCH RFC 0/5] KVM: Moving dirty bitmaps to userspace: double buffering approach Takuya Yoshikawa
2010-04-09  9:30 ` [PATCH RFC 1/5] KVM: introduce a set_bit function for bitmaps in user space Takuya Yoshikawa
2010-04-11 17:08   ` Avi Kivity
2010-04-12  1:29     ` Takuya Yoshikawa
2010-04-12  9:12       ` Avi Kivity
2010-04-21  4:56     ` Fernando Luis Vázquez Cao
2010-04-21  8:09       ` Avi Kivity [this message]
2010-04-09  9:32 ` [PATCH RFC 2/5] KVM: use a rapper function to calculate the sizes of dirty bitmaps Takuya Yoshikawa
2010-04-11 17:12   ` Avi Kivity
2010-04-12  1:53     ` Takuya Yoshikawa
2010-04-09  9:34 ` [PATCH RFC 3/5] KVM: Use rapper functions to create and destroy " Takuya Yoshikawa
2010-04-11 17:13   ` Avi Kivity
2010-04-12  2:07     ` Takuya Yoshikawa
2010-04-12  9:13       ` Avi Kivity
2010-04-09  9:35 ` [PATCH RFC 4/5] KVM: add new members to the memory slot for double buffering of bitmaps Takuya Yoshikawa
2010-04-11 17:15   ` Avi Kivity
2010-04-12  2:15     ` Takuya Yoshikawa
2010-04-12  9:19       ` Avi Kivity
2010-04-12  9:30         ` Takuya Yoshikawa
2010-04-09  9:38 ` [PATCH RFC 5/5] KVM: This is the main part of the "moving dirty bitmaps to user space" Takuya Yoshikawa
2010-04-11 17:21   ` Avi Kivity
2010-04-12  2:29     ` Takuya Yoshikawa
2010-04-12  9:22       ` Avi Kivity
2010-04-12 20:55         ` Fernando Luis Vazquez Cao
2010-04-12 21:00           ` Avi Kivity

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=4BCEB2D5.6090201@redhat.com \
    --to=avi@redhat.com \
    --cc=fernando@oss.ntt.co.jp \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=yoshikawa.takuya@oss.ntt.co.jp \
    /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.