|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC XEN PATCH 03/16] xen/x86: add a hypercall XENPF_pmem_add to report host pmem regions
>>> On 10.10.16 at 02:32, <haozhong.zhang@xxxxxxxxx> wrote:
> --- /dev/null
> +++ b/xen/arch/x86/pmem.c
I wonder whether this should really be x86-specific: It's all ACPI
based, isn't it? I notice that you already place pmem.h that way.
> +static int is_included(unsigned long s1, unsigned long e1,
> + unsigned long s2, unsigned long e2)
> +{
> + return s1 <= s2 && s2 < e2 && e2 <= e1;
> +}
Here and elsewhere, please properly use bool/true/false for
boolean values and (return) types.
> +static int is_overlaped(unsigned long s1, unsigned long e1,
> + unsigned long s2, unsigned long e2)
> +{
> + return (s1 <= s2 && s2 < e1) || (s2 < s1 && s1 < e2);
> +}
is_overlapped() and there's an asymmetry here and conventionally
two comparisons suffice (s1 <= e2 && s2 <= e1, perhaps with the
<= exchanged for <).
> +static int pmem_list_add(unsigned long spfn, unsigned long epfn,
> + unsigned long rsv_spfn, unsigned long rsv_epfn,
> + unsigned long data_spfn, unsigned long data_epfn)
> +{
> + struct list_head *cur;
> + struct pmem *new_pmem;
> + int ret = 0;
> +
> + spin_lock(&pmem_list_lock);
> +
> + list_for_each_prev(cur, &pmem_list)
> + {
> + struct pmem *cur_pmem = list_entry(cur, struct pmem, link);
> + unsigned long cur_spfn = cur_pmem->spfn;
> + unsigned long cur_epfn = cur_pmem->epfn;
> +
> + if ( (cur_spfn <= spfn && spfn < cur_epfn) ||
> + (spfn <= cur_spfn && cur_spfn < epfn) )
is_overlapped()?
> + {
> + ret = -EINVAL;
> + goto out;
> + }
> +
> + if ( cur_spfn < spfn )
> + break;
> + }
> +
> + new_pmem = xmalloc(struct pmem);
Please try to avoid allocations with a lock held, unless doing so is
significantly harming code readability.
> +int pmem_add(unsigned long spfn, unsigned long epfn,
> + unsigned long rsv_spfn, unsigned long rsv_epfn,
> + unsigned long data_spfn, unsigned long data_epfn)
> +{
> + int ret;
> +
> + if ( !pmem_add_check(spfn, epfn, rsv_spfn, rsv_epfn, data_spfn,
> data_epfn) )
> + return -EINVAL;
> +
> + ret = pmem_setup(spfn, epfn, rsv_spfn, rsv_epfn, data_spfn, data_epfn);
> + if ( ret )
> + goto out;
> +
> + ret = iomem_deny_access(current->domain, rsv_spfn, rsv_epfn);
> + if ( ret )
> + goto out;
> +
> + ret = pmem_list_add(spfn, epfn, rsv_spfn, rsv_epfn, data_spfn,
> data_epfn);
> + if ( ret )
> + goto out;
> +
> + printk(XENLOG_INFO
> + "pmem: pfns 0x%lx - 0x%lx\n"
> + " reserved 0x%lx - 0x%lx\n"
> + " data 0x%lx - 0x%lx\n",
%#lx
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |