[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/9] xen/ppc: Add public/arch-ppc.h



On 8/7/23 10:51 AM, Jan Beulich wrote:
> On 03.08.2023 01:02, Shawn Anastasio wrote:
>> Signed-off-by: Shawn Anastasio <sanastasio@xxxxxxxxxxxxxxxxxxxxx>
>> ---
>>  xen/include/public/arch-ppc.h | 140 ++++++++++++++++++++++++++++++++++
>>  1 file changed, 140 insertions(+)
>>  create mode 100644 xen/include/public/arch-ppc.h
>>
>> diff --git a/xen/include/public/arch-ppc.h b/xen/include/public/arch-ppc.h
>> new file mode 100644
>> index 0000000000..0eb7ce4208
>> --- /dev/null
>> +++ b/xen/include/public/arch-ppc.h
>> @@ -0,0 +1,140 @@
>> +/*
>> + * Permission is hereby granted, free of charge, to any person obtaining a 
>> copy
>> + * of this software and associated documentation files (the "Software"), to
>> + * deal in the Software without restriction, including without limitation 
>> the
>> + * rights to use, copy, modify, merge, publish, distribute, sublicense, 
>> and/or
>> + * sell copies of the Software, and to permit persons to whom the Software 
>> is
>> + * furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice shall be included 
>> in
>> + * all copies or substantial portions of the Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
>> OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
>> THE
>> + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> + * DEALINGS IN THE SOFTWARE.
> 
> Any reason for a spelled out license rather than an SPDX header?
> 

This was an oversight when importing the file from the old Xen 3.2
source tree. I'll drop the license text in favor of an SPDX header.

>> + * Copyright (C) IBM Corp. 2005, 2006
>> + * Copyright (C) Raptor Engineering, LLC 2023
>> + *
>> + * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
>> + *          Timothy Pearson <tpearson@xxxxxxxxxxxxxxxxxxxxx>
>> + */
>> +
>> +#ifndef __XEN_PUBLIC_ARCH_PPC64_H__
>> +#define __XEN_PUBLIC_ARCH_PPC64_H__
> 
> The 64 wants dropping here, considering the name of the header.

Ditto. Will fix.

>> +#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
>> +#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
> 
> I understand arch-arm.h has it this way too, but in public headers I
> think we're better off using __aligned__ (in the example here).

Sure, I can make that change.

>> +#ifndef __ASSEMBLY__
>> +#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
>> +    typedef union { type *p; unsigned long q; }                 \
>> +        __guest_handle_ ## name;                                \
>> +    typedef union { type *p; uint64_aligned_t q; }              \
>> +        __guest_handle_64_ ## name
>> +
>> +#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
>> +    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
>> +    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
>> +#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, 
>> name)
>> +#define __XEN_GUEST_HANDLE(name)        __guest_handle_64_ ## name
>> +#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
>> +#define XEN_GUEST_HANDLE_PARAM(name)    __guest_handle_ ## name
>> +#define set_xen_guest_handle_raw(hnd, val)                  \
>> +    do {                                                    \
>> +        __typeof__(&(hnd)) _sxghr_tmp = &(hnd);             \
> 
> In new code, can you please avoid underscore-prefixed macro locals,
> which violate name space rules set forth by the standard? We appear
> to be adopting underscore-suffixed naming for such locals.

Sure, will fix.

>> +        _sxghr_tmp->q = 0;                                  \
>> +        _sxghr_tmp->p = val;                                \
> 
> "val" need parenthesizing here.

Will fix.

>> +    } while ( 0 )
>> +#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
>> +
>> +#ifdef __XEN_TOOLS__
>> +#define get_xen_guest_handle(val, hnd)  do { val = (hnd).p; } while (0)
>> +#endif
>> +
>> +typedef uint64_t xen_pfn_t;
>> +#define PRI_xen_pfn PRIx64
>> +#define PRIu_xen_pfn PRIu64
>> +
>> +/*
>> + * Maximum number of virtual CPUs in legacy multi-processor guests.
>> + * Only one. All other VCPUS must use VCPUOP_register_vcpu_info.
>> + */
>> +#define XEN_LEGACY_MAX_VCPUS 1
>> +
>> +typedef uint64_t xen_ulong_t;
>> +#define PRI_xen_ulong PRIx64
>> +#endif
>> +
>> +/*
>> + * Pointers and other address fields inside interface structures are padded 
>> to
>> + * 64 bits. This means that field alignments aren't different between 32- 
>> and
>> + * 64-bit architectures.
>> + */
>> +/* NB. Multi-level macro ensures __LINE__ is expanded before concatenation. 
>> */
>> +#define __MEMORY_PADDING(_X)
>> +#define _MEMORY_PADDING(_X)  __MEMORY_PADDING(_X)
>> +#define MEMORY_PADDING       _MEMORY_PADDING(__LINE__)
> 
> This doesn't parallel anything in other architectures afaics, and it is
> also not used anywhere in this header. What is this about? If it needs
> to stay, it'll need properly moving into XEN_* namespace.

This was another holdover from the old Xen code. I'll remove it.

>> +/* And the trap vector is... */
>> +#define TRAP_INSTR "li 0,-1; sc" /* XXX just "sc"? */
> 
> Same question / remark here.

Ditto, will remove.

> 
>> +#ifndef __ASSEMBLY__
>> +
>> +#define XENCOMM_INLINE_FLAG (1UL << 63)
> 
> Is this an indication that you mean to revive xencomm.h?

No, this was yet another holdover from the old Xen tree. I'll remove it.

>> +typedef uint64_t xen_ulong_t;
>> +
>> +/* User-accessible registers: nost of these need to be saved/restored
>> + * for every nested Xen invocation. */
> 
> Nit: comment style (and s/nost/most/).
>

Will fix.

>> +struct vcpu_guest_core_regs
>> +{
>> +    uint64_t gprs[32];
>> +    uint64_t lr;
>> +    uint64_t ctr;
>> +    uint64_t srr0;
>> +    uint64_t srr1;
>> +    uint64_t pc;
>> +    uint64_t msr;
>> +    uint64_t fpscr;             /* XXX Is this necessary */
>> +    uint64_t xer;
>> +    uint64_t hid4;              /* debug only */
>> +    uint64_t dar;               /* debug only */
>> +    uint32_t dsisr;             /* debug only */
>> +    uint32_t cr;
>> +    uint32_t __pad;             /* good spot for another 32bit reg */
>> +    uint32_t entry_vector;
>> +};
>> +typedef struct vcpu_guest_core_regs vcpu_guest_core_regs_t;
>> +
>> +typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */ /* XXX timebase */
>> +
>> +/* ONLY used to communicate with dom0! See also struct exec_domain. */
>> +struct vcpu_guest_context {
>> +    vcpu_guest_core_regs_t user_regs;         /* User-level CPU registers   
>>   */
>> +    uint64_t sdr1;                     /* Pagetable base               */
>> +    /* XXX etc */
>> +};
>> +typedef struct vcpu_guest_context vcpu_guest_context_t;
>> +DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
>> +
>> +struct arch_shared_info {
>> +    uint64_t boot_timebase;
>> +};
>> +
>> +struct arch_vcpu_info {
>> +};
>> +
>> +struct xen_arch_domainconfig {
>> +};
>> +
>> +typedef struct xen_pmu_arch { uint8_t dummy; } xen_pmu_arch_t;
>> +
>> +/* Support for multi-processor guests. */
>> +#endif
> 
> Stray comment?

Yup, I'll drop it.

>
> Jan

Thanks,
Shawn



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.