mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	KVM: s390: small fixes and enhancements
- selftest improvements - yield improvements - cleanups -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJd0k9KAAoJEBF7vIC1phx8jecP/15y4vJABaNMCb/zzNYEncxr lJf8ZeW+257eiEhsmmju4eM8l9/3RzsJM9WXSj91MBRu+xlkt+cyla/TC+CEKMxW Z8yd3AkaIPTMDBY/n6QSqDusrUwfR01iM02mr/IKguG/HeCKgLksN03ZU00mc09q Ogo+Cl3AdNnIds+5vkIOQAc+CHM3SGjEfyZCqoTwjn46jsKNQeDrq3hHX9RMG4FF BxVcSx5rCFCYyb9eruCCK4OHrEEwdJ4l0udkblRjIl+T9Y8LgoXO1/KGIggVL5UJ +Smoc/soXMdkOAhefn/2fB1dBRNBaUpvB5xtAd4BHyRjPomw93sftScW06qfiZuo 0nBiDgTyilpi8dpojyu2vUpYj7NQXTI4ZoHOMTsXOhk6cqGqm4loLb4xdJ8FCoc9 04Yf1GCfbyEovoyLq1BkL1qD5ZUBecUfYWQGS1xf0+U6/hvn5lQOGeINNe/ho2Zl jU1lsFuGGyKs3G5qpk0Dz8UgbRqOYC58VlGQ1eOcNVksTf7qG+MZ3c6kall7CfXg MFcK/PuSxyTfrr5CApyK3Gpqu32aMV0rComd6Bv28DlsTRA9F1TJ5WQTO3HUhV9R iiqbMAx0s1xHZp6K/VsCvYRjdVyKU7/sQ6OxRmRTybjjKajKijQjMlE2f1Nr0liD PKsQjv2kTvrtMDzOhWFu =zHPF -----END PGP SIGNATURE----- Merge tag 'kvm-s390-next-5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD KVM: s390: small fixes and enhancements - selftest improvements - yield improvements - cleanups
This commit is contained in:
		
						commit
						fe289ebb65
					
				
					 5 changed files with 38 additions and 24 deletions
				
			
		|  | @ -392,6 +392,7 @@ struct kvm_vcpu_stat { | |||
| 	u64 diagnose_10; | ||||
| 	u64 diagnose_44; | ||||
| 	u64 diagnose_9c; | ||||
| 	u64 diagnose_9c_ignored; | ||||
| 	u64 diagnose_258; | ||||
| 	u64 diagnose_308; | ||||
| 	u64 diagnose_500; | ||||
|  |  | |||
|  | @ -158,14 +158,28 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu) | |||
| 
 | ||||
| 	tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4]; | ||||
| 	vcpu->stat.diagnose_9c++; | ||||
| 	VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d", tid); | ||||
| 
 | ||||
| 	/* yield to self */ | ||||
| 	if (tid == vcpu->vcpu_id) | ||||
| 		return 0; | ||||
| 		goto no_yield; | ||||
| 
 | ||||
| 	/* yield to invalid */ | ||||
| 	tcpu = kvm_get_vcpu_by_id(vcpu->kvm, tid); | ||||
| 	if (tcpu) | ||||
| 		kvm_vcpu_yield_to(tcpu); | ||||
| 	if (!tcpu) | ||||
| 		goto no_yield; | ||||
| 
 | ||||
| 	/* target already running */ | ||||
| 	if (READ_ONCE(tcpu->cpu) >= 0) | ||||
| 		goto no_yield; | ||||
| 
 | ||||
| 	if (kvm_vcpu_yield_to(tcpu) <= 0) | ||||
| 		goto no_yield; | ||||
| 
 | ||||
| 	VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: done", tid); | ||||
| 	return 0; | ||||
| no_yield: | ||||
| 	VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid); | ||||
| 	vcpu->stat.diagnose_9c_ignored++; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1477,8 +1477,7 @@ static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int __inject_sigp_restart(struct kvm_vcpu *vcpu, | ||||
| 				 struct kvm_s390_irq *irq) | ||||
| static int __inject_sigp_restart(struct kvm_vcpu *vcpu) | ||||
| { | ||||
| 	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; | ||||
| 
 | ||||
|  | @ -2007,7 +2006,7 @@ static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) | |||
| 		rc = __inject_sigp_stop(vcpu, irq); | ||||
| 		break; | ||||
| 	case KVM_S390_RESTART: | ||||
| 		rc = __inject_sigp_restart(vcpu, irq); | ||||
| 		rc = __inject_sigp_restart(vcpu); | ||||
| 		break; | ||||
| 	case KVM_S390_INT_CLOCK_COMP: | ||||
| 		rc = __inject_ckc(vcpu); | ||||
|  |  | |||
|  | @ -155,6 +155,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
| 	{ "instruction_diag_10", VCPU_STAT(diagnose_10) }, | ||||
| 	{ "instruction_diag_44", VCPU_STAT(diagnose_44) }, | ||||
| 	{ "instruction_diag_9c", VCPU_STAT(diagnose_9c) }, | ||||
| 	{ "diag_9c_ignored", VCPU_STAT(diagnose_9c_ignored) }, | ||||
| 	{ "instruction_diag_258", VCPU_STAT(diagnose_258) }, | ||||
| 	{ "instruction_diag_308", VCPU_STAT(diagnose_308) }, | ||||
| 	{ "instruction_diag_500", VCPU_STAT(diagnose_500) }, | ||||
|  | @ -453,16 +454,14 @@ static void kvm_s390_cpu_feat_init(void) | |||
| 
 | ||||
| int kvm_arch_init(void *opaque) | ||||
| { | ||||
| 	int rc; | ||||
| 	int rc = -ENOMEM; | ||||
| 
 | ||||
| 	kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long)); | ||||
| 	if (!kvm_s390_dbf) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) { | ||||
| 		rc = -ENOMEM; | ||||
| 		goto out_debug_unreg; | ||||
| 	} | ||||
| 	if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	kvm_s390_cpu_feat_init(); | ||||
| 
 | ||||
|  | @ -470,19 +469,17 @@ int kvm_arch_init(void *opaque) | |||
| 	rc = kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); | ||||
| 	if (rc) { | ||||
| 		pr_err("A FLIC registration call failed with rc=%d\n", rc); | ||||
| 		goto out_debug_unreg; | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	rc = kvm_s390_gib_init(GAL_ISC); | ||||
| 	if (rc) | ||||
| 		goto out_gib_destroy; | ||||
| 		goto out; | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| out_gib_destroy: | ||||
| 	kvm_s390_gib_destroy(); | ||||
| out_debug_unreg: | ||||
| 	debug_unregister(kvm_s390_dbf); | ||||
| out: | ||||
| 	kvm_arch_exit(); | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,12 +25,15 @@ | |||
| 
 | ||||
| static void guest_code(void) | ||||
| { | ||||
| 	register u64 stage asm("11") = 0; | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		GUEST_SYNC(0); | ||||
| 		asm volatile ("ahi %0,1" : : "r"(stage)); | ||||
| 	} | ||||
| 	/*
 | ||||
| 	 * We embed diag 501 here instead of doing a ucall to avoid that | ||||
| 	 * the compiler has messed with r11 at the time of the ucall. | ||||
| 	 */ | ||||
| 	asm volatile ( | ||||
| 		"0:	diag 0,0,0x501\n" | ||||
| 		"	ahi 11,1\n" | ||||
| 		"	j 0b\n" | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| #define REG_COMPARE(reg) \ | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Paolo Bonzini
						Paolo Bonzini