All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Andre Przywara <andre.przywara@arm.com>
Cc: Will Deacon <will@kernel.org>,
	Julien Thierry <julien.thierry.kdev@gmail.com>,
	kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org,
	Marc Zyngier <maz@kernel.org>
Subject: Re: [PATCH kvmtool 06/21] hw/i8042: Refactor trap handler
Date: Mon, 22 Feb 2021 16:03:37 +0000	[thread overview]
Message-ID: <30bcaa57-2cbb-b687-faff-8e1d743a03e3@arm.com> (raw)
In-Reply-To: <20210218114808.5ea4ba60@slackpad.fritz.box>

Hi Andre,

On 2/18/21 11:48 AM, Andre Przywara wrote:
> On Thu, 18 Feb 2021 11:17:58 +0000
> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>
>> Hi Andre,
>>
>> On 2/18/21 10:34 AM, Andre Przywara wrote:
>>> On Thu, 11 Feb 2021 17:23:13 +0000
>>> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>>>  
>>>> Hi Andre,
>>>>
>>>> On 12/10/20 2:28 PM, Andre Przywara wrote:  
>>>>> With the planned retirement of the special ioport emulation code, we
>>>>> need to provide an emulation function compatible with the MMIO
>>>>> prototype.
>>>>>
>>>>> Adjust the trap handler to use that new function, and provide shims to
>>>>> implement the old ioport interface, for now.
>>>>>
>>>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>>>> ---
>>>>>  hw/i8042.c | 68 +++++++++++++++++++++++++++---------------------------
>>>>>  1 file changed, 34 insertions(+), 34 deletions(-)
>>>>>
>>>>> diff --git a/hw/i8042.c b/hw/i8042.c
>>>>> index 36ee183f..eb1f9d28 100644
>>>>> --- a/hw/i8042.c
>>>>> +++ b/hw/i8042.c
>>>>> @@ -292,52 +292,52 @@ static void kbd_reset(void)
>>>>>  	};
>>>>>  }
>>>>>  
>>>>> -/*
>>>>> - * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> - */
>>>>> -static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +static void kbd_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
>>>>> +		   u8 is_write, void *ptr)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = kbd_read_status();
>>>>> -		ioport__write8(data, value);
>>>>> +	u8 value;
>>>>> +
>>>>> +	if (is_write)
>>>>> +		value = ioport__read8(data);
>>>>> +
>>>>> +	switch (addr) {
>>>>> +	case I8042_COMMAND_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_command(vcpu->kvm, value);
>>>>> +		else
>>>>> +			value = kbd_read_status();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = kbd_read_data();
>>>>> -		ioport__write8(data, value);
>>>>> +	case I8042_DATA_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_data(value);
>>>>> +		else
>>>>> +			value = kbd_read_data();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		ioport__write8(data, 0x20);
>>>>> +	case I8042_PORT_B_REG:
>>>>> +		if (!is_write)
>>>>> +			value = 0x20;
>>>>>  		break;
>>>>> -	}
>>>>>  	default:
>>>>> -		return false;
>>>>> +		return;    
>>>> Any particular reason for removing the false return value? I don't see it
>>>> mentioned in the commit message. Otherwise this is identical to the two functions
>>>> it replaces.  
>>> Because the MMIO handler prototype is void, in contrast to the PIO one.
>>> Since on returning "false" we only seem to panic kvmtool, this is of
>>> quite limited use, I'd say.  
>> Actually, in ioport.c::kvm__emulate_io(), if kvm->cfg.ioport_debug is true, it
>> will print an error and then panic in kvm_cpu__start(); otherwise the error is
>> silently ignored. serial.c is another device where an unknown register returns
>> false. In rtc.c, the unknown register is ignored. cfi_flash.c prints debugging
>> information. So I guess kvmtool implements all possible methods of handling an
>> unknown register *at the same time*, so it's up to you how you want to handle it.
> Well, the MMIO prototype we are going to use is void anyway, so it's
> just one patch earlier that we get this new behaviour.
> For handling MMIO errors:
> - Hardware MMIO doesn't have a back channel: if the MMIO write triggers
>   some error condition, the device would need to deal with it (setting
>   internal error state, ignore, etc.). On some systems the device could
>   throw some kind of bus error or SError, but this is a rather drastic
>   measure, and is certainly not exercised by those ancient devices.
> - Any kind of error reporting which can be triggered by a guest is
>   frowned upon: it could spam the console or some log file, and so
>   impact host operation. At the end an administrator can't do much about
>   it, anyway.
> - Which leaves the only use to some kvmtool developer debugging some
>   device emulation or investigating weird guest behaviour. And in this
>   case we can more easily have a debug message *inside* the device
>   emulation code, can't we?

