mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	tools/kvm_stat: Fix kvm_exit filter name
The filter name is fixed to "exit_reason" for some kvm_exit events, no
matter what architect we have. Actually, the filter name ("exit_reason")
is only applicable to x86, meaning it's broken on other architects
including aarch64.
This fixes the issue by providing various kvm_exit filter names, depending
on architect we're on. Afterwards, the variable filter name is picked and
applied through ioctl(fd, SET_FILTER).
Reported-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Gavin Shan <gshan@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									56871d444b
								
							
						
					
					
						commit
						5fcf3a55a6
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -270,6 +270,7 @@ class ArchX86(Arch):
 | 
			
		|||
    def __init__(self, exit_reasons):
 | 
			
		||||
        self.sc_perf_evt_open = 298
 | 
			
		||||
        self.ioctl_numbers = IOCTL_NUMBERS
 | 
			
		||||
        self.exit_reason_field = 'exit_reason'
 | 
			
		||||
        self.exit_reasons = exit_reasons
 | 
			
		||||
 | 
			
		||||
    def debugfs_is_child(self, field):
 | 
			
		||||
| 
						 | 
				
			
			@ -289,6 +290,7 @@ class ArchPPC(Arch):
 | 
			
		|||
        # numbers depend on the wordsize.
 | 
			
		||||
        char_ptr_size = ctypes.sizeof(ctypes.c_char_p)
 | 
			
		||||
        self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16
 | 
			
		||||
        self.exit_reason_field = 'exit_nr'
 | 
			
		||||
        self.exit_reasons = {}
 | 
			
		||||
 | 
			
		||||
    def debugfs_is_child(self, field):
 | 
			
		||||
| 
						 | 
				
			
			@ -300,6 +302,7 @@ class ArchA64(Arch):
 | 
			
		|||
    def __init__(self):
 | 
			
		||||
        self.sc_perf_evt_open = 241
 | 
			
		||||
        self.ioctl_numbers = IOCTL_NUMBERS
 | 
			
		||||
        self.exit_reason_field = 'esr_ec'
 | 
			
		||||
        self.exit_reasons = AARCH64_EXIT_REASONS
 | 
			
		||||
 | 
			
		||||
    def debugfs_is_child(self, field):
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +314,7 @@ class ArchS390(Arch):
 | 
			
		|||
    def __init__(self):
 | 
			
		||||
        self.sc_perf_evt_open = 331
 | 
			
		||||
        self.ioctl_numbers = IOCTL_NUMBERS
 | 
			
		||||
        self.exit_reason_field = None
 | 
			
		||||
        self.exit_reasons = None
 | 
			
		||||
 | 
			
		||||
    def debugfs_is_child(self, field):
 | 
			
		||||
| 
						 | 
				
			
			@ -541,8 +545,8 @@ class TracepointProvider(Provider):
 | 
			
		|||
        """
 | 
			
		||||
        filters = {}
 | 
			
		||||
        filters['kvm_userspace_exit'] = ('reason', USERSPACE_EXIT_REASONS)
 | 
			
		||||
        if ARCH.exit_reasons:
 | 
			
		||||
            filters['kvm_exit'] = ('exit_reason', ARCH.exit_reasons)
 | 
			
		||||
        if ARCH.exit_reason_field and ARCH.exit_reasons:
 | 
			
		||||
            filters['kvm_exit'] = (ARCH.exit_reason_field, ARCH.exit_reasons)
 | 
			
		||||
        return filters
 | 
			
		||||
 | 
			
		||||
    def _get_available_fields(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue