All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
To: Juergen Gross <jgross@suse.com>
Cc: minios-devel@lists.xenproject.org,
	xen-devel@lists.xenproject.org, wei.liu2@citrix.com
Subject: Re: [PATCH v2 14/18] mini-os: move p2m related macros to header file
Date: Wed, 10 Aug 2016 22:29:46 +0200	[thread overview]
Message-ID: <20160810202946.GA16772@var.home> (raw)
In-Reply-To: <1470418562-11234-15-git-send-email-jgross@suse.com>

Juergen Gross, on Fri 05 Aug 2016 19:35:58 +0200, wrote:
> In order to be able to use p2m related macros for ballooning move
> their definitions to arch/x86/mm.h.
> 
> There is no need to define different macros regarding index masks and
> number of entries for the different levels, as all levels share the
> same entry format (a plain mfn). So reduce the number of macros
> accordingly.
> 
> Add some macros to get the indices into p2m pages from a pfn and make
> use of them in current p2m code.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

> ---
>  arch/x86/mm.c         | 31 +++++--------------------------
>  include/x86/arch_mm.h | 21 +++++++++++++++++++++
>  2 files changed, 26 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/x86/mm.c b/arch/x86/mm.c
> index e10c2c5..a5c8959 100644
> --- a/arch/x86/mm.c
> +++ b/arch/x86/mm.c
> @@ -609,40 +609,19 @@ static void clear_bootstrap(void)
>  
>  void arch_init_p2m(unsigned long max_pfn)
>  {
> -#ifdef __x86_64__
> -#define L1_P2M_SHIFT    9
> -#define L2_P2M_SHIFT    18    
> -#define L3_P2M_SHIFT    27    
> -#else
> -#define L1_P2M_SHIFT    10
> -#define L2_P2M_SHIFT    20    
> -#define L3_P2M_SHIFT    30    
> -#endif
> -#define L1_P2M_ENTRIES  (1 << L1_P2M_SHIFT)    
> -#define L2_P2M_ENTRIES  (1 << (L2_P2M_SHIFT - L1_P2M_SHIFT))    
> -#define L3_P2M_ENTRIES  (1 << (L3_P2M_SHIFT - L2_P2M_SHIFT))    
> -#define L1_P2M_MASK     (L1_P2M_ENTRIES - 1)    
> -#define L2_P2M_MASK     (L2_P2M_ENTRIES - 1)    
> -#define L3_P2M_MASK     (L3_P2M_ENTRIES - 1)    
> -    
>      unsigned long *l2_list = NULL, *l3_list;
>      unsigned long pfn;
>      
> +    p2m_chk_pfn(max_pfn - 1);
>      l3_list = (unsigned long *)alloc_page(); 
> -    for ( pfn = 0; pfn < max_pfn; pfn += L1_P2M_ENTRIES )
> +    for ( pfn = 0; pfn < max_pfn; pfn += P2M_ENTRIES )
>      {
> -        if ( !(pfn % (L1_P2M_ENTRIES * L2_P2M_ENTRIES)) )
> +        if ( !(pfn % (P2M_ENTRIES * P2M_ENTRIES)) )
>          {
>              l2_list = (unsigned long*)alloc_page();
> -            if ( (pfn >> L3_P2M_SHIFT) > 0 )
> -            {
> -                printk("Error: Too many pfns.\n");
> -                do_exit();
> -            }
> -            l3_list[(pfn >> L2_P2M_SHIFT)] = virt_to_mfn(l2_list);  
> +            l3_list[L3_P2M_IDX(pfn)] = virt_to_mfn(l2_list);
>          }
> -        l2_list[(pfn >> L1_P2M_SHIFT) & L2_P2M_MASK] =
> -            virt_to_mfn(phys_to_machine_mapping + pfn);
> +        l2_list[L2_P2M_IDX(pfn)] = virt_to_mfn(phys_to_machine_mapping + pfn);
>      }
>      HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list_list = 
>          virt_to_mfn(l3_list);
> diff --git a/include/x86/arch_mm.h b/include/x86/arch_mm.h
> index d87fe55..7283f64 100644
> --- a/include/x86/arch_mm.h
> +++ b/include/x86/arch_mm.h
> @@ -176,7 +176,28 @@ typedef unsigned long pgentry_t;
>  #define IO_PROT_NOCACHE (L1_PROT | _PAGE_PCD)
>  
>  /* for P2M */
> +#ifdef __x86_64__
> +#define P2M_SHIFT       9
> +#else
> +#define P2M_SHIFT       10
> +#endif
> +#define P2M_ENTRIES     (1UL << P2M_SHIFT)
> +#define P2M_MASK        (P2M_ENTRIES - 1)
> +#define L1_P2M_SHIFT    P2M_SHIFT
> +#define L2_P2M_SHIFT    (2 * P2M_SHIFT)
> +#define L3_P2M_SHIFT    (3 * P2M_SHIFT)
> +#define L1_P2M_IDX(pfn) ((pfn) & P2M_MASK)
> +#define L2_P2M_IDX(pfn) (((pfn) >> L1_P2M_SHIFT) & P2M_MASK)
> +#define L3_P2M_IDX(pfn) (((pfn) >> L2_P2M_SHIFT) & P2M_MASK)
>  #define INVALID_P2M_ENTRY (~0UL)
> +static inline void p2m_chk_pfn(unsigned long pfn)
> +{
> +    if ( (pfn >> L3_P2M_SHIFT) > 0 )
> +    {
> +        printk("Error: Too many pfns.\n");
> +        do_exit();
> +    }
> +}
>  
>  #include "arch_limits.h"
>  #define PAGE_SIZE       __PAGE_SIZE
> -- 
> 2.6.6
> 

-- 
Samuel
"2 + 2 = 5 pour d'assez grandes valeurs de 2"

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2016-08-10 20:29 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-05 17:35 [PATCH v2 00/18] mini-os: support of auto-ballooning Juergen Gross
2016-08-05 17:35 ` [PATCH v2 01/18] mini-os: correct first free pfn Juergen Gross
2016-08-10 20:02   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 02/18] mini-os: remove unused alloc_contig_pages() function Juergen Gross
2016-08-10 20:02   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 03/18] mini-os: remove MM_DEBUG code Juergen Gross
2016-08-10 20:03   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 04/18] mini-os: add description of x86 memory usage Juergen Gross
2016-08-10 20:04   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 05/18] mini-os: add nr_free_pages counter Juergen Gross
2016-08-10 20:05   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 06/18] mini-os: let memory allocation fail if no free page available Juergen Gross
2016-08-10 20:06   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 07/18] mini-os: add ballooning config item Juergen Gross
2016-08-10 20:10   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 08/18] mini-os: get maximum memory size from hypervisor Juergen Gross
2016-08-10 20:11   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 09/18] mini-os: modify virtual memory layout for support of ballooning Juergen Gross
2016-08-10 20:16   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 10/18] mini-os: remove unused mem_test() function Juergen Gross
2016-08-10 20:17   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 11/18] mini-os: add checks for out of memory Juergen Gross
2016-08-10 20:18   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 12/18] mini-os: don't allocate new pages for level 1 p2m tree Juergen Gross
2016-08-10 20:24   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 13/18] mini-os: add function to map one frame Juergen Gross
2016-08-10 20:26   ` Samuel Thibault
2016-08-05 17:35 ` [PATCH v2 14/18] mini-os: move p2m related macros to header file Juergen Gross
2016-08-10 20:29   ` Samuel Thibault [this message]
2016-08-05 17:35 ` [PATCH v2 15/18] mini-os: remap p2m list in case of ballooning Juergen Gross
2016-08-10 20:35   ` Samuel Thibault
2016-08-10 20:41   ` Samuel Thibault
2016-08-11  4:04     ` Juergen Gross
2016-08-05 17:36 ` [PATCH v2 16/18] mini-os: map page allocator's bitmap to virtual kernel area for ballooning Juergen Gross
2016-08-10 20:45   ` Samuel Thibault
2016-08-11  4:05     ` Juergen Gross
2016-08-05 17:36 ` [PATCH v2 17/18] mini-os: add support for ballooning up Juergen Gross
2016-08-10 21:02   ` Samuel Thibault
2016-08-11  5:50     ` Juergen Gross
2016-08-05 17:36 ` [PATCH v2 18/18] mini-os: balloon up in case of oom Juergen Gross
2016-08-10 21:07   ` Samuel Thibault
2016-08-11  5:51     ` Juergen Gross
2016-08-10 21:07 ` [PATCH v2 00/18] mini-os: support of auto-ballooning Samuel Thibault
2016-08-11  5:52   ` Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160810202946.GA16772@var.home \
    --to=samuel.thibault@ens-lyon.org \
    --cc=jgross@suse.com \
    --cc=minios-devel@lists.xenproject.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.