Message ID | 2446caa5be5eca36f0b5ca47d2edcbd6f7792484.1593519420.git.michal.leszczynski@cert.pl (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Implement support for external IPT monitoring | expand |
On Tue, Jun 30, 2020 at 02:33:50PM +0200, Michał Leszczyński wrote: > From: Michal Leszczynski <michal.leszczynski@cert.pl> > > Allow to map processor trace buffer using > acquire_resource(). > > Signed-off-by: Michal Leszczynski <michal.leszczynski@cert.pl> > --- > xen/arch/x86/mm.c | 25 +++++++++++++++++++++++++ > xen/include/public/memory.h | 1 + > 2 files changed, 26 insertions(+) > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index e376fc7e8f..bb781bd90c 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -4624,6 +4624,31 @@ int arch_acquire_resource(struct domain *d, unsigned int type, > } > break; > } > + > + case XENMEM_resource_vmtrace_buf: > + { > + mfn_t mfn; > + unsigned int i; > + struct vcpu *v = domain_vcpu(d, id); Missing blank newline between variable definitions and code. > + rc = -EINVAL; > + > + if ( !v ) > + break; > + > + if ( !v->arch.vmtrace.pt_buf ) > + break; > + > + mfn = page_to_mfn(v->arch.vmtrace.pt_buf); > + > + if ( frame + nr_frames > (v->domain->vmtrace_pt_size >> PAGE_SHIFT) ) > + break; You can place all the checks done above in a single if. Thanks, Roger.
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index e376fc7e8f..bb781bd90c 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4624,6 +4624,31 @@ int arch_acquire_resource(struct domain *d, unsigned int type, } break; } + + case XENMEM_resource_vmtrace_buf: + { + mfn_t mfn; + unsigned int i; + struct vcpu *v = domain_vcpu(d, id); + rc = -EINVAL; + + if ( !v ) + break; + + if ( !v->arch.vmtrace.pt_buf ) + break; + + mfn = page_to_mfn(v->arch.vmtrace.pt_buf); + + if ( frame + nr_frames > (v->domain->vmtrace_pt_size >> PAGE_SHIFT) ) + break; + + rc = 0; + for ( i = 0; i < nr_frames; i++ ) + mfn_list[i] = mfn_x(mfn_add(mfn, frame + i)); + + break; + } #endif default: diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h index dbd35305df..f823c784c3 100644 --- a/xen/include/public/memory.h +++ b/xen/include/public/memory.h @@ -620,6 +620,7 @@ struct xen_mem_acquire_resource { #define XENMEM_resource_ioreq_server 0 #define XENMEM_resource_grant_table 1 +#define XENMEM_resource_vmtrace_buf 2 /* * IN - a type-specific resource identifier, which must be zero