qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Does the page boundary check still necessary?
@ 2023-02-15  8:39 Kenneth Lee
  2023-02-15 17:27 ` Richard Henderson
  0 siblings, 1 reply; 7+ messages in thread
From: Kenneth Lee @ 2023-02-15  8:39 UTC (permalink / raw)
  To: qemu-devel

Hello,

I hope I send this mail to the right place.

I'm porting a new guest arch. It jumps of out of physical page
constantly. So many TBs cannot be chained with goto_tb. I'm wondering 
if the following check is still necessary?

	bool translator_use_goto_tb(DisasContextBase *db, target_ulong dest)
	{
	    /* Suppress goto_tb if requested. */
	    if (tb_cflags(db->tb) & CF_NO_GOTO_TB) {
		return false;
	    }

	    /* Check for the dest on the same page as the start of the TB.  */
	    return ((db->pc_first ^ dest) & TARGET_PAGE_MASK) == 0;    <--- Is this check really necessary?
	}

Now the chained TBs have been link with tb_link_page(), the chain will
be rebuilt if it is invalidate on page. So why is this check still there?

Acutally, I have tested some use cases with this check removed. It works
fine. Could anybody tell me in what case it is still necessary?

Thanks.


-- 
			-Kenneth


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

* Re: Does the page boundary check still necessary?
  2023-02-15  8:39 Does the page boundary check still necessary? Kenneth Lee
@ 2023-02-15 17:27 ` Richard Henderson
  2023-02-16  1:45   ` Kenneth Lee
  0 siblings, 1 reply; 7+ messages in thread
From: Richard Henderson @ 2023-02-15 17:27 UTC (permalink / raw)
  To: Kenneth Lee, qemu-devel

On 2/14/23 22:39, Kenneth Lee wrote:
> Hello,
> 
> I hope I send this mail to the right place.
> 
> I'm porting a new guest arch. It jumps of out of physical page
> constantly. So many TBs cannot be chained with goto_tb. I'm wondering
> if the following check is still necessary?
> 
> 	bool translator_use_goto_tb(DisasContextBase *db, target_ulong dest)
> 	{
> 	    /* Suppress goto_tb if requested. */
> 	    if (tb_cflags(db->tb) & CF_NO_GOTO_TB) {
> 		return false;
> 	    }
> 
> 	    /* Check for the dest on the same page as the start of the TB.  */
> 	    return ((db->pc_first ^ dest) & TARGET_PAGE_MASK) == 0;    <--- Is this check really necessary?
> 	}
> 
> Now the chained TBs have been link with tb_link_page(), the chain will
> be rebuilt if it is invalidate on page. So why is this check still there?

Even for a guest which doesn't use paging, and therefore does not need to worry about 
memory maps changing, we still enable breakpoints and watchpoints on a per-page basis.


r~


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

* Re: Does the page boundary check still necessary?
  2023-02-15 17:27 ` Richard Henderson
@ 2023-02-16  1:45   ` Kenneth Lee
  2023-02-16  2:26     ` Richard Henderson
  0 siblings, 1 reply; 7+ messages in thread
From: Kenneth Lee @ 2023-02-16  1:45 UTC (permalink / raw)
  To: Richard Henderson; +Cc: qemu-devel

On Wed, Feb 15, 2023 at 07:27:19AM -1000, Richard Henderson wrote:
> Date: Wed, 15 Feb 2023 07:27:19 -1000
> From: Richard Henderson <richard.henderson@linaro.org>
> To: Kenneth Lee <Kenneth-Lee-2012@foxmail.com>, qemu-devel@nongnu.org
> Subject: Re: Does the page boundary check still necessary?
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
>  Thunderbird/102.7.1
> 
> On 2/14/23 22:39, Kenneth Lee wrote:
> > Hello,
> > 
> > I hope I send this mail to the right place.
> > 
> > I'm porting a new guest arch. It jumps of out of physical page
> > constantly. So many TBs cannot be chained with goto_tb. I'm wondering
> > if the following check is still necessary?
> > 
> > 	bool translator_use_goto_tb(DisasContextBase *db, target_ulong dest)
> > 	{
> > 	    /* Suppress goto_tb if requested. */
> > 	    if (tb_cflags(db->tb) & CF_NO_GOTO_TB) {
> > 		return false;
> > 	    }
> > 
> > 	    /* Check for the dest on the same page as the start of the TB.  */
> > 	    return ((db->pc_first ^ dest) & TARGET_PAGE_MASK) == 0;    <--- Is this check really necessary?
> > 	}
> > 
> > Now the chained TBs have been link with tb_link_page(), the chain will
> > be rebuilt if it is invalidate on page. So why is this check still there?
> 
> Even for a guest which doesn't use paging, and therefore does not need to
> worry about memory maps changing, we still enable breakpoints and
> watchpoints on a per-page basis.
> 

