x86/mm: carve out create_grant_pv_mapping

And at once make create_grant_host_mapping an inline function.  This
requires making create_grant_{p2m,pv}_mapping non-static.  Provide
{p2m,pv}/grant_table.h. Include the headers where necessary.

The two functions create_grant_{p2m,pv}_mapping will be moved later in
a dedicated patch with all their helpers.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Wei Liu committed 2017-08-18 13:59:02 +01:00
1 parent 85d6028a8f
commit 1c1b764cbb
4 files changed
+127 -10

No files matched your search

+8 -8
View File
@@ -123,6 +123,9 @@
#include <asm/io_apic.h>
#include <asm/pci.h>
#include <asm/hvm/grant_table.h>
#include <asm/pv/grant_table.h>
/* Override macros from asm/page.h to make them work with mfn_t */
#undef mfn_to_page
#define mfn_to_page(mfn) __mfn_to_page(mfn_x(mfn))
@@ -4023,9 +4026,9 @@ static int destroy_grant_va_mapping(
return replace_grant_va_mapping(addr, frame, l1e_empty(), v);
}
static int create_grant_p2m_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags)
int create_grant_p2m_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags)
{
p2m_type_t p2mt;
int rc;
@@ -4046,15 +4049,12 @@ static int create_grant_p2m_mapping(uint64_t addr, unsigned long frame,
return GNTST_okay;
}
int create_grant_host_mapping(uint64_t addr, unsigned long frame,
unsigned int flags, unsigned int cache_flags)
int create_grant_pv_mapping(uint64_t addr, unsigned long frame,
unsigned int flags, unsigned int cache_flags)
{
l1_pgentry_t pte;
uint32_t grant_pte_flags;
if ( paging_mode_external(current->domain) )
return create_grant_p2m_mapping(addr, frame, flags, cache_flags);
grant_pte_flags =
_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_GNTTAB;
if ( cpu_has_nx )
+14 -2
View File
@@ -7,14 +7,26 @@
#ifndef __ASM_GRANT_TABLE_H__
#define __ASM_GRANT_TABLE_H__
#include <asm/paging.h>
#include <asm/hvm/grant_table.h>
#include <asm/pv/grant_table.h>
#define INITIAL_NR_GRANT_FRAMES 4
/*
* Caller must own caller's BIGLOCK, is responsible for flushing the TLB, and
* must hold a reference to the page.
*/
int create_grant_host_mapping(uint64_t addr, unsigned long frame,
unsigned int flags, unsigned int cache_flags);
static inline int create_grant_host_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags)
{
if ( paging_mode_external(current->domain) )
return create_grant_p2m_mapping(addr, frame, flags, cache_flags);
return create_grant_pv_mapping(addr, frame, flags, cache_flags);
}
int replace_grant_host_mapping(
uint64_t addr, unsigned long frame, uint64_t new_addr, unsigned int flags);
+53
View File
@@ -0,0 +1,53 @@
/*
* asm-x86/hvm/grant_table.h
*
* Grant table interfaces for HVM guests
*
* Copyright (C) 2017 Wei Liu <wei.liu2@citrix.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms and conditions of the GNU General Public
* License, version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __X86_HVM_GRANT_TABLE_H__
#define __X86_HVM_GRANT_TABLE_H__
#ifdef CONFIG_HVM
int create_grant_p2m_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags);
#else
#include <public/grant_table.h>
static inline int create_grant_p2m_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags)
{
return GNTST_general_error;
}
#endif
#endif /* __X86_HVM_GRANT_TABLE_H__ */
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/
+52
View File
@@ -0,0 +1,52 @@
/*
* asm-x86/pv/grant_table.h
*
* Grant table interfaces for PV guests
*
* Copyright (C) 2017 Wei Liu <wei.liu2@citrix.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms and conditions of the GNU General Public
* License, version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __X86_PV_GRANT_TABLE_H__
#define __X86_PV_GRANT_TABLE_H__
#ifdef CONFIG_PV
int create_grant_pv_mapping(uint64_t addr, unsigned long frame,
unsigned int flags, unsigned int cache_flags);
#else
#include <public/grant_table.h>
static inline int create_grant_pv_mapping(uint64_t addr, unsigned long frame,
unsigned int flags,
unsigned int cache_flags)
{
return GNTST_general_error;
}
#endif
#endif /* __X86_PV_GRANT_TABLE_H__ */
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.