mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
TCG patch queue:
Workaround macos assembler lossage. Eliminate tb_lock. Fix TB code generation overflow. -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJbJBZIAAoJEGTfOOivfiFfy0gH/1brodMhJbTS6/k9+FyXWEy5 zYjCGKKlMZk//Y+4wcF5tXY/qDRNWk80j6KyxumNp3gCBehx6u59EEsrJRQaxBHm nYbDoE3Fy0J4KgRzdGmkYtl89XDK1++Ea9uL9N/stg2MSodzqoV6uudLYr/f+nRj 4MkS+7BI+aJ4/XIKLU+/+cRo+5FdD0hNEabjlUxTOSrfJbr/YxbnVINX01A4yD6q LSzwLAEqpJehFBQjeSLu93ztrapj/1vEaguPOf04F6pXgOLpvSPlPahqwwk4qRwS OFgWwSPby3jrNLYZcufx2cY5pG3i4wDGK3z/B35hnDEGwYp1fNt6xdq+EzmHhaM= =ibt/ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20180615' into staging TCG patch queue: Workaround macos assembler lossage. Eliminate tb_lock. Fix TB code generation overflow. # gpg: Signature made Fri 15 Jun 2018 20:40:56 BST # gpg: using RSA key 64DF38E8AF7E215F # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * remotes/rth/tags/pull-tcg-20180615: tcg: Reduce max TB opcode count tcg: remove tb_lock translate-all: remove tb_lock mention from cpu_restore_state_from_tb cputlb: remove tb_lock from tlb_flush functions translate-all: protect TB jumps with a per-destination-TB lock translate-all: discard TB when tb_link_page returns an existing matching TB translate-all: introduce assert_no_pages_locked translate-all: add page_locked assertions translate-all: use per-page locking in !user-mode translate-all: move tb_invalidate_phys_page_range up in the file translate-all: work page-by-page in tb_invalidate_phys_range_1 translate-all: remove hole in PageDesc translate-all: make l1_map lockless translate-all: iterate over TBs in a page with PAGE_FOR_EACH_TB tcg: move tb_ctx.tb_phys_invalidate_count to tcg_ctx tcg: track TBs with per-region BST's qht: return existing entry when qht_insert fails qht: require a default comparison function tcg/i386: Use byte form of xgetbv instruction Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
33836a7315
25 changed files with 1157 additions and 490 deletions
|
@ -93,10 +93,10 @@ static void usage_complete(int argc, char *argv[])
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
static bool is_equal(const void *obj, const void *userp)
|
||||
static bool is_equal(const void *ap, const void *bp)
|
||||
{
|
||||
const long *a = obj;
|
||||
const long *b = userp;
|
||||
const long *a = ap;
|
||||
const long *b = bp;
|
||||
|
||||
return *a == *b;
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ static void do_rw(struct thread_info *info)
|
|||
|
||||
p = &keys[info->r & (lookup_range - 1)];
|
||||
hash = h(*p);
|
||||
read = qht_lookup(&ht, is_equal, p, hash);
|
||||
read = qht_lookup(&ht, p, hash);
|
||||
if (read) {
|
||||
stats->rd++;
|
||||
} else {
|
||||
|
@ -162,8 +162,8 @@ static void do_rw(struct thread_info *info)
|
|||
if (info->write_op) {
|
||||
bool written = false;
|
||||
|
||||
if (qht_lookup(&ht, is_equal, p, hash) == NULL) {
|
||||
written = qht_insert(&ht, p, hash);
|
||||
if (qht_lookup(&ht, p, hash) == NULL) {
|
||||
written = qht_insert(&ht, p, hash, NULL);
|
||||
}
|
||||
if (written) {
|
||||
stats->in++;
|
||||
|
@ -173,7 +173,7 @@ static void do_rw(struct thread_info *info)
|
|||
} else {
|
||||
bool removed = false;
|
||||
|
||||
if (qht_lookup(&ht, is_equal, p, hash)) {
|
||||
if (qht_lookup(&ht, p, hash)) {
|
||||
removed = qht_remove(&ht, p, hash);
|
||||
}
|
||||
if (removed) {
|
||||
|
@ -308,7 +308,7 @@ static void htable_init(void)
|
|||
}
|
||||
|
||||
/* initialize the hash table */
|
||||
qht_init(&ht, qht_n_elems, qht_mode);
|
||||
qht_init(&ht, is_equal, qht_n_elems, qht_mode);
|
||||
assert(init_size <= init_range);
|
||||
|
||||
pr_params();
|
||||
|
@ -322,7 +322,7 @@ static void htable_init(void)
|
|||
r = xorshift64star(r);
|
||||
p = &keys[r & (init_range - 1)];
|
||||
hash = h(*p);
|
||||
if (qht_insert(&ht, p, hash)) {
|
||||
if (qht_insert(&ht, p, hash, NULL)) {
|
||||
break;
|
||||
}
|
||||
retries++;
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
static struct qht ht;
|
||||
static int32_t arr[N * 2];
|
||||
|
||||
static bool is_equal(const void *obj, const void *userp)
|
||||
static bool is_equal(const void *ap, const void *bp)
|
||||
{
|
||||
const int32_t *a = obj;
|
||||
const int32_t *b = userp;
|
||||
const int32_t *a = ap;
|
||||
const int32_t *b = bp;
|
||||
|
||||
return *a == *b;
|
||||
}
|
||||
|
@ -27,11 +27,17 @@ static void insert(int a, int b)
|
|||
|
||||
for (i = a; i < b; i++) {
|
||||
uint32_t hash;
|
||||
void *existing;
|
||||
bool inserted;
|
||||
|
||||
arr[i] = i;
|
||||
hash = i;
|
||||
|
||||
qht_insert(&ht, &arr[i], hash);
|
||||
inserted = qht_insert(&ht, &arr[i], hash, NULL);
|
||||
g_assert_true(inserted);
|
||||
inserted = qht_insert(&ht, &arr[i], hash, &existing);
|
||||
g_assert_false(inserted);
|
||||
g_assert_true(existing == &arr[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,7 +66,12 @@ static void check(int a, int b, bool expected)
|
|||
|
||||
val = i;
|
||||
hash = i;
|
||||
p = qht_lookup(&ht, is_equal, &val, hash);
|
||||
/* test both lookup variants; results should be the same */
|
||||
if (i % 2) {
|
||||
p = qht_lookup(&ht, &val, hash);
|
||||
} else {
|
||||
p = qht_lookup_custom(&ht, &val, hash, is_equal);
|
||||
}
|
||||
g_assert_true(!!p == expected);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
@ -102,7 +113,7 @@ static void qht_do_test(unsigned int mode, size_t init_entries)
|
|||
/* under KVM we might fetch stats from an uninitialized qht */
|
||||
check_n(0);
|
||||
|
||||
qht_init(&ht, 0, mode);
|
||||
qht_init(&ht, is_equal, 0, mode);
|
||||
|
||||
check_n(0);
|
||||
insert(0, N);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue