Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/chsc: query utility strings via fmt3 channel path descriptor

Add support for format 3 channel path descriptors and use them to
gather utility strings.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Sebastian Ott and committed by
Martin Schwidefsky
fcc6dd4b ded27d8d

+16 -2
+4 -2
arch/s390/include/asm/css_chars.h
··· 32 32 u32 fcx : 1; /* bit 88 */ 33 33 u32 : 19; 34 34 u32 alt_ssi : 1; /* bit 108 */ 35 - u32:1; 36 - u32 narf:1; /* bit 110 */ 35 + u32 : 1; 36 + u32 narf : 1; /* bit 110 */ 37 + u32 : 12; 38 + u32 util_str : 1;/* bit 123 */ 37 39 } __packed; 38 40 39 41 extern struct css_general_char css_general_characteristics;
+1
drivers/s390/cio/chp.c
··· 431 431 * hypervisors implement the required chsc commands. 432 432 */ 433 433 chsc_determine_fmt1_channel_path_desc(chp->chpid, &chp->desc_fmt1); 434 + chsc_determine_fmt3_channel_path_desc(chp->chpid, &chp->desc_fmt3); 434 435 chsc_get_channel_measurement_chars(chp); 435 436 436 437 return 0;
+1
drivers/s390/cio/chp.h
··· 46 46 int state; 47 47 struct channel_path_desc_fmt0 desc; 48 48 struct channel_path_desc_fmt1 desc_fmt1; 49 + struct channel_path_desc_fmt3 desc_fmt3; 49 50 /* Channel-measurement related stuff: */ 50 51 int cmg; 51 52 int shared;
+3
drivers/s390/cio/chsc.c
··· 915 915 return -EINVAL; 916 916 if ((rfmt == 2) && !css_general_characteristics.cib) 917 917 return -EINVAL; 918 + if ((rfmt == 3) && !css_general_characteristics.util_str) 919 + return -EINVAL; 918 920 919 921 memset(page, 0, PAGE_SIZE); 920 922 scpd_area = page; ··· 965 963 966 964 chsc_det_chp_desc(0, 0) 967 965 chsc_det_chp_desc(1, 1) 966 + chsc_det_chp_desc(3, 0) 968 967 969 968 static void 970 969 chsc_initialize_cmg_chars(struct channel_path *chp, u8 cmcv,
+7
drivers/s390/cio/chsc.h
··· 40 40 u32 zeros[2]; 41 41 } __attribute__ ((packed)); 42 42 43 + struct channel_path_desc_fmt3 { 44 + struct channel_path_desc_fmt1 fmt1_desc; 45 + u8 util_str[64]; 46 + }; 47 + 43 48 struct channel_path; 44 49 45 50 struct css_chsc_char { ··· 156 151 struct channel_path_desc_fmt0 *desc); 157 152 int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid, 158 153 struct channel_path_desc_fmt1 *desc); 154 + int chsc_determine_fmt3_channel_path_desc(struct chp_id chpid, 155 + struct channel_path_desc_fmt3 *desc); 159 156 void chsc_chp_online(struct chp_id chpid); 160 157 void chsc_chp_offline(struct chp_id chpid); 161 158 int chsc_get_channel_measurement_chars(struct channel_path *chp);