From: "Christoph Egger" <Christoph.Egger@amd.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH] Cleanup asm-x86/guest_access.h
Date: Thu, 11 Jan 2007 15:53:51 +0100 [thread overview]
Message-ID: <200701111553.51600.Christoph.Egger@amd.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 630 bytes --]
Hi!
I cleaned up xen/include/asm-x86/guest_access.h. I also fixed a bug in
__copy_field_from_guest(), which seems to me to
be a kind of cut-copy-paste bug.
copy_{to,from}_user() and copy_{to,from}_user_hvm() expect a non-const
argument as the first argument. So I remove the consts from the initializer.
I replace typeof with __typeof__, which is always available in gcc - it is
not, when the -ansi option is used.
I do some explicit casts, which makes gcc errors more readable.
In case, you pass an array by your mistake, which gets
casted to a char *, then gcc tells you that rather just "invalid initializer".
Christoph
[-- Attachment #2: xen_guest_access.diff --]
[-- Type: text/x-diff, Size: 4473 bytes --]
diff -r e66f047bc97e xen/include/asm-x86/guest_access.h
--- a/xen/include/asm-x86/guest_access.h Tue Jan 09 18:56:44 2007 -0800
+++ b/xen/include/asm-x86/guest_access.h Thu Jan 11 15:40:25 2007 +0100
@@ -32,8 +32,8 @@
* specifying an offset into the guest array.
*/
#define copy_to_guest_offset(hnd, off, ptr, nr) ({ \
- const typeof(ptr) _x = (hnd).p; \
- const typeof(ptr) _y = (ptr); \
+ __typeof__(ptr) _x = (__typeof__(ptr))((hnd).p); \
+ const __typeof__(ptr) _y = (__typeof__(ptr))(ptr); \
is_hvm_vcpu(current) ? \
copy_to_user_hvm(_x+(off), _y, sizeof(*_x)*(nr)) : \
copy_to_user(_x+(off), _y, sizeof(*_x)*(nr)); \
@@ -44,8 +44,8 @@
* specifying an offset into the guest array.
*/
#define copy_from_guest_offset(ptr, hnd, off, nr) ({ \
- const typeof(ptr) _x = (hnd).p; \
- const typeof(ptr) _y = (ptr); \
+ const __typeof__(ptr) _x = (__typeof__(ptr))((hnd).p);\
+ __typeof__(ptr) _y = (__typeof__(ptr))(ptr); \
is_hvm_vcpu(current) ? \
copy_from_user_hvm(_y, _x+(off), sizeof(*_x)*(nr)) :\
copy_from_user(_y, _x+(off), sizeof(*_x)*(nr)); \
@@ -53,8 +53,8 @@
/* Copy sub-field of a structure to guest context via a guest handle. */
#define copy_field_to_guest(hnd, ptr, field) ({ \
- const typeof(&(ptr)->field) _x = &(hnd).p->field; \
- const typeof(&(ptr)->field) _y = &(ptr)->field; \
+ __typeof__(&(ptr)->field) _x = &(hnd).p->field; \
+ const __typeof__(&(ptr)->field) _y = &(ptr)->field; \
is_hvm_vcpu(current) ? \
copy_to_user_hvm(_x, _y, sizeof(*_x)) : \
copy_to_user(_x, _y, sizeof(*_x)); \
@@ -62,8 +62,8 @@
/* Copy sub-field of a structure from guest context via a guest handle. */
#define copy_field_from_guest(ptr, hnd, field) ({ \
- const typeof(&(ptr)->field) _x = &(hnd).p->field; \
- const typeof(&(ptr)->field) _y = &(ptr)->field; \
+ const __typeof__(&(ptr)->field) _x = &(hnd).p->field;\
+ __typeof__(&(ptr)->field) _y = &(ptr)->field; \
is_hvm_vcpu(current) ? \
copy_from_user_hvm(_y, _x, sizeof(*_x)) : \
copy_from_user(_y, _x, sizeof(*_x)); \
@@ -78,34 +78,34 @@
array_access_ok((hnd).p, (nr), sizeof(*(hnd).p)))
#define __copy_to_guest_offset(hnd, off, ptr, nr) ({ \
- const typeof(ptr) _x = (hnd).p; \
- const typeof(ptr) _y = (ptr); \
+ __typeof__(ptr) _x = (__typeof__(ptr))((hnd).p); \
+ const __typeof__(ptr) _y = (__typeof__(ptr))(ptr); \
is_hvm_vcpu(current) ? \
copy_to_user_hvm(_x+(off), _y, sizeof(*_x)*(nr)) : \
__copy_to_user(_x+(off), _y, sizeof(*_x)*(nr)); \
})
#define __copy_from_guest_offset(ptr, hnd, off, nr) ({ \
- const typeof(ptr) _x = (hnd).p; \
- const typeof(ptr) _y = (ptr); \
+ const __typeof__(ptr) _x = (__typeof__(ptr))((hnd).p);\
+ __typeof__(ptr) _y = (__typeof__(ptr))(ptr); \
is_hvm_vcpu(current) ? \
copy_from_user_hvm(_y, _x+(off),sizeof(*_x)*(nr)) : \
__copy_from_user(_y, _x+(off), sizeof(*_x)*(nr)); \
})
#define __copy_field_to_guest(hnd, ptr, field) ({ \
- const typeof(&(ptr)->field) _x = &(hnd).p->field; \
- const typeof(&(ptr)->field) _y = &(ptr)->field; \
+ __typeof__(&(ptr)->field) _x = &(hnd).p->field; \
+ const __typeof__(&(ptr)->field) _y = &(ptr)->field; \
is_hvm_vcpu(current) ? \
copy_to_user_hvm(_x, _y, sizeof(*_x)) : \
__copy_to_user(_x, _y, sizeof(*_x)); \
})
#define __copy_field_from_guest(ptr, hnd, field) ({ \
- const typeof(&(ptr)->field) _x = &(hnd).p->field; \
- const typeof(&(ptr)->field) _y = &(ptr)->field; \
+ const __typeof__(&(ptr)->field) _x = &(hnd).p->field;\
+ __typeof__(&(ptr)->field) _y = &(ptr)->field; \
is_hvm_vcpu(current) ? \
- copy_from_user_hvm(_x, _y, sizeof(*_x)) : \
+ copy_from_user_hvm(_y, _x, sizeof(*_x)) : \
__copy_from_user(_y, _x, sizeof(*_x)); \
})
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next reply other threads:[~2007-01-11 14:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-11 14:53 Christoph Egger [this message]
2007-01-12 12:01 ` [PATCH] Cleanup asm-x86/guest_access.h Petersson, Mats
2007-01-12 13:37 ` Keir Fraser
2007-01-12 13:43 ` Christoph Egger
2007-01-12 14:16 ` Keir Fraser
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=200701111553.51600.Christoph.Egger@amd.com \
--to=christoph.egger@amd.com \
--cc=xen-devel@lists.xensource.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.