diff options
| author | Christian Borntraeger <borntraeger@de.ibm.com> | 2019-02-20 11:38:42 -0500 |
|---|---|---|
| committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2019-02-22 05:04:35 -0500 |
| commit | 11ba5961a2156a4f210627ed8421387e2531b100 (patch) | |
| tree | 52542c043337607dd3e75ff52f1a815abd2fd34d | |
| parent | 346fa2f891c71a9b98014f8f62c15f4c7dd95ec1 (diff) | |
KVM: s390: add debug logging for cpu model subfunctions
As userspace can now get/set the subfunctions we want to trace those.
This will allow to also check QEMUs cpu model vs. what the real
hardware provides.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
| -rw-r--r-- | arch/s390/kvm/kvm-s390.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 82a95afa6629..4638303ba6a8 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
| @@ -1279,6 +1279,51 @@ static int kvm_s390_set_processor_subfunc(struct kvm *kvm, | |||
| 1279 | } | 1279 | } |
| 1280 | mutex_unlock(&kvm->lock); | 1280 | mutex_unlock(&kvm->lock); |
| 1281 | 1281 | ||
| 1282 | VM_EVENT(kvm, 3, "SET: guest PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", | ||
| 1283 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0], | ||
| 1284 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1], | ||
| 1285 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2], | ||
| 1286 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]); | ||
| 1287 | VM_EVENT(kvm, 3, "SET: guest PTFF subfunc 0x%16.16lx.%16.16lx", | ||
| 1288 | ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0], | ||
| 1289 | ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]); | ||
| 1290 | VM_EVENT(kvm, 3, "SET: guest KMAC subfunc 0x%16.16lx.%16.16lx", | ||
| 1291 | ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0], | ||
| 1292 | ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]); | ||
| 1293 | VM_EVENT(kvm, 3, "SET: guest KMC subfunc 0x%16.16lx.%16.16lx", | ||
| 1294 | ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0], | ||
| 1295 | ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]); | ||
| 1296 | VM_EVENT(kvm, 3, "SET: guest KM subfunc 0x%16.16lx.%16.16lx", | ||
| 1297 | ((unsigned long *) &kvm->arch.model.subfuncs.km)[0], | ||
| 1298 | ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]); | ||
| 1299 | VM_EVENT(kvm, 3, "SET: guest KIMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1300 | ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0], | ||
| 1301 | ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]); | ||
| 1302 | VM_EVENT(kvm, 3, "SET: guest KLMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1303 | ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0], | ||
| 1304 | ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]); | ||
| 1305 | VM_EVENT(kvm, 3, "SET: guest PCKMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1306 | ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0], | ||
| 1307 | ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]); | ||
| 1308 | VM_EVENT(kvm, 3, "SET: guest KMCTR subfunc 0x%16.16lx.%16.16lx", | ||
| 1309 | ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0], | ||
| 1310 | ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]); | ||
| 1311 | VM_EVENT(kvm, 3, "SET: guest KMF subfunc 0x%16.16lx.%16.16lx", | ||
| 1312 | ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0], | ||
| 1313 | ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]); | ||
| 1314 | VM_EVENT(kvm, 3, "SET: guest KMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1315 | ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0], | ||
| 1316 | ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]); | ||
| 1317 | VM_EVENT(kvm, 3, "SET: guest PCC subfunc 0x%16.16lx.%16.16lx", | ||
| 1318 | ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0], | ||
| 1319 | ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]); | ||
| 1320 | VM_EVENT(kvm, 3, "SET: guest PPNO subfunc 0x%16.16lx.%16.16lx", | ||
| 1321 | ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0], | ||
| 1322 | ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]); | ||
| 1323 | VM_EVENT(kvm, 3, "SET: guest KMA subfunc 0x%16.16lx.%16.16lx", | ||
| 1324 | ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0], | ||
| 1325 | ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]); | ||
| 1326 | |||
| 1282 | return 0; | 1327 | return 0; |
| 1283 | } | 1328 | } |
| 1284 | 1329 | ||
| @@ -1402,6 +1447,51 @@ static int kvm_s390_get_processor_subfunc(struct kvm *kvm, | |||
| 1402 | sizeof(struct kvm_s390_vm_cpu_subfunc))) | 1447 | sizeof(struct kvm_s390_vm_cpu_subfunc))) |
| 1403 | return -EFAULT; | 1448 | return -EFAULT; |
| 1404 | 1449 | ||
| 1450 | VM_EVENT(kvm, 3, "GET: guest PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", | ||
| 1451 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0], | ||
| 1452 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1], | ||
| 1453 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2], | ||
| 1454 | ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]); | ||
| 1455 | VM_EVENT(kvm, 3, "GET: guest PTFF subfunc 0x%16.16lx.%16.16lx", | ||
| 1456 | ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0], | ||
| 1457 | ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]); | ||
| 1458 | VM_EVENT(kvm, 3, "GET: guest KMAC subfunc 0x%16.16lx.%16.16lx", | ||
| 1459 | ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0], | ||
| 1460 | ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]); | ||
| 1461 | VM_EVENT(kvm, 3, "GET: guest KMC subfunc 0x%16.16lx.%16.16lx", | ||
| 1462 | ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0], | ||
| 1463 | ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]); | ||
| 1464 | VM_EVENT(kvm, 3, "GET: guest KM subfunc 0x%16.16lx.%16.16lx", | ||
| 1465 | ((unsigned long *) &kvm->arch.model.subfuncs.km)[0], | ||
| 1466 | ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]); | ||
| 1467 | VM_EVENT(kvm, 3, "GET: guest KIMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1468 | ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0], | ||
| 1469 | ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]); | ||
| 1470 | VM_EVENT(kvm, 3, "GET: guest KLMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1471 | ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0], | ||
| 1472 | ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]); | ||
| 1473 | VM_EVENT(kvm, 3, "GET: guest PCKMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1474 | ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0], | ||
| 1475 | ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]); | ||
| 1476 | VM_EVENT(kvm, 3, "GET: guest KMCTR subfunc 0x%16.16lx.%16.16lx", | ||
| 1477 | ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0], | ||
| 1478 | ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]); | ||
| 1479 | VM_EVENT(kvm, 3, "GET: guest KMF subfunc 0x%16.16lx.%16.16lx", | ||
| 1480 | ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0], | ||
| 1481 | ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]); | ||
| 1482 | VM_EVENT(kvm, 3, "GET: guest KMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1483 | ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0], | ||
| 1484 | ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]); | ||
| 1485 | VM_EVENT(kvm, 3, "GET: guest PCC subfunc 0x%16.16lx.%16.16lx", | ||
| 1486 | ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0], | ||
| 1487 | ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]); | ||
| 1488 | VM_EVENT(kvm, 3, "GET: guest PPNO subfunc 0x%16.16lx.%16.16lx", | ||
| 1489 | ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0], | ||
| 1490 | ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]); | ||
| 1491 | VM_EVENT(kvm, 3, "GET: guest KMA subfunc 0x%16.16lx.%16.16lx", | ||
| 1492 | ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0], | ||
| 1493 | ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]); | ||
| 1494 | |||
| 1405 | return 0; | 1495 | return 0; |
| 1406 | } | 1496 | } |
| 1407 | 1497 | ||
| @@ -1411,6 +1501,52 @@ static int kvm_s390_get_machine_subfunc(struct kvm *kvm, | |||
| 1411 | if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc, | 1501 | if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc, |
| 1412 | sizeof(struct kvm_s390_vm_cpu_subfunc))) | 1502 | sizeof(struct kvm_s390_vm_cpu_subfunc))) |
| 1413 | return -EFAULT; | 1503 | return -EFAULT; |
| 1504 | |||
| 1505 | VM_EVENT(kvm, 3, "GET: host PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", | ||
| 1506 | ((unsigned long *) &kvm_s390_available_subfunc.plo)[0], | ||
| 1507 | ((unsigned long *) &kvm_s390_available_subfunc.plo)[1], | ||
| 1508 | ((unsigned long *) &kvm_s390_available_subfunc.plo)[2], | ||
| 1509 | ((unsigned long *) &kvm_s390_available_subfunc.plo)[3]); | ||
| 1510 | VM_EVENT(kvm, 3, "GET: host PTFF subfunc 0x%16.16lx.%16.16lx", | ||
| 1511 | ((unsigned long *) &kvm_s390_available_subfunc.ptff)[0], | ||
| 1512 | ((unsigned long *) &kvm_s390_available_subfunc.ptff)[1]); | ||
| 1513 | VM_EVENT(kvm, 3, "GET: host KMAC subfunc 0x%16.16lx.%16.16lx", | ||
| 1514 | ((unsigned long *) &kvm_s390_available_subfunc.kmac)[0], | ||
| 1515 | ((unsigned long *) &kvm_s390_available_subfunc.kmac)[1]); | ||
| 1516 | VM_EVENT(kvm, 3, "GET: host KMC subfunc 0x%16.16lx.%16.16lx", | ||
| 1517 | ((unsigned long *) &kvm_s390_available_subfunc.kmc)[0], | ||
| 1518 | ((unsigned long *) &kvm_s390_available_subfunc.kmc)[1]); | ||
| 1519 | VM_EVENT(kvm, 3, "GET: host KM subfunc 0x%16.16lx.%16.16lx", | ||
| 1520 | ((unsigned long *) &kvm_s390_available_subfunc.km)[0], | ||
| 1521 | ((unsigned long *) &kvm_s390_available_subfunc.km)[1]); | ||
| 1522 | VM_EVENT(kvm, 3, "GET: host KIMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1523 | ((unsigned long *) &kvm_s390_available_subfunc.kimd)[0], | ||
| 1524 | ((unsigned long *) &kvm_s390_available_subfunc.kimd)[1]); | ||
| 1525 | VM_EVENT(kvm, 3, "GET: host KLMD subfunc 0x%16.16lx.%16.16lx", | ||
| 1526 | ((unsigned long *) &kvm_s390_available_subfunc.klmd)[0], | ||
| 1527 | ((unsigned long *) &kvm_s390_available_subfunc.klmd)[1]); | ||
| 1528 | VM_EVENT(kvm, 3, "GET: host PCKMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1529 | ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[0], | ||
| 1530 | ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[1]); | ||
| 1531 | VM_EVENT(kvm, 3, "GET: host KMCTR subfunc 0x%16.16lx.%16.16lx", | ||
| 1532 | ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[0], | ||
| 1533 | ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[1]); | ||
| 1534 | VM_EVENT(kvm, 3, "GET: host KMF subfunc 0x%16.16lx.%16.16lx", | ||
| 1535 | ((unsigned long *) &kvm_s390_available_subfunc.kmf)[0], | ||
| 1536 | ((unsigned long *) &kvm_s390_available_subfunc.kmf)[1]); | ||
| 1537 | VM_EVENT(kvm, 3, "GET: host KMO subfunc 0x%16.16lx.%16.16lx", | ||
| 1538 | ((unsigned long *) &kvm_s390_available_subfunc.kmo)[0], | ||
| 1539 | ((unsigned long *) &kvm_s390_available_subfunc.kmo)[1]); | ||
| 1540 | VM_EVENT(kvm, 3, "GET: host PCC subfunc 0x%16.16lx.%16.16lx", | ||
| 1541 | ((unsigned long *) &kvm_s390_available_subfunc.pcc)[0], | ||
| 1542 | ((unsigned long *) &kvm_s390_available_subfunc.pcc)[1]); | ||
| 1543 | VM_EVENT(kvm, 3, "GET: host PPNO subfunc 0x%16.16lx.%16.16lx", | ||
| 1544 | ((unsigned long *) &kvm_s390_available_subfunc.ppno)[0], | ||
| 1545 | ((unsigned long *) &kvm_s390_available_subfunc.ppno)[1]); | ||
| 1546 | VM_EVENT(kvm, 3, "GET: host KMA subfunc 0x%16.16lx.%16.16lx", | ||
| 1547 | ((unsigned long *) &kvm_s390_available_subfunc.kma)[0], | ||
| 1548 | ((unsigned long *) &kvm_s390_available_subfunc.kma)[1]); | ||
| 1549 | |||
| 1414 | return 0; | 1550 | return 0; |
| 1415 | } | 1551 | } |
| 1416 | 1552 | ||