That's what I had in mind, debugging messages in the device emulation. If the
guest can access an unknown register offset this can mean one of two things in my
opinion: the emulated device registered a memory region bigger that necessary or
the emulated device is not handling all device registers. But that's a subject for
another series.

Thanks,

Alex

>
> And since the MMIO handler prototype is void, we have no choice anyway,
> at least not without another huge (and pointless) series to change
> those user as well ;-)
>
> Cheers,
> Andre
>
>>>>>  	}
>>>>>  
>>>>> +	if (!is_write)
>>>>> +		ioport__write8(data, value);
>>>>> +}
>>>>> +
>>>>> +/*
>>>>> + * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> + */
>>>>> +static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +{
>>>>> +	kbd_io(vcpu, port, data, size, false, NULL);    
>>>> is_write is an u8, not a bool.  
>>> Right, will fix this.
>>>  
>>>> I never could wrap my head around the ioport convention of "in" (read) and "out"
>>>> (write). To be honest, changing is_write changed to an enum so it's crystal clear
>>>> what is happening would help with that a lot, but I guess that's a separate patch.  
>>> "in" and "out" are the x86 assembly mnemonics, but it's indeed
>>> confusing, because the device side has a different view (CPU "in" means
>>> pushing data "out" of the device). I usually look at the code to see
>>> what it's actually meant to do.
>>> So yeah, I feel like a lot of those device emulations could use
>>> some update. but that's indeed something for another day.  
>> Agreed.
>>
>> Thanks,
>>
>> Alex
>>
>>> Cheers,
>>> Andre
>>>  
>>>>> +
>>>>>  	return true;
>>>>>  }
>>>>>  
>>>>>  static bool kbd_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_command(vcpu->kvm, value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_data(value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		break;
>>>>> -	}
>>>>> -	default:
>>>>> -		return false;
>>>>> -	}
>>>>> +	kbd_io(vcpu, port, data, size, true, NULL);
>>>>>  
>>>>>  	return true;
>>>>>  }    

WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Andre Przywara <andre.przywara@arm.com>
Cc: kvm@vger.kernel.org, Marc Zyngier <maz@kernel.org>,
	Will Deacon <will@kernel.org>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH kvmtool 06/21] hw/i8042: Refactor trap handler
Date: Mon, 22 Feb 2021 16:03:37 +0000	[thread overview]
Message-ID: <30bcaa57-2cbb-b687-faff-8e1d743a03e3@arm.com> (raw)
In-Reply-To: <20210218114808.5ea4ba60@slackpad.fritz.box>

Hi Andre,