Thank you. So is this the only reason? May I write a fine grained
checking to remove this limitation?

> 
> r~

-- 
			-Ken


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

* Re: Does the page boundary check still necessary?
  2023-02-16  1:45   ` Kenneth Lee
@ 2023-02-16  2:26     ` Richard Henderson
  2023-02-16  2:28       ` Kenneth Lee
  0 siblings, 1 reply; 7+ messages in thread
From: Richard Henderson @ 2023-02-16  2:26 UTC (permalink / raw)
  To: Kenneth Lee; +Cc: qemu-devel

On 2/15/23 15:45, Kenneth Lee wrote:
>>> Now the chained TBs have been link with tb_link_page(), the chain will
>>> be rebuilt if it is invalidate on page. So why is this check still there?
>>
>> Even for a guest which doesn't use paging, and therefore does not need to
>> worry about memory maps changing, we still enable breakpoints and
>> watchpoints on a per-page basis.
>>
> 
> Thank you. So is this the only reason? May I write a fine grained
> checking to remove this limitation?

No.


r~



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

* Re: Does the page boundary check still necessary?
  2023-02-16  2:26     ` Richard Henderson
@ 2023-02-16  2:28       ` Kenneth Lee
  2023-02-16  2:52         ` Richard Henderson
  0 siblings, 1 reply; 7+ messages in thread
From: Kenneth Lee @ 2023-02-16  2:28 UTC (permalink / raw)
  To: Richard Henderson; +Cc: qemu-devel

On Wed, Feb 15, 2023 at 04:26:18PM -1000, Richard Henderson wrote:
> Date: Wed, 15 Feb 2023 16:26:18 -1000
> From: Richard Henderson <richard.henderson@linaro.org>
> To: Kenneth Lee <Kenneth-Lee-2012@foxmail.com>
> Cc: qemu-devel@nongnu.org
> Subject: Re: Does the page boundary check still necessary?
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
>  Thunderbird/102.7.1
> 
> On 2/15/23 15:45, Kenneth Lee wrote:
> > > > Now the chained TBs have been link with tb_link_page(), the chain will
> > > > be rebuilt if it is invalidate on page. So why is this check still there?
> > > 
> > > Even for a guest which doesn't use paging, and therefore does not need to
> > > worry about memory maps changing, we still enable breakpoints and
> > > watchpoints on a per-page basis.
> > > 
> > 
> > Thank you. So is this the only reason? May I write a fine grained
> > checking to remove this limitation?
> 
> No.
> 
Why?
> 
> r~

-- 
			-Kenneth Lee (Hisilicon)


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

* Re: Does the page boundary check still necessary?
  2023-02-16  2:28       ` Kenneth Lee
@ 2023-02-16  2:52         ` Richard Henderson
  2023-02-16  9:35           ` Kenneth Lee
  0 siblings, 1 reply; 7+ messages in thread
From: Richard Henderson @ 2023-02-16  2:52 UTC (permalink / raw)
  To: Kenneth Lee; +Cc: qemu-devel

On 2/15/23 16:28, Kenneth Lee wrote:
> On Wed, Feb 15, 2023 at 04:26:18PM -1000, Richard Henderson wrote:
>> Date: Wed, 15 Feb 2023 16:26:18 -1000
>> From: Richard Henderson <richard.henderson@linaro.org>
>> To: Kenneth Lee <Kenneth-Lee-2012@foxmail.com>
>> Cc: qemu-devel@nongnu.org
>> Subject: Re: Does the page boundary check still necessary?
>> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
>>   Thunderbird/102.7.1
>>
>> On 2/15/23 15:45, Kenneth Lee wrote:
>>>>> Now the chained TBs have been link with tb_link_page(), the chain will
>>>>> be rebuilt if it is invalidate on page. So why is this check still there?
>>>>
>>>> Even for a guest which doesn't use paging, and therefore does not need to
>>>> worry about memory maps changing, we still enable breakpoints and
>>>> watchpoints on a per-page basis.
>>>>
>>>
>>> Thank you. So is this the only reason? May I write a fine grained
>>> checking to remove this limitation?
>>
>> No.
>>
> Why?

When breakpoints change, we discard all translations on the affected page, similarly to 
how we handle writes from self-modifying code.  If you link from further away, then TBs 
won't be invalidated properly when breakpoints change.  For most guests, this isn't a 
limitation because we also have to care for modifications to page tables, so we can't 
allow such links anyway.

I have no idea what you're trying to accomplish that's different from existing guests.


r~


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

* Re: Does the page boundary check still necessary?
  2023-02-16  2:52         ` Richard Henderson
@ 2023-02-16  9:35           ` Kenneth Lee
  0 siblings, 0 replies; 7+ messages in thread
From: Kenneth Lee @ 2023-02-16  9:35 UTC (permalink / raw)
  To: Richard Henderson; +Cc: qemu-devel

On Wed, Feb 15, 2023 at 04:52:24PM -1000, Richard Henderson wrote:
> Date: Wed, 15 Feb 2023 16:52:24 -1000
> From: Richard Henderson <richard.henderson@linaro.org>
> To: Kenneth Lee <Kenneth-Lee-2012@foxmail.com>
> Cc: qemu-devel@nongnu.org
> Subject: Re: Does the page boundary check still necessary?
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
>  Thunderbird/102.7.1
> 
> On 2/15/23 16:28, Kenneth Lee wrote:
> > On Wed, Feb 15, 2023 at 04:26:18PM -1000, Richard Henderson wrote:
> > > Date: Wed, 15 Feb 2023 16:26:18 -1000
> > > From: Richard Henderson <richard.henderson@linaro.org>
> > > To: Kenneth Lee <Kenneth-Lee-2012@foxmail.com>
> > > Cc: qemu-devel@nongnu.org
> > > Subject: Re: Does the page boundary check still necessary?
> > > User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
> > >   Thunderbird/102.7.1
> > > 
> > > On 2/15/23 15:45, Kenneth Lee wrote:
> > > > > > Now the chained TBs have been link with tb_link_page(), the chain will
> > > > > > be rebuilt if it is invalidate on page. So why is this check still there?
> > > > > 
> > > > > Even for a guest which doesn't use paging, and therefore does not need to
> > > > > worry about memory maps changing, we still enable breakpoints and
> > > > > watchpoints on a per-page basis.
> > > > > 
> > > > 
> > > > Thank you. So is this the only reason? May I write a fine grained
> > > > checking to remove this limitation?
> > > 
> > > No.
> > > 
> > Why?
> 
> When breakpoints change, we discard all translations on the affected page,
> similarly to how we handle writes from self-modifying code.  If you link
> from further away, then TBs won't be invalidated properly when breakpoints
> change.  For most guests, this isn't a limitation because we also have to
> care for modifications to page tables, so we can't allow such links anyway.
> 
> I have no idea what you're trying to accomplish that's different from existing guests.

Thank you for the clarification. You are right. It is senseless to the
current guests. I just consider a guest with some hint to the main
sequence of the code. It jumps out of range constantely. Maybe I can
find other way to solve the problem.

Thanks again.

> 
> 
> r~

-- 
			-Kenneth Lee (Hisilicon)


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

end of thread, other threads:[~2023-02-16  9:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-15  8:39 Does the page boundary check still necessary? Kenneth Lee
2023-02-15 17:27 ` Richard Henderson
2023-02-16  1:45   ` Kenneth Lee
2023-02-16  2:26     ` Richard Henderson
2023-02-16  2:28       ` Kenneth Lee
2023-02-16  2:52         ` Richard Henderson
2023-02-16  9:35           ` Kenneth Lee

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).