[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH v0 1/2] spapr: Add H_REG_SNS hcall
From: |
Fabiano Rosas |
Subject: |
Re: [RFC PATCH v0 1/2] spapr: Add H_REG_SNS hcall |
Date: |
Fri, 06 Aug 2021 16:25:53 -0300 |
Bharata B Rao <bharata@linux.ibm.com> writes:
> Add support for H_REG_SNS hcall so that asynchronous page
> fault mechanism can be supported on PowerKVM guests.
>
> This hcall essentially issues KVM_PPC_SET_SNS to let the
> host map and pin the memory containing the Subvention
> Notification Structure. It also claims SPAPR_IRQ_SNS to
> be used as subvention notification interrupt.
>
> Note: Updates to linux-headers/linux/kvm.h are temporary
> pending headers update.
>
> Signed-off-by: Bharata B Rao <bharata@linux.ibm.com>
...
> +static target_ulong h_reg_sns(PowerPCCPU *cpu, SpaprMachineState *spapr,
> + target_ulong opcode, target_ulong *args)
> +{
> + target_ulong addr = args[0];
> + target_ulong len = args[1];
> +
> + if (addr == -1) {
> + return deregister_sns(cpu, spapr);
> + }
> +
> + /*
> + * If SNS area is already registered, can't register again before
> + * deregistering it first.
> + */
> + if (spapr->sns_addr == -1) {
> + return H_PARAMETER;
> + }
Don't you mean (spapr->sns_addr != -1) ?
> +
> + if (!QEMU_IS_ALIGNED(addr, 4096)) {
> + return H_PARAMETER;
> + }
> +
> + if (len < 256) {
> + return H_P2;
> + }
> +
> + /* TODO: SNS area is not allowed to cross a page boundary */
> +
> + /* KVM_PPC_SET_SNS ioctl */
> + if (kvmppc_set_sns_reg(addr, len)) {
> + return H_PARAMETER;
> + }
> +
> + /* Record SNS addr and len */
> + spapr->sns_addr = addr;
> + spapr->sns_len = len;
> +
> + /* Register irq source for sending ESN notification */
> + spapr_irq_claim(spapr, SPAPR_IRQ_SNS, false, &error_fatal);
> + args[1] = SPAPR_IRQ_SNS; /* irq no in R5 */
> +
> + return H_SUCCESS;
> +}