On 2/18/21 11:48 AM, Andre Przywara wrote:
> On Thu, 18 Feb 2021 11:17:58 +0000
> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>
>> Hi Andre,
>>
>> On 2/18/21 10:34 AM, Andre Przywara wrote:
>>> On Thu, 11 Feb 2021 17:23:13 +0000
>>> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>>>  
>>>> Hi Andre,
>>>>
>>>> On 12/10/20 2:28 PM, Andre Przywara wrote:  
>>>>> With the planned retirement of the special ioport emulation code, we
>>>>> need to provide an emulation function compatible with the MMIO
>>>>> prototype.
>>>>>
>>>>> Adjust the trap handler to use that new function, and provide shims to
>>>>> implement the old ioport interface, for now.
>>>>>
>>>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>>>> ---
>>>>>  hw/i8042.c | 68 +++++++++++++++++++++++++++---------------------------
>>>>>  1 file changed, 34 insertions(+), 34 deletions(-)
>>>>>
>>>>> diff --git a/hw/i8042.c b/hw/i8042.c
>>>>> index 36ee183f..eb1f9d28 100644
>>>>> --- a/hw/i8042.c
>>>>> +++ b/hw/i8042.c
>>>>> @@ -292,52 +292,52 @@ static void kbd_reset(void)
>>>>>  	};
>>>>>  }
>>>>>  
>>>>> -/*
>>>>> - * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> - */
>>>>> -static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +static void kbd_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
>>>>> +		   u8 is_write, void *ptr)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = kbd_read_status();
>>>>> -		ioport__write8(data, value);
>>>>> +	u8 value;
>>>>> +
>>>>> +	if (is_write)
>>>>> +		value = ioport__read8(data);
>>>>> +
>>>>> +	switch (addr) {
>>>>> +	case I8042_COMMAND_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_command(vcpu->kvm, value);
>>>>> +		else
>>>>> +			value = kbd_read_status();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = kbd_read_data();
>>>>> -		ioport__write8(data, value);
>>>>> +	case I8042_DATA_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_data(value);
>>>>> +		else
>>>>> +			value = kbd_read_data();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		ioport__write8(data, 0x20);
>>>>> +	case I8042_PORT_B_REG:
>>>>> +		if (!is_write)
>>>>> +			value = 0x20;
>>>>>  		break;
>>>>> -	}
>>>>>  	default:
>>>>> -		return false;
>>>>> +		return;    
>>>> Any particular reason for removing the false return value? I don't see it
>>>> mentioned in the commit message. Otherwise this is identical to the two functions
>>>> it replaces.  
>>> Because the MMIO handler prototype is void, in contrast to the PIO one.
>>> Since on returning "false" we only seem to panic kvmtool, this is of
>>> quite limited use, I'd say.  
>> Actually, in ioport.c::kvm__emulate_io(), if kvm->cfg.ioport_debug is true, it
>> will print an error and then panic in kvm_cpu__start(); otherwise the error is
>> silently ignored. serial.c is another device where an unknown register returns
>> false. In rtc.c, the unknown register is ignored. cfi_flash.c prints debugging
>> information. So I guess kvmtool implements all possible methods of handling an
>> unknown register *at the same time*, so it's up to you how you want to handle it.
> Well, the MMIO prototype we are going to use is void anyway, so it's
> just one patch earlier that we get this new behaviour.
> For handling MMIO errors:
> - Hardware MMIO doesn't have a back channel: if the MMIO write triggers
>   some error condition, the device would need to deal with it (setting
>   internal error state, ignore, etc.). On some systems the device could
>   throw some kind of bus error or SError, but this is a rather drastic
>   measure, and is certainly not exercised by those ancient devices.
> - Any kind of error reporting which can be triggered by a guest is
>   frowned upon: it could spam the console or some log file, and so
>   impact host operation. At the end an administrator can't do much about
>   it, anyway.
> - Which leaves the only use to some kvmtool developer debugging some
>   device emulation or investigating weird guest behaviour. And in this
>   case we can more easily have a debug message *inside* the device
>   emulation code, can't we?

That's what I had in mind, debugging messages in the device emulation. If the
guest can access an unknown register offset this can mean one of two things in my
opinion: the emulated device registered a memory region bigger that necessary or
the emulated device is not handling all device registers. But that's a subject for
another series.

Thanks,

Alex

