diff options
| -rw-r--r-- | sys-utils/lscpu-arm.c | 37 | ||||
| -rw-r--r-- | sys-utils/lscpu.c | 3 | ||||
| -rw-r--r-- | sys-utils/lscpu.h | 2 |
3 files changed, 40 insertions, 2 deletions
diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c index 2c76c376bd..ad714e77ae 100644 --- a/sys-utils/lscpu-arm.c +++ b/sys-utils/lscpu-arm.c @@ -334,14 +334,49 @@ static int parse_id(const char *str) #define parse_model_id(_cxt) (parse_id((_cxt)->model)) +static inline int get_implementer_id(struct lscpu_cputype *ct) +{ + if (ct->vendor_id) + return ct->vendor_id; + return parse_id(ct->vendor); +} + static inline int parse_implementer_id(struct lscpu_cputype *ct) { + int id; + if (ct->vendor_id) return ct->vendor_id; - ct->vendor_id = parse_id(ct->vendor); + id = get_implementer_id(ct); + if (id <= 0) + return id; + + ct->vendor_id = id; return ct->vendor_id; } +int is_arm(struct lscpu_cxt *cxt) +{ + size_t i; + + if (is_live(cxt)) + return strcmp(cxt->arch->name, "aarch64") == 0; + + /* dump; assume ARM if vendor ID is known */ + for (i = 0; i < cxt->ncputypes; i++) { + + int j, id = get_implementer_id(cxt->cputypes[i]); + if (id <= 0) + continue; + for (j = 0; hw_implementer[j].id != -1; j++) { + if (hw_implementer[j].id == id) + return 1; + } + } + + return 0; +} + /* * Use model and vendor IDs to decode to human readable names. */ diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c index c073fc0dc4..60a0912370 100644 --- a/sys-utils/lscpu.c +++ b/sys-utils/lscpu.c @@ -1365,7 +1365,8 @@ int main(int argc, char *argv[]) lscpu_read_numas(cxt); lscpu_read_topology(cxt); - lscpu_decode_arm(cxt); + if (is_arm(cxt)) + lscpu_decode_arm(cxt); cxt->virt = lscpu_read_virtualization(cxt); diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h index cf1147d60f..b68d1fff5f 100644 --- a/sys-utils/lscpu.h +++ b/sys-utils/lscpu.h @@ -271,6 +271,8 @@ struct lscpu_cxt { ((_cxt) && (_cpu) && (_cxt)->present && \ CPU_ISSET_S((_cpu)->logical_id, (_cxt)->setsize, (_cxt)->present)) +int is_arm(struct lscpu_cxt *cxt); + struct lscpu_cputype *lscpu_new_cputype(void); void lscpu_ref_cputype(struct lscpu_cputype *ct); void lscpu_unref_cputype(struct lscpu_cputype *ct); |
