From: Eric Blake <eblake@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: "Gleb Natapov" <gleb@redhat.com>,
"kvm@vger.kernel.org list" <kvm@vger.kernel.org>,
qemu-devel@nongnu.org, "Anthony Liguori" <anthony@codemonkey.ws>,
"Igor Mammedov" <imammedo@redhat.com>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH for-1.4 04/12] kvm: Create kvm_arch_vcpu_id() function
Date: Fri, 18 Jan 2013 10:46:47 -0700 [thread overview]
Message-ID: <50F98A87.40307@redhat.com> (raw)
In-Reply-To: <20130118164002.GN20133@otherpad.lan.raisama.net>
[-- Attachment #1: Type: text/plain, Size: 3170 bytes --]
On 01/18/2013 09:40 AM, Eduardo Habkost wrote:
> On Fri, Jan 18, 2013 at 09:11:42AM -0700, Eric Blake wrote:
>> On 01/18/2013 07:20 AM, Eduardo Habkost wrote:
>>>> Could you suggest a text for me to add please?
>>>
>>> "The argument passed to KVM_CREATE_VCPU now has 'unsigned long' type
>>> instead of 'int', as expected by the Linux ioctl() syscall. Maybe an int
>>> works on most or all architectures supporting KVM, but it is safer to
>>> use an appropriate 'unsigned long' parameter."
>>
>> Interestingly enough, while the Linux syscall uses 'unsigned long', the
>> POSIX definition of ioctl() uses 'int'; so the Linux kernel is already
>> constrained to never use an ioctl value that doesn't fit within 'int',
>
> Really? What about the ioctl()s that get a pointer as argument on
> architectures where pointers don't fit in an int?
>
> Do you have a pointer to the POSIX definition you are talking about?
>
> Note that I'm talking about the the extra ioctl() argument, not the
> ioctl() number (that is an unsigned int in the kernel code).
Okay, now you made me go back and check sources.
POSIX 2008 says:
#include <stropts.h>
int ioctl(int fildes, int request, ... /* arg */);
Gnulib says this about a bug that it works around:
@item
On glibc platforms, the second parameter is of type @code{unsigned long}
rather than @code{int}.
But gnulib also suggests using <sys/ioctl.h> instead of the POSIX header
<stropts.h> for getting ioctl(), because <stropts.h> was declared
obsolete in POSIX 2008 and was never implemented in glibc.
Sure enough, looking at Fedora 18 /usr/include/sys/ioctl.h, I still see:
extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
Meanwhile, you are correct that the kernel defines request as 32 bits:
linux.git:include/uapi/asm-generic/ioctl.h
/* ioctl command encoding: 32 bits total, command in lower 16 bits,
* size of the parameter structure in the lower 14 bits of the
* upper 16 bits.
* Encoding the size of the parameter structure in the ioctl request
* is useful for catching programs compiled with old versions
* and to avoid overwriting user space outside the user buffer area.
* The highest 2 bits are reserved for indicating the ``access mode''.
* NOTE: This limits the max parameter size to 16kB -1 !
*/
>
>> and glibc is already responsible for ensuring that argument promotion of
>> an int doesn't change the behavior of ioctl() in libc when converting it
>> over to the unsigned long syscall semantics expected by the kernel.
So a more precise wording of this is:
glibc is already responsible from converting the 'unsigned long int' of
the user declaration back into the 'unsigned int' that the kernel
expects for the second argument. The third argument (when present), is
generally treated as a pointer (of size appropriate for the
architecture). Although there _might_ be an ioctl that uses it directly
as an integer instead of dereferencing it as a pointer, those would be
the exceptions to the rule.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
next prev parent reply other threads:[~2013-01-18 17:46 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-17 20:59 [Qemu-devel] [PATCH for-1.4 00/12] target-i386: Fix APIC-ID-based topology (v4) Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 01/12] kvm: Add fake KVM_FEATURE_CLOCKSOURCE_STABLE_BIT for builds withou KVM Eduardo Habkost
2013-01-18 11:17 ` Andreas Färber
2013-01-18 11:36 ` Eduardo Habkost
2013-01-18 11:48 ` Gleb Natapov
2013-01-18 12:41 ` Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 02/12] target-i386: Don't set any KVM flag by default if KVM is disabled Eduardo Habkost
2013-01-18 10:58 ` Andreas Färber
2013-01-18 11:00 ` Gleb Natapov
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 03/12] pc: Reverse pc_init_pci() compatibility logic Eduardo Habkost
2013-01-21 3:39 ` Andreas Färber
2013-01-21 11:02 ` Eduardo Habkost
2013-01-21 9:12 ` Michael S. Tsirkin
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 04/12] kvm: Create kvm_arch_vcpu_id() function Eduardo Habkost
2013-01-18 11:11 ` Andreas Färber
2013-01-18 12:53 ` Eduardo Habkost
2013-01-18 13:03 ` Andreas Färber
2013-01-18 14:20 ` Eduardo Habkost
2013-01-18 16:11 ` Eric Blake
2013-01-18 16:40 ` Eduardo Habkost
2013-01-18 17:46 ` Eric Blake [this message]
2013-01-21 13:14 ` Andreas Färber
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 05/12] target-i386: kvm: Set vcpu_id to APIC ID instead of CPU index Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 06/12] fw_cfg: Remove FW_CFG_MAX_CPUS from fw_cfg_init() Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 07/12] target-i386/cpu: Introduce apic_id_for_cpu() function Eduardo Habkost
2013-01-21 11:18 ` Andreas Färber
2013-01-21 11:31 ` Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 08/12] cpus.h: Make constant smp_cores/smp_threads available on *-user Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 09/12] pc: Set fw_cfg data based on APIC ID calculation Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 10/12] tests: Support target-specific unit tests Eduardo Habkost
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 11/12] target-i386: Topology & APIC ID utility functions Eduardo Habkost
2013-01-21 11:28 ` Andreas Färber
2013-01-17 20:59 ` [Qemu-devel] [PATCH for-1.4 12/12] pc: Generate APIC IDs according to CPU topology Eduardo Habkost
2013-01-18 6:54 ` [Qemu-devel] [PATCH for-1.4 00/12] target-i386: Fix APIC-ID-based topology (v4) li guang
2013-01-18 14:49 ` Eduardo Habkost
2013-01-21 3:08 ` li guang
2013-01-18 15:49 ` Eduardo Habkost
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=50F98A87.40307@redhat.com \
--to=eblake@redhat.com \
--cc=afaerber@suse.de \
--cc=anthony@codemonkey.ws \
--cc=ehabkost@redhat.com \
--cc=gleb@redhat.com \
--cc=imammedo@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).