xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] x86/mm: Ensure useful progress in alloc_l2_table()
@ 2013-07-03 12:28 Andrew Cooper
  2013-07-03 12:41 ` Keir Fraser
  0 siblings, 1 reply; 2+ messages in thread
From: Andrew Cooper @ 2013-07-03 12:28 UTC (permalink / raw)
  To: Xen-devel; +Cc: Andrew Cooper, Keir, Jan Beulich, Tim Deegan

While debugging the issue which turned out to be XSA-58, a printk in this loop
showed that it was quite easy to never make useful progress, because of
consistently failing the preemption check.

One single l2 entry is a reasonable amount of work to do, even if an action is
pending, and also assures forwards progress across repeat continuations.

Tweak the continuation criteria to fail on the first iteration of the loop.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Keir <keir@xen.org>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Tim Deegan <tim@xen.org>

---
Changes since v1:
 * Dont move the continuation block to the end
---
 xen/arch/x86/mm.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 77dcafc..f151dec 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -1278,7 +1278,8 @@ static int alloc_l2_table(struct page_info *page, unsigned long type,
 
     for ( i = page->nr_validated_ptes; i < L2_PAGETABLE_ENTRIES; i++ )
     {
-        if ( preemptible && i && hypercall_preempt_check() )
+        if ( preemptible && i > page->nr_validated_ptes
+             && hypercall_preempt_check() )
         {
             page->nr_validated_ptes = i;
             rc = -EAGAIN;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] x86/mm: Ensure useful progress in alloc_l2_table()
  2013-07-03 12:28 [PATCH v2] x86/mm: Ensure useful progress in alloc_l2_table() Andrew Cooper
@ 2013-07-03 12:41 ` Keir Fraser
  0 siblings, 0 replies; 2+ messages in thread
From: Keir Fraser @ 2013-07-03 12:41 UTC (permalink / raw)
  To: Andrew Cooper, Xen-devel; +Cc: Tim Deegan, Jan Beulich

On 03/07/2013 13:28, "Andrew Cooper" <andrew.cooper3@citrix.com> wrote:

> While debugging the issue which turned out to be XSA-58, a printk in this loop
> showed that it was quite easy to never make useful progress, because of
> consistently failing the preemption check.
> 
> One single l2 entry is a reasonable amount of work to do, even if an action is
> pending, and also assures forwards progress across repeat continuations.
> 
> Tweak the continuation criteria to fail on the first iteration of the loop.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Cc: Keir <keir@xen.org>

Acked-by: Keir Fraser <keir@xen.org>

> Cc: Jan Beulich <JBeulich@suse.com>
> Cc: Tim Deegan <tim@xen.org>
> 
> ---
> Changes since v1:
>  * Dont move the continuation block to the end
> ---
>  xen/arch/x86/mm.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index 77dcafc..f151dec 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -1278,7 +1278,8 @@ static int alloc_l2_table(struct page_info *page,
> unsigned long type,
>  
>      for ( i = page->nr_validated_ptes; i < L2_PAGETABLE_ENTRIES; i++ )
>      {
> -        if ( preemptible && i && hypercall_preempt_check() )
> +        if ( preemptible && i > page->nr_validated_ptes
> +             && hypercall_preempt_check() )
>          {
>              page->nr_validated_ptes = i;
>              rc = -EAGAIN;

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-07-03 12:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-03 12:28 [PATCH v2] x86/mm: Ensure useful progress in alloc_l2_table() Andrew Cooper
2013-07-03 12:41 ` Keir Fraser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).