Skip to content

Commit

Permalink
phb4: Harden init with bad PHBs
Browse files Browse the repository at this point in the history
Currently if we read all 1's from the EEH or IRQ capabilities, we end
up train wrecking on some other random code (eg. an assert() in xive).

This hardens the PHB4 code to look for these bad reads and more
gracefully fails the init for that PHB alone.  This allows the rest of
the system to boot and ignore those bad PHBs.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
  • Loading branch information
mikey authored and stewartsmith committed Jun 21, 2017
1 parent c5549e5 commit 23d759f
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions hw/phb4.c
Original file line number Diff line number Diff line change
Expand Up @@ -3563,6 +3563,10 @@ static bool phb4_read_capabilities(struct phb4 *p)

/* Read EEH capabilities */
val = in_be64(p->regs + PHB_PHB4_EEH_CAP);
if (val == 0xffffffffffffffff) {
PHBERR(p, "Failed to read EEH cap, PHB appears broken\n");
return false;
}
p->max_num_pes = val >> 52;
if (p->max_num_pes >= 512) {
p->mrt_size = 16;
Expand All @@ -3575,6 +3579,10 @@ static bool phb4_read_capabilities(struct phb4 *p)
}

val = in_be64(p->regs + PHB_PHB4_IRQ_CAP);
if (val == 0xffffffffffffffff) {
PHBERR(p, "Failed to read IRQ cap, PHB appears broken\n");
return false;
}
p->num_irqs = val & 0xffff;

/* This works for 512 PEs. FIXME calculate for any hardware
Expand Down

0 comments on commit 23d759f

Please sign in to comment.