|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 17/25] arm/altp2m: Cosmetic fixes - function prototypes.
Hi Julien,
On 08/04/2016 02:06 PM, Julien Grall wrote:
> Hello Sergej,
>
> On 01/08/16 18:10, Sergej Proskurin wrote:
>> This commit changes the prototype of the following functions:
>> - apply_p2m_changes
>> - apply_one_level
>> - p2m_insert_mapping
>> - p2m_remove_mapping
>>
>> These changes are required as our implementation reuses most of the
>> existing ARM p2m implementation to set page table attributes of the
>> individual altp2m views. Therefore, exiting function prototypes have
>> been extended to hold another argument (of type struct p2m_domain *).
>> This allows to specify the p2m/altp2m domain that should be processed by
>> the individual function -- instead of accessing the host's default p2m
>> domain.
>
> I would prefer if you rebase this series on top of "xen/arm: Rework
> the P2M code to follow break-before-make sequence" [1]. This will
> offer a cleaner interface for altp2m.
>
Alright, thank you.
>>
>> Signed-off-by: Sergej Proskurin <proskurin@xxxxxxxxxxxxx>
>> ---
>> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>
>> Cc: Julien Grall <julien.grall@xxxxxxx>
>> ---
>> v2: Adoption of the functions "__p2m_lookup" and "__p2m_get_mem_access"
>> have been moved out of this commit.
>> ---
>> xen/arch/arm/p2m.c | 49
>> +++++++++++++++++++++++++------------------------
>> 1 file changed, 25 insertions(+), 24 deletions(-)
>>
>> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
>> index 53258e1..d4b7c92 100644
>> --- a/xen/arch/arm/p2m.c
>> +++ b/xen/arch/arm/p2m.c
>> @@ -702,6 +702,7 @@ static int p2m_shatter_page(struct p2m_domain *p2m,
>> * -ve == (-Exxx) error.
>> */
>> static int apply_one_level(struct domain *d,
>> + struct p2m_domain *p2m,
>> lpae_t *entry,
>> unsigned int level,
>> bool_t flush_cache,
>> @@ -717,7 +718,6 @@ static int apply_one_level(struct domain *d,
>> const paddr_t level_size = level_sizes[level];
>> const paddr_t level_mask = level_masks[level];
>>
>> - struct p2m_domain *p2m = &d->arch.p2m;
>> lpae_t pte;
>> const lpae_t orig_pte = *entry;
>> int rc;
>> @@ -955,6 +955,7 @@ static void update_reference_mapping(struct
>> page_info *page,
>> }
>>
>> static int apply_p2m_changes(struct domain *d,
>> + struct p2m_domain *p2m,
>> enum p2m_operation op,
>> gfn_t sgfn,
>> unsigned long nr,
>> @@ -967,7 +968,6 @@ static int apply_p2m_changes(struct domain *d,
>> paddr_t end_gpaddr = pfn_to_paddr(gfn_x(sgfn) + nr);
>> paddr_t maddr = pfn_to_paddr(mfn_x(smfn));
>> int rc, ret;
>> - struct p2m_domain *p2m = &d->arch.p2m;
>> lpae_t *mappings[4] = { NULL, NULL, NULL, NULL };
>> struct page_info *pages[4] = { NULL, NULL, NULL, NULL };
>> paddr_t addr;
>> @@ -1093,7 +1093,7 @@ static int apply_p2m_changes(struct domain *d,
>> lpae_t *entry = &mappings[level][offset];
>> lpae_t old_entry = *entry;
>>
>> - ret = apply_one_level(d, entry,
>> + ret = apply_one_level(d, p2m, entry,
>> level, flush_pt, op,
>> start_gpaddr, end_gpaddr,
>> &addr, &maddr, &flush,
>> @@ -1178,7 +1178,7 @@ static int apply_p2m_changes(struct domain *d,
>> out:
>> if ( flush )
>> {
>> - p2m_flush_tlb(&d->arch.p2m);
>> + p2m_flush_tlb(p2m);
>> ret = iommu_iotlb_flush(d, gfn_x(sgfn), nr);
>> if ( !rc )
>> rc = ret;
>> @@ -1205,31 +1205,33 @@ out:
>> * addr keeps the address of the end of the last
>> successfully-inserted
>> * mapping.
>> */
>> - apply_p2m_changes(d, REMOVE, sgfn, gfn - gfn_x(sgfn), smfn,
>> - 0, p2m_invalid, d->arch.p2m.default_access);
>> + apply_p2m_changes(d, p2m, REMOVE, sgfn, gfn - gfn_x(sgfn),
>> smfn,
>> + 0, p2m_invalid, p2m->default_access);
>> }
>>
>> return rc;
>> }
>>
>> static inline int p2m_insert_mapping(struct domain *d,
>> + struct p2m_domain *p2m,
>> gfn_t start_gfn,
>> unsigned long nr,
>> mfn_t mfn,
>> p2m_type_t t)
>> {
>> - return apply_p2m_changes(d, INSERT, start_gfn, nr, mfn,
>> - 0, t, d->arch.p2m.default_access);
>> + return apply_p2m_changes(d, p2m, INSERT, start_gfn, nr, mfn,
>> + 0, t, p2m->default_access);
>> }
>>
>> static inline int p2m_remove_mapping(struct domain *d,
>> + struct p2m_domain *p2m,
>> gfn_t start_gfn,
>> unsigned long nr,
>> mfn_t mfn)
>> {
>> - return apply_p2m_changes(d, REMOVE, start_gfn, nr, mfn,
>> + return apply_p2m_changes(d, p2m, REMOVE, start_gfn, nr, mfn,
>> /* arguments below not used when
>> removing mapping */
>> - 0, p2m_invalid,
>> d->arch.p2m.default_access);
>> + 0, p2m_invalid, p2m->default_access);
>> }
>>
>> int map_regions_rw_cache(struct domain *d,
>> @@ -1237,7 +1239,7 @@ int map_regions_rw_cache(struct domain *d,
>> unsigned long nr,
>> mfn_t mfn)
>> {
>> - return p2m_insert_mapping(d, gfn, nr, mfn, p2m_mmio_direct_c);
>> + return p2m_insert_mapping(d, p2m_get_hostp2m(d), gfn, nr, mfn,
>> p2m_mmio_direct_c);
>> }
>>
>> int unmap_regions_rw_cache(struct domain *d,
>> @@ -1245,7 +1247,7 @@ int unmap_regions_rw_cache(struct domain *d,
>> unsigned long nr,
>> mfn_t mfn)
>> {
>> - return p2m_remove_mapping(d, gfn, nr, mfn);
>> + return p2m_remove_mapping(d, p2m_get_hostp2m(d), gfn, nr, mfn);
>> }
>>
>> int map_mmio_regions(struct domain *d,
>> @@ -1253,7 +1255,7 @@ int map_mmio_regions(struct domain *d,
>> unsigned long nr,
>> mfn_t mfn)
>> {
>> - return p2m_insert_mapping(d, start_gfn, nr, mfn,
>> p2m_mmio_direct_nc);
>> + return p2m_insert_mapping(d, p2m_get_hostp2m(d), start_gfn, nr,
>> mfn, p2m_mmio_direct_nc);
>> }
>>
>> int unmap_mmio_regions(struct domain *d,
>> @@ -1261,7 +1263,7 @@ int unmap_mmio_regions(struct domain *d,
>> unsigned long nr,
>> mfn_t mfn)
>> {
>> - return p2m_remove_mapping(d, start_gfn, nr, mfn);
>> + return p2m_remove_mapping(d, p2m_get_hostp2m(d), start_gfn, nr,
>> mfn);
>> }
>>
>> int map_dev_mmio_region(struct domain *d,
>> @@ -1291,14 +1293,14 @@ int guest_physmap_add_entry(struct domain *d,
>> unsigned long page_order,
>> p2m_type_t t)
>> {
>> - return p2m_insert_mapping(d, gfn, (1 << page_order), mfn, t);
>> + return p2m_insert_mapping(d, p2m_get_hostp2m(d), gfn, (1 <<
>> page_order), mfn, t);
>> }
>>
>> void guest_physmap_remove_page(struct domain *d,
>> gfn_t gfn,
>> mfn_t mfn, unsigned int page_order)
>> {
>> - p2m_remove_mapping(d, gfn, (1 << page_order), mfn);
>> + p2m_remove_mapping(d, p2m_get_hostp2m(d), gfn, (1 <<
>> page_order), mfn);
>> }
>>
>> int p2m_alloc_table(struct p2m_domain *p2m)
>> @@ -1505,26 +1507,25 @@ int p2m_init(struct domain *d)
>>
>> int relinquish_p2m_mapping(struct domain *d)
>> {
>> - struct p2m_domain *p2m = &d->arch.p2m;
>> + struct p2m_domain *p2m = p2m_get_hostp2m(d);
>> unsigned long nr;
>>
>> nr = gfn_x(p2m->max_mapped_gfn) - gfn_x(p2m->lowest_mapped_gfn);
>>
>> - return apply_p2m_changes(d, RELINQUISH, p2m->lowest_mapped_gfn, nr,
>> - INVALID_MFN, 0, p2m_invalid,
>> - d->arch.p2m.default_access);
>> + return apply_p2m_changes(d, p2m, RELINQUISH,
>> p2m->lowest_mapped_gfn, nr,
>> + INVALID_MFN, 0, p2m_invalid,
>> p2m->default_access);
>> }
>>
>> int p2m_cache_flush(struct domain *d, gfn_t start, unsigned long nr)
>> {
>> - struct p2m_domain *p2m = &d->arch.p2m;
>> + struct p2m_domain *p2m = p2m_get_hostp2m(d);
>> gfn_t end = gfn_add(start, nr);
>>
>> start = gfn_max(start, p2m->lowest_mapped_gfn);
>> end = gfn_min(end, p2m->max_mapped_gfn);
>>
>> - return apply_p2m_changes(d, CACHEFLUSH, start, nr, INVALID_MFN,
>> - 0, p2m_invalid,
>> d->arch.p2m.default_access);
>> + return apply_p2m_changes(d, p2m, CACHEFLUSH, start, nr,
>> INVALID_MFN,
>> + 0, p2m_invalid, p2m->default_access);
>> }
>>
>> mfn_t gfn_to_mfn(struct domain *d, gfn_t gfn)
>> @@ -1963,7 +1964,7 @@ long p2m_set_mem_access(struct domain *d, gfn_t
>> gfn, uint32_t nr,
>> return 0;
>> }
>>
>> - rc = apply_p2m_changes(d, MEMACCESS, gfn_add(gfn, start),
>> + rc = apply_p2m_changes(d, p2m, MEMACCESS, gfn_add(gfn, start),
>> (nr - start), INVALID_MFN, mask, 0, a);
>> if ( rc < 0 )
>> return rc;
>>
>
> [1]
> https://lists.xenproject.org/archives/html/xen-devel/2016-07/msg02952.html
>
Best regards,
~Sergej
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |