From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Christoph Egger" Subject: [PATCH] Cleanup asm-x86/guest_access.h Date: Thu, 11 Jan 2007 15:53:51 +0100 Message-ID: <200701111553.51600.Christoph.Egger@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary-00=_/9kpFFMqAXa9Rq0" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --Boundary-00=_/9kpFFMqAXa9Rq0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline 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 --Boundary-00=_/9kpFFMqAXa9Rq0 Content-Type: text/x-diff; charset=us-ascii; name=xen_guest_access.diff Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=xen_guest_access.diff 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)); \ }) --Boundary-00=_/9kpFFMqAXa9Rq0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --Boundary-00=_/9kpFFMqAXa9Rq0--