Skip to content

Commit 13f77a3

Browse files
ozbenhstewartsmith
authored andcommitted
xive: Indirect table entries must have top bits "type" set
The HW check that the 2 tops bits aren't both clear to differenciate an unallocated entry from a valid one. So we need to put some value there. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
1 parent 6287003 commit 13f77a3

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

hw/xive.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,9 @@ static bool xive_prealloc_tables(struct xive *x)
11261126
}
11271127
memset(page, 0, 0x10000);
11281128
x->vp_ind_base[i] = ((uint64_t)page) & VSD_ADDRESS_MASK;
1129+
11291130
x->vp_ind_base[i] |= SETFIELD(VSD_TSIZE, 0ull, 4);
1131+
x->vp_ind_base[i] |= SETFIELD(VSD_MODE, 0ull, VSD_MODE_EXCLUSIVE);
11301132

11311133
page = local_alloc(x->chip_id, 0x10000, 0x10000);
11321134
if (!page) {
@@ -1136,6 +1138,7 @@ static bool xive_prealloc_tables(struct xive *x)
11361138
memset(page, 0, 0x10000);
11371139
x->eq_ind_base[i] = ((uint64_t)page) & VSD_ADDRESS_MASK;
11381140
x->eq_ind_base[i] |= SETFIELD(VSD_TSIZE, 0ull, 4);
1141+
x->eq_ind_base[i] |= SETFIELD(VSD_MODE, 0ull, VSD_MODE_EXCLUSIVE);
11391142

11401143
#ifdef INDIRECT_IS_LE
11411144
x->vp_ind_base[i] = cpu_to_le64(x->vp_ind_base[i]);

0 commit comments

Comments
 (0)