mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	s390/sclp: unify basic sclp access by exposing "struct sclp"
Let's unify basic access to sclp fields by storing the data in an external struct in asm/sclp.h. The values can now directly be accessed by other components, so there is no need for most accessor functions and external variables anymore. The mtid, mtid_max and facility part will be cleaned up separately. Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
		
							parent
							
								
									9747bc47b3
								
							
						
					
					
						commit
						37c5f6c86c
					
				
					 14 changed files with 79 additions and 143 deletions
				
			
		|  | @ -128,14 +128,14 @@ static struct hypfs_dbfs_file hypfs_sprp_file = { | |||
| 
 | ||||
| int hypfs_sprp_init(void) | ||||
| { | ||||
| 	if (!sclp_has_sprp()) | ||||
| 	if (!sclp.has_sprp) | ||||
| 		return 0; | ||||
| 	return hypfs_dbfs_create_file(&hypfs_sprp_file); | ||||
| } | ||||
| 
 | ||||
| void hypfs_sprp_exit(void) | ||||
| { | ||||
| 	if (!sclp_has_sprp()) | ||||
| 	if (!sclp.has_sprp) | ||||
| 		return; | ||||
| 	hypfs_dbfs_remove_file(&hypfs_sprp_file); | ||||
| } | ||||
|  |  | |||
|  | @ -46,33 +46,40 @@ struct sclp_cpu_info { | |||
| 	struct sclp_cpu_entry cpu[MAX_CPU_ADDRESS + 1]; | ||||
| }; | ||||
| 
 | ||||
| struct sclp_info { | ||||
| 	unsigned char has_linemode : 1; | ||||
| 	unsigned char has_vt220 : 1; | ||||
| 	unsigned char has_siif : 1; | ||||
| 	unsigned char has_sigpif : 1; | ||||
| 	unsigned char has_cpu_type : 1; | ||||
| 	unsigned char has_sprp : 1; | ||||
| 	unsigned int ibc; | ||||
| 	unsigned int mtid; | ||||
| 	unsigned int mtid_cp; | ||||
| 	unsigned int mtid_prev; | ||||
| 	unsigned long long rzm; | ||||
| 	unsigned long long rnmax; | ||||
| 	unsigned long long hamax; | ||||
| 	unsigned int max_cpu; | ||||
| 	unsigned long hsa_size; | ||||
| }; | ||||
| extern struct sclp_info sclp; | ||||
| 
 | ||||
| int sclp_get_cpu_info(struct sclp_cpu_info *info); | ||||
| int sclp_cpu_configure(u8 cpu); | ||||
| int sclp_cpu_deconfigure(u8 cpu); | ||||
| unsigned long long sclp_get_rnmax(void); | ||||
| unsigned long long sclp_get_rzm(void); | ||||
| unsigned int sclp_get_max_cpu(void); | ||||
| unsigned int sclp_get_mtid(u8 cpu_type); | ||||
| unsigned int sclp_get_mtid_max(void); | ||||
| unsigned int sclp_get_mtid_prev(void); | ||||
| int sclp_sdias_blk_count(void); | ||||
| int sclp_sdias_copy(void *dest, int blk_num, int nr_blks); | ||||
| int sclp_chp_configure(struct chp_id chpid); | ||||
| int sclp_chp_deconfigure(struct chp_id chpid); | ||||
| int sclp_chp_read_info(struct sclp_chp_info *info); | ||||
| void sclp_get_ipl_info(struct sclp_ipl_info *info); | ||||
| bool __init sclp_has_linemode(void); | ||||
| bool __init sclp_has_vt220(void); | ||||
| bool sclp_has_sprp(void); | ||||
| int sclp_pci_configure(u32 fid); | ||||
| int sclp_pci_deconfigure(u32 fid); | ||||
| int memcpy_hsa(void *dest, unsigned long src, size_t count, int mode); | ||||
| unsigned long sclp_get_hsa_size(void); | ||||
| void sclp_early_detect(void); | ||||
| int sclp_has_siif(void); | ||||
| int sclp_has_sigpif(void); | ||||
| unsigned int sclp_get_ibc(void); | ||||
| 
 | ||||
| long _sclp_print_early(const char *); | ||||
| 
 | ||||
| #endif /* _ASM_S390_SCLP_H */ | ||||
|  |  | |||
|  | @ -122,7 +122,7 @@ static ssize_t copy_oldmem_page_zfcpdump(char *buf, size_t csize, | |||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| 	if (src < sclp_get_hsa_size()) { | ||||
| 	if (src < sclp.hsa_size) { | ||||
| 		rc = memcpy_hsa(buf, src, csize, userbuf); | ||||
| 	} else { | ||||
| 		if (userbuf) | ||||
|  | @ -215,7 +215,7 @@ static int remap_oldmem_pfn_range_zfcpdump(struct vm_area_struct *vma, | |||
| 					   unsigned long pfn, | ||||
| 					   unsigned long size, pgprot_t prot) | ||||
| { | ||||
| 	unsigned long hsa_end = sclp_get_hsa_size(); | ||||
| 	unsigned long hsa_end = sclp.hsa_size; | ||||
| 	unsigned long size_hsa; | ||||
| 
 | ||||
| 	if (pfn < hsa_end >> PAGE_SHIFT) { | ||||
|  | @ -258,7 +258,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count) | |||
| 				return rc; | ||||
| 		} | ||||
| 	} else { | ||||
| 		unsigned long hsa_end = sclp_get_hsa_size(); | ||||
| 		unsigned long hsa_end = sclp.hsa_size; | ||||
| 		if ((unsigned long) src < hsa_end) { | ||||
| 			copied = min(count, hsa_end - (unsigned long) src); | ||||
| 			rc = memcpy_hsa(dest, (unsigned long) src, copied, 0); | ||||
|  | @ -609,7 +609,7 @@ int elfcorehdr_alloc(unsigned long long *addr, unsigned long long *size) | |||
| 	if (elfcorehdr_addr != ELFCORE_ADDR_MAX) | ||||
| 		return 0; | ||||
| 	/* If we cannot get HSA size for zfcpdump return error */ | ||||
| 	if (ipl_info.type == IPL_TYPE_FCP_DUMP && !sclp_get_hsa_size()) | ||||
| 	if (ipl_info.type == IPL_TYPE_FCP_DUMP && !sclp.hsa_size) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	/* For kdump, exclude previous crashkernel memory */ | ||||
|  |  | |||
|  | @ -128,9 +128,9 @@ __setup("condev=", condev_setup); | |||
| static void __init set_preferred_console(void) | ||||
| { | ||||
| 	if (MACHINE_IS_KVM) { | ||||
| 		if (sclp_has_vt220()) | ||||
| 		if (sclp.has_vt220) | ||||
| 			add_preferred_console("ttyS", 1, NULL); | ||||
| 		else if (sclp_has_linemode()) | ||||
| 		else if (sclp.has_linemode) | ||||
| 			add_preferred_console("ttyS", 0, NULL); | ||||
| 		else | ||||
| 			add_preferred_console("hvc", 0, NULL); | ||||
|  | @ -510,8 +510,8 @@ static void reserve_memory_end(void) | |||
| { | ||||
| #ifdef CONFIG_CRASH_DUMP | ||||
| 	if (ipl_info.type == IPL_TYPE_FCP_DUMP && | ||||
| 	    !OLDMEM_BASE && sclp_get_hsa_size()) { | ||||
| 		memory_end = sclp_get_hsa_size(); | ||||
| 	    !OLDMEM_BASE && sclp.hsa_size) { | ||||
| 		memory_end = sclp.hsa_size; | ||||
| 		memory_end &= PAGE_MASK; | ||||
| 		memory_end_set = 1; | ||||
| 	} | ||||
|  | @ -576,7 +576,7 @@ static void __init reserve_crashkernel(void) | |||
| 		crash_base = low; | ||||
| 	} else { | ||||
| 		/* Find suitable area in free memory */ | ||||
| 		low = max_t(unsigned long, crash_size, sclp_get_hsa_size()); | ||||
| 		low = max_t(unsigned long, crash_size, sclp.hsa_size); | ||||
| 		high = crash_base ? crash_base + crash_size : ULONG_MAX; | ||||
| 
 | ||||
| 		if (crash_base && crash_base < low) { | ||||
|  |  | |||
|  | @ -601,7 +601,7 @@ static void __init smp_store_cpu_states(struct sclp_cpu_info *info) | |||
| 		/* No previous system present, normal boot. */ | ||||
| 		return; | ||||
| 	/* Set multi-threading state to the previous system. */ | ||||
| 	pcpu_set_smt(sclp_get_mtid_prev()); | ||||
| 	pcpu_set_smt(sclp.mtid_prev); | ||||
| 	/* Collect CPU states. */ | ||||
| 	cpu = 0; | ||||
| 	for (i = 0; i < info->configured; i++) { | ||||
|  | @ -883,7 +883,7 @@ void __init smp_fill_possible_mask(void) | |||
| 	unsigned int possible, sclp_max, cpu; | ||||
| 
 | ||||
| 	sclp_max = min(smp_max_threads, sclp_get_mtid_max() + 1); | ||||
| 	sclp_max = sclp_get_max_cpu() * sclp_max ?: nr_cpu_ids; | ||||
| 	sclp_max = sclp.max_cpu * sclp_max ?: nr_cpu_ids; | ||||
| 	possible = setup_possible_cpus ?: nr_cpu_ids; | ||||
| 	possible = min(possible, sclp_max); | ||||
| 	for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++) | ||||
|  |  | |||
|  | @ -799,7 +799,7 @@ int kvm_s390_ext_call_pending(struct kvm_vcpu *vcpu) | |||
| 	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; | ||||
| 	uint8_t sigp_ctrl = vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sigp_ctrl; | ||||
| 
 | ||||
| 	if (!sclp_has_sigpif()) | ||||
| 	if (!sclp.has_sigpif) | ||||
| 		return test_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs); | ||||
| 
 | ||||
| 	return (sigp_ctrl & SIGP_CTRL_C) && | ||||
|  | @ -1058,7 +1058,7 @@ static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) | |||
| 	    kvm_get_vcpu(vcpu->kvm, src_id) == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	if (sclp_has_sigpif()) | ||||
| 	if (sclp.has_sigpif) | ||||
| 		return __inject_extcall_sigpif(vcpu, src_id); | ||||
| 
 | ||||
| 	if (!test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs)) | ||||
|  |  | |||
|  | @ -604,7 +604,7 @@ static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr) | |||
| 		goto out; | ||||
| 	} | ||||
| 	get_cpu_id((struct cpuid *) &mach->cpuid); | ||||
| 	mach->ibc = sclp_get_ibc(); | ||||
| 	mach->ibc = sclp.ibc; | ||||
| 	memcpy(&mach->fac_mask, kvm->arch.model.fac->mask, | ||||
| 	       S390_ARCH_FAC_LIST_SIZE_BYTE); | ||||
| 	memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list, | ||||
|  | @ -1068,7 +1068,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) | |||
| 	       S390_ARCH_FAC_LIST_SIZE_BYTE); | ||||
| 
 | ||||
| 	kvm_s390_get_cpu_id(&kvm->arch.model.cpu_id); | ||||
| 	kvm->arch.model.ibc = sclp_get_ibc() & 0x0fff; | ||||
| 	kvm->arch.model.ibc = sclp.ibc & 0x0fff; | ||||
| 
 | ||||
| 	if (kvm_s390_crypto_init(kvm) < 0) | ||||
| 		goto out_err; | ||||
|  | @ -1321,9 +1321,9 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | |||
| 
 | ||||
| 	vcpu->arch.sie_block->ecb2  = 8; | ||||
| 	vcpu->arch.sie_block->eca   = 0xC1002000U; | ||||
| 	if (sclp_has_siif()) | ||||
| 	if (sclp.has_siif) | ||||
| 		vcpu->arch.sie_block->eca |= 1; | ||||
| 	if (sclp_has_sigpif()) | ||||
| 	if (sclp.has_sigpif) | ||||
| 		vcpu->arch.sie_block->eca |= 0x10000000U; | ||||
| 	if (test_kvm_facility(vcpu->kvm, 129)) { | ||||
| 		vcpu->arch.sie_block->eca |= 0x00020000; | ||||
|  |  | |||
|  | @ -213,7 +213,7 @@ unsigned long memory_block_size_bytes(void) | |||
| 	 * Make sure the memory block size is always greater | ||||
| 	 * or equal than the memory increment size. | ||||
| 	 */ | ||||
| 	return max_t(unsigned long, MIN_MEMORY_BLOCK_SIZE, sclp_get_rzm()); | ||||
| 	return max_t(unsigned long, MIN_MEMORY_BLOCK_SIZE, sclp.rzm); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_MEMORY_HOTREMOVE | ||||
|  |  | |||
|  | @ -31,8 +31,8 @@ void __init detect_memory_memblock(void) | |||
| 	unsigned long addr, size; | ||||
| 	int type; | ||||
| 
 | ||||
| 	rzm = sclp_get_rzm(); | ||||
| 	rnmax = sclp_get_rnmax(); | ||||
| 	rzm = sclp.rzm; | ||||
| 	rnmax = sclp.rnmax; | ||||
| 	memsize = rzm * rnmax; | ||||
| 	if (!rzm) | ||||
| 		rzm = 1ULL << 17; | ||||
|  |  | |||
|  | @ -191,9 +191,6 @@ void sclp_sdias_exit(void); | |||
| extern int sclp_console_pages; | ||||
| extern int sclp_console_drop; | ||||
| extern unsigned long sclp_console_full; | ||||
| extern u8 sclp_fac84; | ||||
| extern unsigned long long sclp_rzm; | ||||
| extern unsigned long long sclp_rnmax; | ||||
| 
 | ||||
| /* useful inlines */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -101,7 +101,7 @@ static void sclp_fill_cpu_info(struct sclp_cpu_info *info, | |||
| 	info->configured = sccb->nr_configured; | ||||
| 	info->standby = sccb->nr_standby; | ||||
| 	info->combined = sccb->nr_configured + sccb->nr_standby; | ||||
| 	info->has_cpu_type = sclp_fac84 & 0x1; | ||||
| 	info->has_cpu_type = sclp.has_cpu_type; | ||||
| 	memcpy(&info->cpu, page + sccb->offset_configured, | ||||
| 	       info->combined * sizeof(struct sclp_cpu_entry)); | ||||
| } | ||||
|  | @ -202,14 +202,14 @@ struct assign_storage_sccb { | |||
| 
 | ||||
| int arch_get_memory_phys_device(unsigned long start_pfn) | ||||
| { | ||||
| 	if (!sclp_rzm) | ||||
| 	if (!sclp.rzm) | ||||
| 		return 0; | ||||
| 	return PFN_PHYS(start_pfn) >> ilog2(sclp_rzm); | ||||
| 	return PFN_PHYS(start_pfn) >> ilog2(sclp.rzm); | ||||
| } | ||||
| 
 | ||||
| static unsigned long long rn2addr(u16 rn) | ||||
| { | ||||
| 	return (unsigned long long) (rn - 1) * sclp_rzm; | ||||
| 	return (unsigned long long) (rn - 1) * sclp.rzm; | ||||
| } | ||||
| 
 | ||||
| static int do_assign_storage(sclp_cmdw_t cmd, u16 rn) | ||||
|  | @ -250,7 +250,7 @@ static int sclp_assign_storage(u16 rn) | |||
| 	if (rc) | ||||
| 		return rc; | ||||
| 	start = rn2addr(rn); | ||||
| 	storage_key_init_range(start, start + sclp_rzm); | ||||
| 	storage_key_init_range(start, start + sclp.rzm); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | @ -309,7 +309,7 @@ static int sclp_mem_change_state(unsigned long start, unsigned long size, | |||
| 		istart = rn2addr(incr->rn); | ||||
| 		if (start + size - 1 < istart) | ||||
| 			break; | ||||
| 		if (start > istart + sclp_rzm - 1) | ||||
| 		if (start > istart + sclp.rzm - 1) | ||||
| 			continue; | ||||
| 		if (online) | ||||
| 			rc |= sclp_assign_storage(incr->rn); | ||||
|  | @ -330,7 +330,7 @@ static bool contains_standby_increment(unsigned long start, unsigned long end) | |||
| 		istart = rn2addr(incr->rn); | ||||
| 		if (end - 1 < istart) | ||||
| 			continue; | ||||
| 		if (start > istart + sclp_rzm - 1) | ||||
| 		if (start > istart + sclp.rzm - 1) | ||||
| 			continue; | ||||
| 		if (incr->standby) | ||||
| 			return true; | ||||
|  | @ -415,7 +415,7 @@ static void __init add_memory_merged(u16 rn) | |||
| 	if (!first_rn) | ||||
| 		goto skip_add; | ||||
| 	start = rn2addr(first_rn); | ||||
| 	size = (unsigned long long) num * sclp_rzm; | ||||
| 	size = (unsigned long long) num * sclp.rzm; | ||||
| 	if (start >= VMEM_MAX_PHYS) | ||||
| 		goto skip_add; | ||||
| 	if (start + size > VMEM_MAX_PHYS) | ||||
|  | @ -465,7 +465,7 @@ static void __init insert_increment(u16 rn, int standby, int assigned) | |||
| 	} | ||||
| 	if (!assigned) | ||||
| 		new_incr->rn = last_rn + 1; | ||||
| 	if (new_incr->rn > sclp_rnmax) { | ||||
| 	if (new_incr->rn > sclp.rnmax) { | ||||
| 		kfree(new_incr); | ||||
| 		return; | ||||
| 	} | ||||
|  | @ -550,7 +550,7 @@ static int __init sclp_detect_standby_memory(void) | |||
| 	} | ||||
| 	if (rc || list_empty(&sclp_mem_list)) | ||||
| 		goto out; | ||||
| 	for (i = 1; i <= sclp_rnmax - assigned; i++) | ||||
| 	for (i = 1; i <= sclp.rnmax - assigned; i++) | ||||
| 		insert_increment(0, 1, 0); | ||||
| 	rc = register_memory_notifier(&sclp_mem_nb); | ||||
| 	if (rc) | ||||
|  | @ -753,8 +753,3 @@ out: | |||
| 	free_page((unsigned long) sccb); | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| bool sclp_has_sprp(void) | ||||
| { | ||||
| 	return !!(sclp_fac84 & 0x2); | ||||
| } | ||||
|  |  | |||
|  | @ -48,23 +48,12 @@ struct read_info_sccb { | |||
| } __packed __aligned(PAGE_SIZE); | ||||
| 
 | ||||
| static char sccb_early[PAGE_SIZE] __aligned(PAGE_SIZE) __initdata; | ||||
| static unsigned int sclp_con_has_vt220 __initdata; | ||||
| static unsigned int sclp_con_has_linemode __initdata; | ||||
| static unsigned long sclp_hsa_size; | ||||
| static unsigned int sclp_max_cpu; | ||||
| static struct sclp_ipl_info sclp_ipl_info; | ||||
| static unsigned char sclp_siif; | ||||
| static unsigned char sclp_sigpif; | ||||
| static u32 sclp_ibc; | ||||
| static unsigned int sclp_mtid; | ||||
| static unsigned int sclp_mtid_cp; | ||||
| static unsigned int sclp_mtid_max; | ||||
| static unsigned int sclp_mtid_prev; | ||||
| 
 | ||||
| struct sclp_info sclp; | ||||
| EXPORT_SYMBOL(sclp); | ||||
| u64 sclp_facilities; | ||||
| u8 sclp_fac84; | ||||
| unsigned long long sclp_rzm; | ||||
| unsigned long long sclp_rnmax; | ||||
| 
 | ||||
| static int __init sclp_cmd_sync_early(sclp_cmdw_t cmd, void *sccb) | ||||
| { | ||||
|  | @ -118,21 +107,22 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb) | |||
| 		return; | ||||
| 
 | ||||
| 	sclp_facilities = sccb->facilities; | ||||
| 	sclp_fac84 = sccb->fac84; | ||||
| 	sclp.has_sprp = !!(sccb->fac84 & 0x02); | ||||
| 	sclp.has_cpu_type = !!(sccb->fac84 & 0x01); | ||||
| 	if (sccb->fac85 & 0x02) | ||||
| 		S390_lowcore.machine_flags |= MACHINE_FLAG_ESOP; | ||||
| 	sclp_rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2; | ||||
| 	sclp_rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2; | ||||
| 	sclp_rzm <<= 20; | ||||
| 	sclp_ibc = sccb->ibc; | ||||
| 	sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2; | ||||
| 	sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2; | ||||
| 	sclp.rzm <<= 20; | ||||
| 	sclp.ibc = sccb->ibc; | ||||
| 
 | ||||
| 	if (!sccb->hcpua) { | ||||
| 		if (MACHINE_IS_VM) | ||||
| 			sclp_max_cpu = 64; | ||||
| 			sclp.max_cpu = 64; | ||||
| 		else | ||||
| 			sclp_max_cpu = sccb->ncpurl; | ||||
| 			sclp.max_cpu = sccb->ncpurl; | ||||
| 	} else { | ||||
| 		sclp_max_cpu = sccb->hcpua + 1; | ||||
| 		sclp.max_cpu = sccb->hcpua + 1; | ||||
| 	} | ||||
| 
 | ||||
| 	boot_cpu_address = stap(); | ||||
|  | @ -140,8 +130,8 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb) | |||
| 	for (cpu = 0; cpu < sccb->ncpurl; cpue++, cpu++) { | ||||
| 		if (boot_cpu_address != cpue->core_id) | ||||
| 			continue; | ||||
| 		sclp_siif = cpue->siif; | ||||
| 		sclp_sigpif = cpue->sigpif; | ||||
| 		sclp.has_siif = cpue->siif; | ||||
| 		sclp.has_sigpif = cpue->sigpif; | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -151,58 +141,15 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb) | |||
| 		sclp_ipl_info.has_dump = 1; | ||||
| 	memcpy(&sclp_ipl_info.loadparm, &sccb->loadparm, LOADPARM_LEN); | ||||
| 
 | ||||
| 	sclp_mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0; | ||||
| 	sclp_mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0; | ||||
| 	sclp_mtid_max = max(sclp_mtid, sclp_mtid_cp); | ||||
| 	sclp_mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0; | ||||
| 	sclp.mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0; | ||||
| 	sclp.mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0; | ||||
| 	sclp_mtid_max = max(sclp.mtid, sclp.mtid_cp); | ||||
| 	sclp.mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0; | ||||
| } | ||||
| 
 | ||||
| bool __init sclp_has_linemode(void) | ||||
| { | ||||
| 	return !!sclp_con_has_linemode; | ||||
| } | ||||
| 
 | ||||
| bool __init sclp_has_vt220(void) | ||||
| { | ||||
| 	return !!sclp_con_has_vt220; | ||||
| } | ||||
| 
 | ||||
| unsigned long long sclp_get_rnmax(void) | ||||
| { | ||||
| 	return sclp_rnmax; | ||||
| } | ||||
| 
 | ||||
| unsigned long long sclp_get_rzm(void) | ||||
| { | ||||
| 	return sclp_rzm; | ||||
| } | ||||
| 
 | ||||
| unsigned int sclp_get_max_cpu(void) | ||||
| { | ||||
| 	return sclp_max_cpu; | ||||
| } | ||||
| 
 | ||||
| int sclp_has_siif(void) | ||||
| { | ||||
| 	return sclp_siif; | ||||
| } | ||||
| EXPORT_SYMBOL(sclp_has_siif); | ||||
| 
 | ||||
| int sclp_has_sigpif(void) | ||||
| { | ||||
| 	return sclp_sigpif; | ||||
| } | ||||
| EXPORT_SYMBOL(sclp_has_sigpif); | ||||
| 
 | ||||
| unsigned int sclp_get_ibc(void) | ||||
| { | ||||
| 	return sclp_ibc; | ||||
| } | ||||
| EXPORT_SYMBOL(sclp_get_ibc); | ||||
| 
 | ||||
| unsigned int sclp_get_mtid(u8 cpu_type) | ||||
| { | ||||
| 	return cpu_type ? sclp_mtid : sclp_mtid_cp; | ||||
| 	return cpu_type ? sclp.mtid : sclp.mtid_cp; | ||||
| } | ||||
| 
 | ||||
| unsigned int sclp_get_mtid_max(void) | ||||
|  | @ -210,11 +157,6 @@ unsigned int sclp_get_mtid_max(void) | |||
| 	return sclp_mtid_max; | ||||
| } | ||||
| 
 | ||||
| unsigned int sclp_get_mtid_prev(void) | ||||
| { | ||||
| 	return sclp_mtid_prev; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This function will be called after sclp_facilities_detect(), which gets | ||||
|  * called from early.c code. The sclp_facilities_detect() function retrieves | ||||
|  | @ -286,11 +228,6 @@ static long __init sclp_hsa_copy_wait(struct sccb_header *sccb) | |||
| 	return (((struct sdias_sccb *) sccb)->evbuf.blk_cnt - 1) * PAGE_SIZE; | ||||
| } | ||||
| 
 | ||||
| unsigned long sclp_get_hsa_size(void) | ||||
| { | ||||
| 	return sclp_hsa_size; | ||||
| } | ||||
| 
 | ||||
| static void __init sclp_hsa_size_detect(void *sccb) | ||||
| { | ||||
| 	long size; | ||||
|  | @ -313,7 +250,7 @@ static void __init sclp_hsa_size_detect(void *sccb) | |||
| 	if (size < 0) | ||||
| 		return; | ||||
| out: | ||||
| 	sclp_hsa_size = size; | ||||
| 	sclp.hsa_size = size; | ||||
| } | ||||
| 
 | ||||
| static unsigned int __init sclp_con_check_linemode(struct init_sccb *sccb) | ||||
|  | @ -331,10 +268,10 @@ static void __init sclp_console_detect(struct init_sccb *sccb) | |||
| 		return; | ||||
| 
 | ||||
| 	if (sccb->sclp_send_mask & EVTYP_VT220MSG_MASK) | ||||
| 		sclp_con_has_vt220 = 1; | ||||
| 		sclp.has_vt220 = 1; | ||||
| 
 | ||||
| 	if (sclp_con_check_linemode(sccb)) | ||||
| 		sclp_con_has_linemode = 1; | ||||
| 		sclp.has_linemode = 1; | ||||
| } | ||||
| 
 | ||||
| void __init sclp_early_detect(void) | ||||
|  |  | |||
|  | @ -330,9 +330,9 @@ static ssize_t zcore_read(struct file *file, char __user *buf, size_t count, | |||
| 	mem_offs = 0; | ||||
| 
 | ||||
| 	/* Copy from HSA data */ | ||||
| 	if (*ppos < sclp_get_hsa_size() + HEADER_SIZE) { | ||||
| 	if (*ppos < sclp.hsa_size + HEADER_SIZE) { | ||||
| 		size = min((count - hdr_count), | ||||
| 			   (size_t) (sclp_get_hsa_size() - mem_start)); | ||||
| 			   (size_t) (sclp.hsa_size - mem_start)); | ||||
| 		rc = memcpy_hsa_user(buf + hdr_count, mem_start, size); | ||||
| 		if (rc) | ||||
| 			goto fail; | ||||
|  | @ -483,7 +483,7 @@ static ssize_t zcore_hsa_read(struct file *filp, char __user *buf, | |||
| 	static char str[18]; | ||||
| 
 | ||||
| 	if (hsa_available) | ||||
| 		snprintf(str, sizeof(str), "%lx\n", sclp_get_hsa_size()); | ||||
| 		snprintf(str, sizeof(str), "%lx\n", sclp.hsa_size); | ||||
| 	else | ||||
| 		snprintf(str, sizeof(str), "0\n"); | ||||
| 	return simple_read_from_buffer(buf, count, ppos, str, strlen(str)); | ||||
|  | @ -558,7 +558,7 @@ static int __init sys_info_init(enum arch_id arch, unsigned long mem_end) | |||
| 
 | ||||
| static int __init check_sdias(void) | ||||
| { | ||||
| 	if (!sclp_get_hsa_size()) { | ||||
| 	if (!sclp.hsa_size) { | ||||
| 		TRACE("Could not determine HSA size\n"); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
|  | @ -619,7 +619,7 @@ static int __init zcore_reipl_init(void) | |||
| 	ipl_block = (void *) __get_free_page(GFP_KERNEL); | ||||
| 	if (!ipl_block) | ||||
| 		return -ENOMEM; | ||||
| 	if (ipib_info.ipib < sclp_get_hsa_size()) | ||||
| 	if (ipib_info.ipib < sclp.hsa_size) | ||||
| 		rc = memcpy_hsa_kernel(ipl_block, ipib_info.ipib, PAGE_SIZE); | ||||
| 	else | ||||
| 		rc = memcpy_real(ipl_block, (void *) ipib_info.ipib, PAGE_SIZE); | ||||
|  |  | |||
|  | @ -450,7 +450,7 @@ static int __init test_devices_support(unsigned long addr) | |||
| static int __init kvm_devices_init(void) | ||||
| { | ||||
| 	int rc; | ||||
| 	unsigned long total_memory_size = sclp_get_rzm() * sclp_get_rnmax(); | ||||
| 	unsigned long total_memory_size = sclp.rzm * sclp.rnmax; | ||||
| 
 | ||||
| 	if (!MACHINE_IS_KVM) | ||||
| 		return -ENODEV; | ||||
|  | @ -497,7 +497,7 @@ static __init int early_put_chars(u32 vtermno, const char *buf, int count) | |||
| 
 | ||||
| static int __init s390_virtio_console_init(void) | ||||
| { | ||||
| 	if (sclp_has_vt220() || sclp_has_linemode()) | ||||
| 	if (sclp.has_vt220 || sclp.has_linemode) | ||||
| 		return -ENODEV; | ||||
| 	return virtio_cons_early_init(early_put_chars); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 David Hildenbrand
						David Hildenbrand