All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Andrii Tseglytskyi <andrii.tseglytskyi@globallogic.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	xen-devel@lists.xen.org
Subject: Re: run time memory trap question
Date: Mon, 17 Feb 2014 15:19:14 +0000	[thread overview]
Message-ID: <53022872.80209@linaro.org> (raw)
In-Reply-To: <CAH_mUMP=G96gJG_vPvngMsPsktUDJOxFmmMQRBXfZ42iu3kAKQ@mail.gmail.com>

On 02/17/2014 03:01 PM, Andrii Tseglytskyi wrote:
> Hi Julien,
> 
> 
>     >
>     >     > Can anyone clarify - is it possible to make a run time
>     memory trap in
>     >     > Xen hypervisor?
>     >
>     >     I guess you are talking about ARM? If so, it's not possible
>     right now.
>     >
>     >
>     > Does it mean, that it is possible on x86 ?
> 
>     Yes, you can look at register_io_handler in xen/arch/x86/hvm/intercept.c
> 
>     It's used a static array, but I don't think this is the solution for
>     ARM. We don't know in advance the maximum number of MMIO region to
>     handle.
> 
> 
> What I'm thinking about for ARM - is to use linked list for MMIO
> handlers + API to register / unregister handler.
> 
> xen/arch/arm/io.c:
> 
>  25 static const struct mmio_handler *const mmio_handlers[] =
>  26 {   
>  27     &vgic_distr_mmio_handler,
>  28     &vuart_mmio_handler,
>  29 };  
> 
> This can be changed to list. New API will add / remove entries. VGIC and
> VUART will call something like
> mmio_register_handler(&vgic_distr_mmio_handle) during corresponding
> initcall.
> 
> Than the only change which is required for existing int
> handle_mmio(mmio_info_t *info) function  - is to enumerate list, instead
> of array
>  32 int handle_mmio(mmio_info_t *info)
>  33 {
>  34     struct vcpu *v = current;
>  35     int i;
>  36 
>  37     for ( i = 0; i < MMIO_HANDLER_NR; i++ ) --> *list_for_each*
>  38         if ( mmio_handlers[i]->check_handler(v, info->gpa) )
>  39             return info->dabt.write ?
>  40                 mmio_handlers[i]->write_handler(v, info) :
>  41                 mmio_handlers[i]->read_handler(v, info);
>  42 
>  43     return 0;
>  44 }
> 
> Something like this.

This solution sounds good.

If I remembered correctly, you are writing a driver for IPU/GPU MMU, right?
In this case, I think a per-domain MMU handlers would be better. Most of
handlers will be used for a specific guest (except the VGIC handler).

-- 
Julien Grall

  parent reply	other threads:[~2014-02-17 15:19 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-17 11:33 run time memory trap question Andrii Tseglytskyi
2014-02-17 12:02 ` Julien Grall
2014-02-17 14:06   ` Andrii Tseglytskyi
2014-02-17 14:16     ` Julien Grall
2014-02-17 15:01       ` Andrii Tseglytskyi
2014-02-17 15:02         ` Stefano Stabellini
2014-02-17 15:19         ` Julien Grall [this message]
2014-02-17 15:38           ` Andrii Tseglytskyi
2014-02-17 15:56             ` Julien Grall
2014-02-18 11:05             ` Ian Campbell
2014-02-18 17:52               ` Andrii Tseglytskyi

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=53022872.80209@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=andrii.tseglytskyi@globallogic.com \
    --cc=ian.campbell@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xen.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.