>
> And since the MMIO handler prototype is void, we have no choice anyway,
> at least not without another huge (and pointless) series to change
> those user as well ;-)
>
> Cheers,
> Andre
>
>>>>>  	}
>>>>>  
>>>>> +	if (!is_write)
>>>>> +		ioport__write8(data, value);
>>>>> +}
>>>>> +
>>>>> +/*
>>>>> + * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> + */
>>>>> +static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +{
>>>>> +	kbd_io(vcpu, port, data, size, false, NULL);    
>>>> is_write is an u8, not a bool.  
>>> Right, will fix this.
>>>  
>>>> I never could wrap my head around the ioport convention of "in" (read) and "out"
>>>> (write). To be honest, changing is_write changed to an enum so it's crystal clear
>>>> what is happening would help with that a lot, but I guess that's a separate patch.  
>>> "in" and "out" are the x86 assembly mnemonics, but it's indeed
>>> confusing, because the device side has a different view (CPU "in" means
>>> pushing data "out" of the device). I usually look at the code to see
>>> what it's actually meant to do.
>>> So yeah, I feel like a lot of those device emulations could use
>>> some update. but that's indeed something for another day.  
>> Agreed.
>>
>> Thanks,
>>
>> Alex
>>
>>> Cheers,
>>> Andre
>>>  
>>>>> +
>>>>>  	return true;
>>>>>  }
>>>>>  
>>>>>  static bool kbd_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_command(vcpu->kvm, value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_data(value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		break;
>>>>> -	}
>>>>> -	default:
>>>>> -		return false;
>>>>> -	}
>>>>> +	kbd_io(vcpu, port, data, size, true, NULL);
>>>>>  
>>>>>  	return true;
>>>>>  }    
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Andre Przywara <andre.przywara@arm.com>
Cc: kvm@vger.kernel.org, Marc Zyngier <maz@kernel.org>,
	Julien Thierry <julien.thierry.kdev@gmail.com>,
	Will Deacon <will@kernel.org>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH kvmtool 06/21] hw/i8042: Refactor trap handler
Date: Mon, 22 Feb 2021 16:03:37 +0000	[thread overview]
Message-ID: <30bcaa57-2cbb-b687-faff-8e1d743a03e3@arm.com> (raw)
In-Reply-To: <20210218114808.5ea4ba60@slackpad.fritz.box>

Hi Andre,

On 2/18/21 11:48 AM, Andre Przywara wrote:
> On Thu, 18 Feb 2021 11:17:58 +0000
> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>
>> Hi Andre,
>>
>> On 2/18/21 10:34 AM, Andre Przywara wrote:
>>> On Thu, 11 Feb 2021 17:23:13 +0000
>>> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>>>  
>>>> Hi Andre,
>>>>
>>>> On 12/10/20 2:28 PM, Andre Przywara wrote:  
>>>>> With the planned retirement of the special ioport emulation code, we
>>>>> need to provide an emulation function compatible with the MMIO
>>>>> prototype.
>>>>>
>>>>> Adjust the trap handler to use that new function, and provide shims to
>>>>> implement the old ioport interface, for now.
>>>>>
>>>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>>>> ---
>>>>>  hw/i8042.c | 68 +++++++++++++++++++++++++++---------------------------
>>>>>  1 file changed, 34 insertions(+), 34 deletions(-)
>>>>>
>>>>> diff --git a/hw/i8042.c b/hw/i8042.c
>>>>> index 36ee183f..eb1f9d28 100644
>>>>> --- a/hw/i8042.c
>>>>> +++ b/hw/i8042.c
>>>>> @@ -292,52 +292,52 @@ static void kbd_reset(void)
>>>>>  	};
>>>>>  }
>>>>>  
>>>>> -/*
>>>>> - * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> - */
>>>>> -static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +static void kbd_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
>>>>> +		   u8 is_write, void *ptr)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = kbd_read_status();
>>>>> -		ioport__write8(data, value);
>>>>> +	u8 value;
>>>>> +
>>>>> +	if (is_write)
>>>>> +		value = ioport__read8(data);
>>>>> +
>>>>> +	switch (addr) {
>>>>> +	case I8042_COMMAND_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_command(vcpu->kvm, value);
>>>>> +		else
>>>>> +			value = kbd_read_status();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = kbd_read_data();
>>>>> -		ioport__write8(data, value);
>>>>> +	case I8042_DATA_REG:
>>>>> +		if (is_write)
>>>>> +			kbd_write_data(value);
>>>>> +		else
>>>>> +			value = kbd_read_data();
>>>>>  		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		ioport__write8(data, 0x20);
>>>>> +	case I8042_PORT_B_REG:
>>>>> +		if (!is_write)
>>>>> +			value = 0x20;
>>>>>  		break;
>>>>> -	}
>>>>>  	default:
>>>>> -		return false;
>>>>> +		return;    
>>>> Any particular reason for removing the false return value? I don't see it
>>>> mentioned in the commit message. Otherwise this is identical to the two functions
>>>> it replaces.  
>>> Because the MMIO handler prototype is void, in contrast to the PIO one.
>>> Since on returning "false" we only seem to panic kvmtool, this is of
>>> quite limited use, I'd say.  
>> Actually, in ioport.c::kvm__emulate_io(), if kvm->cfg.ioport_debug is true, it
>> will print an error and then panic in kvm_cpu__start(); otherwise the error is
>> silently ignored. serial.c is another device where an unknown register returns
>> false. In rtc.c, the unknown register is ignored. cfi_flash.c prints debugging
>> information. So I guess kvmtool implements all possible methods of handling an
>> unknown register *at the same time*, so it's up to you how you want to handle it.
> Well, the MMIO prototype we are going to use is void anyway, so it's
> just one patch earlier that we get this new behaviour.
> For handling MMIO errors:
> - Hardware MMIO doesn't have a back channel: if the MMIO write triggers
>   some error condition, the device would need to deal with it (setting
>   internal error state, ignore, etc.). On some systems the device could
>   throw some kind of bus error or SError, but this is a rather drastic
>   measure, and is certainly not exercised by those ancient devices.
> - Any kind of error reporting which can be triggered by a guest is
>   frowned upon: it could spam the console or some log file, and so
>   impact host operation. At the end an administrator can't do much about
>   it, anyway.
> - Which leaves the only use to some kvmtool developer debugging some
>   device emulation or investigating weird guest behaviour. And in this
>   case we can more easily have a debug message *inside* the device
>   emulation code, can't we?

That's what I had in mind, debugging messages in the device emulation. If the
guest can access an unknown register offset this can mean one of two things in my
opinion: the emulated device registered a memory region bigger that necessary or
the emulated device is not handling all device registers. But that's a subject for
another series.

Thanks,

Alex

>
> And since the MMIO handler prototype is void, we have no choice anyway,
> at least not without another huge (and pointless) series to change
> those user as well ;-)
>
> Cheers,
> Andre
>
>>>>>  	}
>>>>>  
>>>>> +	if (!is_write)
>>>>> +		ioport__write8(data, value);
>>>>> +}
>>>>> +
>>>>> +/*
>>>>> + * Called when the OS has written to one of the keyboard's ports (0x60 or 0x64)
>>>>> + */
>>>>> +static bool kbd_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>> +{
>>>>> +	kbd_io(vcpu, port, data, size, false, NULL);    
>>>> is_write is an u8, not a bool.  
>>> Right, will fix this.
>>>  
>>>> I never could wrap my head around the ioport convention of "in" (read) and "out"
>>>> (write). To be honest, changing is_write changed to an enum so it's crystal clear
>>>> what is happening would help with that a lot, but I guess that's a separate patch.  
>>> "in" and "out" are the x86 assembly mnemonics, but it's indeed
>>> confusing, because the device side has a different view (CPU "in" means
>>> pushing data "out" of the device). I usually look at the code to see
>>> what it's actually meant to do.
>>> So yeah, I feel like a lot of those device emulations could use
>>> some update. but that's indeed something for another day.  
>> Agreed.
>>
>> Thanks,
>>
>> Alex
>>
>>> Cheers,
>>> Andre
>>>  
>>>>> +
>>>>>  	return true;
>>>>>  }
>>>>>  
>>>>>  static bool kbd_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
>>>>>  {
>>>>> -	switch (port) {
>>>>> -	case I8042_COMMAND_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_command(vcpu->kvm, value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_DATA_REG: {
>>>>> -		u8 value = ioport__read8(data);
>>>>> -		kbd_write_data(value);
>>>>> -		break;
>>>>> -	}
>>>>> -	case I8042_PORT_B_REG: {
>>>>> -		break;
>>>>> -	}
>>>>> -	default:
>>>>> -		return false;
>>>>> -	}
>>>>> +	kbd_io(vcpu, port, data, size, true, NULL);
>>>>>  
>>>>>  	return true;
>>>>>  }    

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-02-22 16:05 UTC|newest]

