From: Richard Henderson <rth@twiddle.net>
To: Xin Tong <trent.tong@gmail.com>,
QEMU Developers <qemu-devel@nongnu.org>,
afaerber@suse.de, aliguori@amazon.com
Subject: Re: [Qemu-devel] [PATCH] cpu: implementing victim TLB for QEMU system emulated TLB
Date: Wed, 22 Jan 2014 13:55:03 -0800 [thread overview]
Message-ID: <52E03E37.6040702@twiddle.net> (raw)
In-Reply-To: <CA+JLOisqRbnhnGN4uQh_1yMOQ9__X2FDgNGtf9rz_hTg4Txdig@mail.gmail.com>
On 01/22/2014 06:48 AM, Xin Tong wrote:
> +#define TLB_XOR_SWAP(X, Y) do {*X = *X ^ *Y; *Y = *X ^ *Y; *X = *X ^
> *Y;}while(0);
First, your patch is line wrapped. You really really really need to follow the
directions Peter gave you.
Second, using xor to swap values is a cute assembler trick, but it has no place
in high-level programming. Look at the generated assembly and you'll find way
more memory accesses than necessary.
> +void swap_tlb(CPUTLBEntry *te, CPUTLBEntry *se, hwaddr *iote, hwaddr *iose)
This function could probably stand to be inline, so that we produce better code
for softmmu_template.h.
> + for (k = 0;k < CPU_VTLB_SIZE; k++) {
Watch your spacing. Did the patch pass checkpatch.pl?
> for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
> unsigned int i;
> -
> for (i = 0; i < CPU_TLB_SIZE; i++) {
Don't randomly change whitespace.
> + /* do not discard the translation in te, evict it into a random
> victim tlb */
> + unsigned vidx = rand() % CPU_VTLB_SIZE;
Don't use rand. That's a huge heavy-weight function. Treating the victim
table as a circular buffer would surely be quicker. Using a LRU algorithm
might do better, but could also be overkill.
> do_unaligned_access(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
> }
> #endif
> - tlb_fill(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
> + /* we are about to do a page table walk. our last hope is the
> victim tlb.
> + * try to refill from the victim tlb before walking the page table. */
> + int vidx, vhit = false;
We're supposed to be c89 compliant. No declarations in the middle of the
block. Also, you can avoid the vhit variable entirely with
> + for(vidx = 0;vidx < CPU_VTLB_SIZE; ++vidx) {
for (vidx = CPU_VTLB_SIZE - 1; vidx >= 0; --vidx) {
...
}
if (vidx < 0) {
tlb_fill(...);
}
r~
next prev parent reply other threads:[~2014-01-22 21:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-22 14:48 [Qemu-devel] [PATCH] cpu: implementing victim TLB for QEMU system emulated TLB Xin Tong
2014-01-22 21:55 ` Richard Henderson [this message]
2014-01-22 22:40 ` Xin Tong
2014-01-22 22:56 ` Richard Henderson
2014-01-23 11:23 ` Alex Bennée
2014-01-23 13:50 ` Xin Tong
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=52E03E37.6040702@twiddle.net \
--to=rth@twiddle.net \
--cc=afaerber@suse.de \
--cc=aliguori@amazon.com \
--cc=qemu-devel@nongnu.org \
--cc=trent.tong@gmail.com \
/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.