From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33973) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aj6yv-00023Z-GK for qemu-devel@nongnu.org; Thu, 24 Mar 2016 11:15:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aj6yp-0002qb-QG for qemu-devel@nongnu.org; Thu, 24 Mar 2016 11:15:29 -0400 Received: from mail-lf0-x244.google.com ([2a00:1450:4010:c07::244]:35648) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aj6yp-0002qU-IP for qemu-devel@nongnu.org; Thu, 24 Mar 2016 11:15:23 -0400 Received: by mail-lf0-x244.google.com with SMTP id c62so1357270lfc.2 for ; Thu, 24 Mar 2016 08:15:23 -0700 (PDT) References: <1458815961-31979-1-git-send-email-sergey.fedorov@linaro.org> <1458815961-31979-3-git-send-email-sergey.fedorov@linaro.org> <87oaa3rkgf.fsf@linaro.org> From: Sergey Fedorov Message-ID: <56F40489.5080004@gmail.com> Date: Thu, 24 Mar 2016 18:15:21 +0300 MIME-Version: 1.0 In-Reply-To: <87oaa3rkgf.fsf@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 2/8] tcg: Use uintptr_t type for jmp_list_{next|first} fields of TB List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?Q?Alex_Benn=c3=a9e?= , sergey.fedorov@linaro.org Cc: Paolo Bonzini , Richard Henderson , qemu-devel@nongnu.org, Peter Crosthwaite On 24/03/16 17:58, Alex Bennée wrote: >> diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h >> > index cc3d2ca25917..cd96219a89e7 100644 >> > --- a/include/exec/exec-all.h >> > +++ b/include/exec/exec-all.h >> > @@ -275,14 +275,15 @@ struct TranslationBlock { >> > * jmp_list_first points to the first TB jumping to this one. >> > * jmp_list_next is used to point to the next TB in a list. >> > * Since each TB can have two jumps, it can participate in two lists. >> > - * The two least significant bits of a pointer are used to choose which >> > - * data field holds a pointer to the next TB: >> > + * jmp_list_first and jmp_list_next are 4-byte aligned pointers to a >> > + * TranslationBlock structure, and the two least significant bits of them >> > + * are used to encode which data field holds a pointer to the next TB: >> > * 0 => jmp_list_next[0], 1 => jmp_list_next[1], 2 => jmp_list_first. >> > * In other words, 0/1 tells which jump is used in the pointed TB, >> > * and 2 means that this is a pointer back to the target TB of this list. >> > */ > Ahh I see you anticipate my previous confusion. Does this mean each time > a jump is resolved for a particular chain the next tb could be in a > different entry in the next TB? I'm not sure I got your question right... When we patch the n-th jump of a TB we use it's 'jmp_list_next[n]' to add it to the list of the TBs jumping to the same target TB. And we use 'jmp_list_first' of the target TB to track all those TBs jumping to it. Kind regards, Sergey