Thread overview: 216+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-10 14:28 [PATCH kvmtool 00/21] Unify I/O port and MMIO trap handling Andre Przywara
2020-12-10 14:28 ` Andre Przywara
2020-12-10 14:28 ` Andre Przywara
2020-12-10 14:28 ` [PATCH kvmtool 01/21] ioport: Remove ioport__setup_arch() Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-10 17:44   ` Alexandru Elisei
2021-02-10 17:44     ` Alexandru Elisei
2021-02-10 17:44     ` Alexandru Elisei
2021-02-11 17:16     ` Andre Przywara
2021-02-11 17:16       ` Andre Przywara
2021-02-11 17:16       ` Andre Przywara
2021-02-11 17:32       ` Alexandru Elisei
2021-02-11 17:32         ` Alexandru Elisei
2021-02-11 17:32         ` Alexandru Elisei
2021-02-17 16:46         ` Andre Przywara
2021-02-17 16:46           ` Andre Przywara
2021-02-17 16:46           ` Andre Przywara
2021-02-22 10:23           ` Andre Przywara
2021-02-22 10:23             ` Andre Przywara
2021-02-22 10:23             ` Andre Przywara
2021-02-22 15:01             ` Alexandru Elisei
2021-02-22 15:01               ` Alexandru Elisei
2021-02-22 15:01               ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 02/21] hw/serial: Use device abstraction for FDT generator function Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-11 12:05   ` Alexandru Elisei
2021-02-11 12:05     ` Alexandru Elisei
2021-02-11 12:05     ` Alexandru Elisei
2021-02-11 17:45     ` Andre Przywara
2021-02-11 17:45       ` Andre Przywara
2021-02-11 17:45       ` Andre Przywara
2020-12-10 14:28 ` [PATCH kvmtool 03/21] ioport: Retire .generate_fdt_node functionality Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-11 14:05   ` Alexandru Elisei
2021-02-11 14:05     ` Alexandru Elisei
2021-02-11 14:05     ` Alexandru Elisei
2021-02-17 15:54     ` Andre Przywara
2021-02-17 15:54       ` Andre Przywara
2021-02-17 15:54       ` Andre Przywara
2021-02-17 16:06       ` Alexandru Elisei
2021-02-17 16:06         ` Alexandru Elisei
2021-02-17 16:06         ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 04/21] mmio: Extend handling to include ioport emulation Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-11 16:10   ` Alexandru Elisei
2021-02-11 16:10     ` Alexandru Elisei
2021-02-11 16:10     ` Alexandru Elisei
2021-02-17 17:43     ` Andre Przywara
2021-02-17 17:43       ` Andre Przywara
2021-02-17 17:43       ` Andre Przywara
2021-02-22 15:50       ` Alexandru Elisei
2021-02-22 15:50         ` Alexandru Elisei
2021-02-22 15:50         ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 05/21] hw/i8042: Clean up data types Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-11 16:55   ` Alexandru Elisei
2021-02-11 16:55     ` Alexandru Elisei
2021-02-11 16:55     ` Alexandru Elisei
2021-02-17 17:46     ` Andre Przywara
2021-02-17 17:46       ` Andre Przywara
2021-02-17 17:46       ` Andre Przywara
2020-12-10 14:28 ` [PATCH kvmtool 06/21] hw/i8042: Refactor trap handler Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-11 17:23   ` Alexandru Elisei
2021-02-11 17:23     ` Alexandru Elisei
2021-02-11 17:23     ` Alexandru Elisei
2021-02-18 10:34     ` Andre Przywara
2021-02-18 10:34       ` Andre Przywara
2021-02-18 10:34       ` Andre Przywara
2021-02-18 11:17       ` Alexandru Elisei
2021-02-18 11:17         ` Alexandru Elisei
2021-02-18 11:17         ` Alexandru Elisei
2021-02-18 11:48         ` Andre Przywara
2021-02-18 11:48           ` Andre Przywara
2021-02-18 11:48           ` Andre Przywara
2021-02-22 16:03           ` Alexandru Elisei [this message]
2021-02-22 16:03             ` Alexandru Elisei
2021-02-22 16:03             ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 07/21] hw/i8042: Switch to new trap handlers Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 10:41   ` Alexandru Elisei
2021-02-12 10:41     ` Alexandru Elisei
2021-02-12 10:41     ` Alexandru Elisei
2021-02-18 12:09     ` Andre Przywara
2021-02-18 12:09       ` Andre Przywara
2021-02-18 12:09       ` Andre Przywara
2021-02-22 16:19       ` Alexandru Elisei
2021-02-22 16:19         ` Alexandru Elisei
2021-02-22 16:19         ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 08/21] x86/ioport: Refactor " Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 11:14   ` Alexandru Elisei
2021-02-12 11:14     ` Alexandru Elisei
2021-02-12 11:14     ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 09/21] x86/ioport: Switch to new " Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 11:27   ` Alexandru Elisei
2021-02-12 11:27     ` Alexandru Elisei
2021-02-12 11:27     ` Alexandru Elisei
2021-02-18 14:05     ` Andre Przywara
2021-02-18 14:05       ` Andre Przywara
2021-02-18 14:05       ` Andre Przywara
2020-12-10 14:28 ` [PATCH kvmtool 10/21] hw/rtc: Refactor " Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 11:56   ` Alexandru Elisei
2021-02-12 11:56     ` Alexandru Elisei
2021-02-12 11:56     ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 11/21] hw/rtc: Switch to new trap handler Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 12:02   ` Alexandru Elisei
2021-02-12 12:02     ` Alexandru Elisei
2021-02-12 12:02     ` Alexandru Elisei
2020-12-10 14:28 ` [PATCH kvmtool 12/21] hw/vesa: Switch trap handling to use MMIO handler Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2020-12-10 14:28   ` Andre Przywara
2021-02-12 17:50   ` Alexandru Elisei
2021-02-12 17:50     ` Alexandru Elisei
2021-02-12 17:50     ` Alexandru Elisei
2020-12-10 14:29 ` [PATCH kvmtool 13/21] hw/serial: Refactor trap handler Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-16 14:22   ` Alexandru Elisei
2021-02-16 14:22     ` Alexandru Elisei
2021-02-16 14:22     ` Alexandru Elisei
2021-02-18 14:41     ` Andre Przywara
2021-02-18 14:41       ` Andre Przywara
2021-02-18 14:41       ` Andre Przywara
2021-02-22 17:40       ` Alexandru Elisei
2021-02-22 17:40         ` Alexandru Elisei
2021-02-22 17:40         ` Alexandru Elisei
2021-02-24 14:54         ` Andre Przywara
2021-02-24 14:54           ` Andre Przywara
2021-02-24 14:54           ` Andre Przywara
2020-12-10 14:29 ` [PATCH kvmtool 14/21] hw/serial: Switch to new trap handlers Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-16 14:31   ` Alexandru Elisei
2021-02-16 14:31     ` Alexandru Elisei
2021-02-16 14:31     ` Alexandru Elisei
2020-12-10 14:29 ` [PATCH kvmtool 15/21] vfio: Refactor ioport trap handler Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-16 14:47   ` Alexandru Elisei
2021-02-16 14:47     ` Alexandru Elisei
2021-02-16 14:47     ` Alexandru Elisei
2021-02-18 15:51     ` Andre Przywara
2021-02-18 15:51       ` Andre Przywara
2021-02-18 15:51       ` Andre Przywara
2020-12-10 14:29 ` [PATCH kvmtool 16/21] vfio: Switch to new ioport trap handlers Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-16 14:52   ` Alexandru Elisei
2021-02-16 14:52     ` Alexandru Elisei
2021-02-16 14:52     ` Alexandru Elisei
2020-12-10 14:29 ` [PATCH kvmtool 17/21] virtio: Switch trap handling to use MMIO handler Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-16 17:03   ` Alexandru Elisei
2021-02-16 17:03     ` Alexandru Elisei
2021-02-16 17:03     ` Alexandru Elisei
2021-02-18 16:13     ` Andre Przywara
2021-02-18 16:13       ` Andre Przywara
2021-02-18 16:13       ` Andre Przywara
2020-12-10 14:29 ` [PATCH kvmtool 18/21] pci: " Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-17 15:14   ` Alexandru Elisei
2021-02-17 15:14     ` Alexandru Elisei
2021-02-17 15:14     ` Alexandru Elisei
2020-12-10 14:29 ` [PATCH kvmtool 19/21] Remove ioport specific routines Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-17 15:49   ` Alexandru Elisei
2021-02-17 15:49     ` Alexandru Elisei
2021-02-17 15:49     ` Alexandru Elisei
2021-02-17 16:11     ` Alexandru Elisei
2021-02-17 16:11       ` Alexandru Elisei
2021-02-17 16:11       ` Alexandru Elisei
2021-02-18 16:34       ` Andre Przywara
2021-02-18 16:34         ` Andre Przywara
2021-02-18 16:34         ` Andre Przywara
2020-12-10 14:29 ` [PATCH kvmtool 20/21] hw/serial: ARM/arm64: Use MMIO at higher addresses Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-17 16:48   ` Alexandru Elisei
2021-02-17 16:48     ` Alexandru Elisei
2021-02-17 16:48     ` Alexandru Elisei
2021-02-18 12:18     ` Alexandru Elisei
2021-02-18 12:18       ` Alexandru Elisei
2021-02-18 12:18       ` Alexandru Elisei
2021-02-18 16:38       ` Andre Przywara
2021-02-18 16:38         ` Andre Przywara
2021-02-18 16:38         ` Andre Przywara
2020-12-10 14:29 ` [PATCH kvmtool 21/21] hw/rtc: " Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2020-12-10 14:29   ` Andre Przywara
2021-02-18 13:33   ` Alexandru Elisei
2021-02-18 13:33     ` Alexandru Elisei
2021-02-18 13:33     ` Alexandru Elisei
2021-02-18 16:41     ` Andre Przywara
2021-02-18 16:41       ` Andre Przywara
2021-02-18 16:41       ` Andre Przywara
2021-02-10 17:44 ` [PATCH kvmtool 00/21] Unify I/O port and MMIO trap handling Alexandru Elisei
2021-02-10 17:44   ` Alexandru Elisei
2021-02-10 17:44   ` Alexandru Elisei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=30bcaa57-2cbb-b687-faff-8e1d743a03e3@arm.com \
    --to=alexandru.elisei@arm.com \
    --cc=andre.przywara@arm.com \
    --cc=julien.thierry.kdev@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.