Jan Beulich
2010-Jun-29 15:31 UTC
[Xen-devel] [PATCH 1/6] trace: share t_info pages only in read-only mode
There''s no need to share writably the t_info pages (Dom0 only wants [and needs] to read it) Signed-off-by: Jan Beulich <jbeulich@novell.com> --- 2010-06-15.orig/tools/xenmon/xenbaked.c 2010-06-29 16:55:30.000000000 +0200 +++ 2010-06-15/tools/xenmon/xenbaked.c 2010-06-28 10:23:01.000000000 +0200 @@ -84,7 +84,7 @@ typedef struct settings_st { } settings_t; struct t_struct { - struct t_info *t_info; /* Structure with information about individual buffers */ + const struct t_info *t_info; /* Structure with information about individual buffers */ struct t_buf **meta; /* Pointers to trace buffer metadata */ unsigned char **data; /* Pointers to trace buffer data areas */ }; @@ -376,9 +376,8 @@ static struct t_struct *map_tbufs(unsign } /* Map t_info metadata structure */ - tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, - tinfo_size, PROT_READ | PROT_WRITE, - tbufs_mfn); + tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, tinfo_size, + PROT_READ, tbufs_mfn); if ( tbufs.t_info == 0 ) { @@ -404,7 +403,8 @@ static struct t_struct *map_tbufs(unsign for(i=0; i<num; i++) { - uint32_t *mfn_list = ((uint32_t *)tbufs.t_info) + tbufs.t_info->mfn_offset[i]; + const uint32_t *mfn_list = (const uint32_t *)tbufs.t_info + + tbufs.t_info->mfn_offset[i]; int j; xen_pfn_t pfn_list[tbufs.t_info->tbuf_size]; --- 2010-06-15.orig/tools/xentrace/xentrace.c 2010-06-29 16:55:30.000000000 +0200 +++ 2010-06-15/tools/xentrace/xentrace.c 2010-06-28 10:23:26.000000000 +0200 @@ -63,7 +63,7 @@ typedef struct settings_st { } settings_t; struct t_struct { - struct t_info *t_info; /* Structure with information about individual buffers */ + const struct t_info *t_info; /* Structure with information about individual buffers */ struct t_buf **meta; /* Pointers to trace buffer metadata */ unsigned char **data; /* Pointers to trace buffer data areas */ }; @@ -475,9 +475,8 @@ static struct t_struct *map_tbufs(unsign int i; /* Map t_info metadata structure */ - tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, - tinfo_size, PROT_READ | PROT_WRITE, - tbufs_mfn); + tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, tinfo_size, + PROT_READ, tbufs_mfn); if ( tbufs.t_info == 0 ) { @@ -503,7 +502,8 @@ static struct t_struct *map_tbufs(unsign for(i=0; i<num; i++) { - uint32_t *mfn_list = ((uint32_t *)tbufs.t_info) + tbufs.t_info->mfn_offset[i]; + const uint32_t *mfn_list = (const uint32_t *)tbufs.t_info + + tbufs.t_info->mfn_offset[i]; int j; xen_pfn_t pfn_list[tbufs.t_info->tbuf_size]; --- 2010-06-15.orig/xen/common/trace.c 2010-06-28 12:16:05.000000000 +0200 +++ 2010-06-15/xen/common/trace.c 2010-06-28 11:58:37.000000000 +0200 @@ -309,7 +309,7 @@ void __init init_trace_bufs(void) for(i=0; i<T_INFO_PAGES; i++) share_xen_page_with_privileged_guests( - virt_to_page(t_info) + i, XENSHARE_writable); + virt_to_page(t_info) + i, XENSHARE_readonly); if ( opt_tbuf_size == 0 ) { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
George Dunlap
2010-Jun-29 16:27 UTC
[Xen-devel] Re: [PATCH 1/6] trace: share t_info pages only in read-only mode
Acked-by: George Dunlap <george.dunlap@eu.citrix.com> On Tue, Jun 29, 2010 at 4:31 PM, Jan Beulich <JBeulich@novell.com> wrote:> There''s no need to share writably the t_info pages (Dom0 only wants > [and needs] to read it) > > Signed-off-by: Jan Beulich <jbeulich@novell.com> > > --- 2010-06-15.orig/tools/xenmon/xenbaked.c 2010-06-29 16:55:30.000000000 +0200 > +++ 2010-06-15/tools/xenmon/xenbaked.c 2010-06-28 10:23:01.000000000 +0200 > @@ -84,7 +84,7 @@ typedef struct settings_st { > } settings_t; > > struct t_struct { > - struct t_info *t_info; /* Structure with information about individual buffers */ > + const struct t_info *t_info; /* Structure with information about individual buffers */ > struct t_buf **meta; /* Pointers to trace buffer metadata */ > unsigned char **data; /* Pointers to trace buffer data areas */ > }; > @@ -376,9 +376,8 @@ static struct t_struct *map_tbufs(unsign > } > > /* Map t_info metadata structure */ > - tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, > - tinfo_size, PROT_READ | PROT_WRITE, > - tbufs_mfn); > + tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, tinfo_size, > + PROT_READ, tbufs_mfn); > > if ( tbufs.t_info == 0 ) > { > @@ -404,7 +403,8 @@ static struct t_struct *map_tbufs(unsign > for(i=0; i<num; i++) > { > > - uint32_t *mfn_list = ((uint32_t *)tbufs.t_info) + tbufs.t_info->mfn_offset[i]; > + const uint32_t *mfn_list = (const uint32_t *)tbufs.t_info > + + tbufs.t_info->mfn_offset[i]; > int j; > xen_pfn_t pfn_list[tbufs.t_info->tbuf_size]; > > --- 2010-06-15.orig/tools/xentrace/xentrace.c 2010-06-29 16:55:30.000000000 +0200 > +++ 2010-06-15/tools/xentrace/xentrace.c 2010-06-28 10:23:26.000000000 +0200 > @@ -63,7 +63,7 @@ typedef struct settings_st { > } settings_t; > > struct t_struct { > - struct t_info *t_info; /* Structure with information about individual buffers */ > + const struct t_info *t_info; /* Structure with information about individual buffers */ > struct t_buf **meta; /* Pointers to trace buffer metadata */ > unsigned char **data; /* Pointers to trace buffer data areas */ > }; > @@ -475,9 +475,8 @@ static struct t_struct *map_tbufs(unsign > int i; > > /* Map t_info metadata structure */ > - tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, > - tinfo_size, PROT_READ | PROT_WRITE, > - tbufs_mfn); > + tbufs.t_info = xc_map_foreign_range(xc_handle, DOMID_XEN, tinfo_size, > + PROT_READ, tbufs_mfn); > > if ( tbufs.t_info == 0 ) > { > @@ -503,7 +502,8 @@ static struct t_struct *map_tbufs(unsign > for(i=0; i<num; i++) > { > > - uint32_t *mfn_list = ((uint32_t *)tbufs.t_info) + tbufs.t_info->mfn_offset[i]; > + const uint32_t *mfn_list = (const uint32_t *)tbufs.t_info > + + tbufs.t_info->mfn_offset[i]; > int j; > xen_pfn_t pfn_list[tbufs.t_info->tbuf_size]; > > --- 2010-06-15.orig/xen/common/trace.c 2010-06-28 12:16:05.000000000 +0200 > +++ 2010-06-15/xen/common/trace.c 2010-06-28 11:58:37.000000000 +0200 > @@ -309,7 +309,7 @@ void __init init_trace_bufs(void) > > for(i=0; i<T_INFO_PAGES; i++) > share_xen_page_with_privileged_guests( > - virt_to_page(t_info) + i, XENSHARE_writable); > + virt_to_page(t_info) + i, XENSHARE_readonly); > > if ( opt_tbuf_size == 0 ) > { > > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel