2323int __bootdata_preserved (prot_virt_guest );
2424#endif
2525
26+ /*
27+ * uv_info contains both host and guest information but it's currently only
28+ * expected to be used within modules if it's the KVM module or for
29+ * any PV guest module.
30+ *
31+ * The kernel itself will write these values once in uv_query_info()
32+ * and then make some of them readable via a sysfs interface.
33+ */
2634struct uv_info __bootdata_preserved (uv_info );
35+ EXPORT_SYMBOL (uv_info );
2736
2837#if IS_ENABLED (CONFIG_KVM )
2938int __bootdata_preserved (prot_virt_host );
3039EXPORT_SYMBOL (prot_virt_host );
31- EXPORT_SYMBOL (uv_info );
3240
3341static int __init uv_init (phys_addr_t stor_base , unsigned long stor_len )
3442{
@@ -460,13 +468,13 @@ EXPORT_SYMBOL_GPL(arch_make_page_accessible);
460468
461469#if defined(CONFIG_PROTECTED_VIRTUALIZATION_GUEST ) || IS_ENABLED (CONFIG_KVM )
462470static ssize_t uv_query_facilities (struct kobject * kobj ,
463- struct kobj_attribute * attr , char * page )
471+ struct kobj_attribute * attr , char * buf )
464472{
465- return scnprintf ( page , PAGE_SIZE , "%lx\n%lx\n%lx\n%lx\n" ,
466- uv_info .inst_calls_list [0 ],
467- uv_info .inst_calls_list [1 ],
468- uv_info .inst_calls_list [2 ],
469- uv_info .inst_calls_list [3 ]);
473+ return sysfs_emit ( buf , "%lx\n%lx\n%lx\n%lx\n" ,
474+ uv_info .inst_calls_list [0 ],
475+ uv_info .inst_calls_list [1 ],
476+ uv_info .inst_calls_list [2 ],
477+ uv_info .inst_calls_list [3 ]);
470478}
471479
472480static struct kobj_attribute uv_query_facilities_attr =
@@ -491,30 +499,27 @@ static struct kobj_attribute uv_query_supp_se_hdr_pcf_attr =
491499 __ATTR (supp_se_hdr_pcf , 0444 , uv_query_supp_se_hdr_pcf , NULL );
492500
493501static ssize_t uv_query_dump_cpu_len (struct kobject * kobj ,
494- struct kobj_attribute * attr , char * page )
502+ struct kobj_attribute * attr , char * buf )
495503{
496- return scnprintf (page , PAGE_SIZE , "%lx\n" ,
497- uv_info .guest_cpu_stor_len );
504+ return sysfs_emit (buf , "%lx\n" , uv_info .guest_cpu_stor_len );
498505}
499506
500507static struct kobj_attribute uv_query_dump_cpu_len_attr =
501508 __ATTR (uv_query_dump_cpu_len , 0444 , uv_query_dump_cpu_len , NULL );
502509
503510static ssize_t uv_query_dump_storage_state_len (struct kobject * kobj ,
504- struct kobj_attribute * attr , char * page )
511+ struct kobj_attribute * attr , char * buf )
505512{
506- return scnprintf (page , PAGE_SIZE , "%lx\n" ,
507- uv_info .conf_dump_storage_state_len );
513+ return sysfs_emit (buf , "%lx\n" , uv_info .conf_dump_storage_state_len );
508514}
509515
510516static struct kobj_attribute uv_query_dump_storage_state_len_attr =
511517 __ATTR (dump_storage_state_len , 0444 , uv_query_dump_storage_state_len , NULL );
512518
513519static ssize_t uv_query_dump_finalize_len (struct kobject * kobj ,
514- struct kobj_attribute * attr , char * page )
520+ struct kobj_attribute * attr , char * buf )
515521{
516- return scnprintf (page , PAGE_SIZE , "%lx\n" ,
517- uv_info .conf_dump_finalize_len );
522+ return sysfs_emit (buf , "%lx\n" , uv_info .conf_dump_finalize_len );
518523}
519524
520525static struct kobj_attribute uv_query_dump_finalize_len_attr =
@@ -530,53 +535,86 @@ static struct kobj_attribute uv_query_feature_indications_attr =
530535 __ATTR (feature_indications , 0444 , uv_query_feature_indications , NULL );
531536
532537static ssize_t uv_query_max_guest_cpus (struct kobject * kobj ,
533- struct kobj_attribute * attr , char * page )
538+ struct kobj_attribute * attr , char * buf )
534539{
535- return scnprintf (page , PAGE_SIZE , "%d\n" ,
536- uv_info .max_guest_cpu_id + 1 );
540+ return sysfs_emit (buf , "%d\n" , uv_info .max_guest_cpu_id + 1 );
537541}
538542
539543static struct kobj_attribute uv_query_max_guest_cpus_attr =
540544 __ATTR (max_cpus , 0444 , uv_query_max_guest_cpus , NULL );
541545
542546static ssize_t uv_query_max_guest_vms (struct kobject * kobj ,
543- struct kobj_attribute * attr , char * page )
547+ struct kobj_attribute * attr , char * buf )
544548{
545- return scnprintf (page , PAGE_SIZE , "%d\n" ,
546- uv_info .max_num_sec_conf );
549+ return sysfs_emit (buf , "%d\n" , uv_info .max_num_sec_conf );
547550}
548551
549552static struct kobj_attribute uv_query_max_guest_vms_attr =
550553 __ATTR (max_guests , 0444 , uv_query_max_guest_vms , NULL );
551554
552555static ssize_t uv_query_max_guest_addr (struct kobject * kobj ,
553- struct kobj_attribute * attr , char * page )
556+ struct kobj_attribute * attr , char * buf )
554557{
555- return scnprintf (page , PAGE_SIZE , "%lx\n" ,
556- uv_info .max_sec_stor_addr );
558+ return sysfs_emit (buf , "%lx\n" , uv_info .max_sec_stor_addr );
557559}
558560
559561static struct kobj_attribute uv_query_max_guest_addr_attr =
560562 __ATTR (max_address , 0444 , uv_query_max_guest_addr , NULL );
561563
562564static ssize_t uv_query_supp_att_req_hdr_ver (struct kobject * kobj ,
563- struct kobj_attribute * attr , char * page )
565+ struct kobj_attribute * attr , char * buf )
564566{
565- return scnprintf ( page , PAGE_SIZE , "%lx\n" , uv_info .supp_att_req_hdr_ver );
567+ return sysfs_emit ( buf , "%lx\n" , uv_info .supp_att_req_hdr_ver );
566568}
567569
568570static struct kobj_attribute uv_query_supp_att_req_hdr_ver_attr =
569571 __ATTR (supp_att_req_hdr_ver , 0444 , uv_query_supp_att_req_hdr_ver , NULL );
570572
571573static ssize_t uv_query_supp_att_pflags (struct kobject * kobj ,
572- struct kobj_attribute * attr , char * page )
574+ struct kobj_attribute * attr , char * buf )
573575{
574- return scnprintf ( page , PAGE_SIZE , "%lx\n" , uv_info .supp_att_pflags );
576+ return sysfs_emit ( buf , "%lx\n" , uv_info .supp_att_pflags );
575577}
576578
577579static struct kobj_attribute uv_query_supp_att_pflags_attr =
578580 __ATTR (supp_att_pflags , 0444 , uv_query_supp_att_pflags , NULL );
579581
582+ static ssize_t uv_query_supp_add_secret_req_ver (struct kobject * kobj ,
583+ struct kobj_attribute * attr , char * buf )
584+ {
585+ return sysfs_emit (buf , "%lx\n" , uv_info .supp_add_secret_req_ver );
586+ }
587+
588+ static struct kobj_attribute uv_query_supp_add_secret_req_ver_attr =
589+ __ATTR (supp_add_secret_req_ver , 0444 , uv_query_supp_add_secret_req_ver , NULL );
590+
591+ static ssize_t uv_query_supp_add_secret_pcf (struct kobject * kobj ,
592+ struct kobj_attribute * attr , char * buf )
593+ {
594+ return sysfs_emit (buf , "%lx\n" , uv_info .supp_add_secret_pcf );
595+ }
596+
597+ static struct kobj_attribute uv_query_supp_add_secret_pcf_attr =
598+ __ATTR (supp_add_secret_pcf , 0444 , uv_query_supp_add_secret_pcf , NULL );
599+
600+ static ssize_t uv_query_supp_secret_types (struct kobject * kobj ,
601+ struct kobj_attribute * attr , char * buf )
602+ {
603+ return sysfs_emit (buf , "%lx\n" , uv_info .supp_secret_types );
604+ }
605+
606+ static struct kobj_attribute uv_query_supp_secret_types_attr =
607+ __ATTR (supp_secret_types , 0444 , uv_query_supp_secret_types , NULL );
608+
609+ static ssize_t uv_query_max_secrets (struct kobject * kobj ,
610+ struct kobj_attribute * attr , char * buf )
611+ {
612+ return sysfs_emit (buf , "%d\n" , uv_info .max_secrets );
613+ }
614+
615+ static struct kobj_attribute uv_query_max_secrets_attr =
616+ __ATTR (max_secrets , 0444 , uv_query_max_secrets , NULL );
617+
580618static struct attribute * uv_query_attrs [] = {
581619 & uv_query_facilities_attr .attr ,
582620 & uv_query_feature_indications_attr .attr ,
@@ -590,6 +628,10 @@ static struct attribute *uv_query_attrs[] = {
590628 & uv_query_dump_cpu_len_attr .attr ,
591629 & uv_query_supp_att_req_hdr_ver_attr .attr ,
592630 & uv_query_supp_att_pflags_attr .attr ,
631+ & uv_query_supp_add_secret_req_ver_attr .attr ,
632+ & uv_query_supp_add_secret_pcf_attr .attr ,
633+ & uv_query_supp_secret_types_attr .attr ,
634+ & uv_query_max_secrets_attr .attr ,
593635 NULL ,
594636};
595637
@@ -598,26 +640,26 @@ static struct attribute_group uv_query_attr_group = {
598640};
599641
600642static ssize_t uv_is_prot_virt_guest (struct kobject * kobj ,
601- struct kobj_attribute * attr , char * page )
643+ struct kobj_attribute * attr , char * buf )
602644{
603645 int val = 0 ;
604646
605647#ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
606648 val = prot_virt_guest ;
607649#endif
608- return scnprintf ( page , PAGE_SIZE , "%d\n" , val );
650+ return sysfs_emit ( buf , "%d\n" , val );
609651}
610652
611653static ssize_t uv_is_prot_virt_host (struct kobject * kobj ,
612- struct kobj_attribute * attr , char * page )
654+ struct kobj_attribute * attr , char * buf )
613655{
614656 int val = 0 ;
615657
616658#if IS_ENABLED (CONFIG_KVM )
617659 val = prot_virt_host ;
618660#endif
619661
620- return scnprintf ( page , PAGE_SIZE , "%d\n" , val );
662+ return sysfs_emit ( buf , "%d\n" , val );
621663}
622664
623665static struct kobj_attribute uv_prot_virt_guest =
0 commit comments