mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
				synced 2025-11-04 07:44:51 +10:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									ded27d8d2e
								
							
						
					
					
						commit
						fcc6dd4b7b
					
				@ -32,8 +32,10 @@ struct css_general_char {
 | 
			
		||||
	u32 fcx : 1;	 /* bit 88 */
 | 
			
		||||
	u32 : 19;
 | 
			
		||||
	u32 alt_ssi : 1; /* bit 108 */
 | 
			
		||||
	u32:1;
 | 
			
		||||
	u32 narf:1;	 /* bit 110 */
 | 
			
		||||
	u32 : 1;
 | 
			
		||||
	u32 narf : 1;	 /* bit 110 */
 | 
			
		||||
	u32 : 12;
 | 
			
		||||
	u32 util_str : 1;/* bit 123 */
 | 
			
		||||
} __packed;
 | 
			
		||||
 | 
			
		||||
extern struct css_general_char css_general_characteristics;
 | 
			
		||||
 | 
			
		||||
@ -431,6 +431,7 @@ int chp_update_desc(struct channel_path *chp)
 | 
			
		||||
	 * hypervisors implement the required chsc commands.
 | 
			
		||||
	 */
 | 
			
		||||
	chsc_determine_fmt1_channel_path_desc(chp->chpid, &chp->desc_fmt1);
 | 
			
		||||
	chsc_determine_fmt3_channel_path_desc(chp->chpid, &chp->desc_fmt3);
 | 
			
		||||
	chsc_get_channel_measurement_chars(chp);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,7 @@ struct channel_path {
 | 
			
		||||
	int state;
 | 
			
		||||
	struct channel_path_desc_fmt0 desc;
 | 
			
		||||
	struct channel_path_desc_fmt1 desc_fmt1;
 | 
			
		||||
	struct channel_path_desc_fmt3 desc_fmt3;
 | 
			
		||||
	/* Channel-measurement related stuff: */
 | 
			
		||||
	int cmg;
 | 
			
		||||
	int shared;
 | 
			
		||||
 | 
			
		||||
@ -915,6 +915,8 @@ int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt,
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	if ((rfmt == 2) && !css_general_characteristics.cib)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	if ((rfmt == 3) && !css_general_characteristics.util_str)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	memset(page, 0, PAGE_SIZE);
 | 
			
		||||
	scpd_area = page;
 | 
			
		||||
@ -963,6 +965,7 @@ out:									\
 | 
			
		||||
 | 
			
		||||
chsc_det_chp_desc(0, 0)
 | 
			
		||||
chsc_det_chp_desc(1, 1)
 | 
			
		||||
chsc_det_chp_desc(3, 0)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
chsc_initialize_cmg_chars(struct channel_path *chp, u8 cmcv,
 | 
			
		||||
 | 
			
		||||
@ -40,6 +40,11 @@ struct channel_path_desc_fmt1 {
 | 
			
		||||
	u32 zeros[2];
 | 
			
		||||
} __attribute__ ((packed));
 | 
			
		||||
 | 
			
		||||
struct channel_path_desc_fmt3 {
 | 
			
		||||
	struct channel_path_desc_fmt1 fmt1_desc;
 | 
			
		||||
	u8 util_str[64];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct channel_path;
 | 
			
		||||
 | 
			
		||||
struct css_chsc_char {
 | 
			
		||||
@ -151,6 +156,8 @@ int chsc_determine_fmt0_channel_path_desc(struct chp_id chpid,
 | 
			
		||||
					  struct channel_path_desc_fmt0 *desc);
 | 
			
		||||
int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid,
 | 
			
		||||
					  struct channel_path_desc_fmt1 *desc);
 | 
			
		||||
int chsc_determine_fmt3_channel_path_desc(struct chp_id chpid,
 | 
			
		||||
					  struct channel_path_desc_fmt3 *desc);
 | 
			
		||||
void chsc_chp_online(struct chp_id chpid);
 | 
			
		||||
void chsc_chp_offline(struct chp_id chpid);
 | 
			
		||||
int chsc_get_channel_measurement_chars(struct channel_path *chp);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user