Commit 77b703f8 authored by Richard Henderson's avatar Richard Henderson Committed by David Hildenbrand
Browse files

target/s390x: Remove ilen parameter from s390_program_interrupt



This is no longer used, and many of the existing uses -- particularly
within hw/s390x -- seem questionable.

Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Message-Id: <20191001171614.8405-4-richard.henderson@linaro.org>
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
parent 3e201858
Loading
Loading
Loading
Loading
+29 −29
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ int clp_service_call(S390CPU *cpu, uint8_t r2, uintptr_t ra)
    int i;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 4, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

@@ -168,7 +168,7 @@ int clp_service_call(S390CPU *cpu, uint8_t r2, uintptr_t ra)
    reqh = (ClpReqHdr *)buffer;
    req_len = lduw_p(&reqh->len);
    if (req_len < 16 || req_len > 8184 || (req_len % 8 != 0)) {
        s390_program_interrupt(env, PGM_OPERAND, 4, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return 0;
    }

@@ -180,11 +180,11 @@ int clp_service_call(S390CPU *cpu, uint8_t r2, uintptr_t ra)
    resh = (ClpRspHdr *)(buffer + req_len);
    res_len = lduw_p(&resh->len);
    if (res_len < 8 || res_len > 8176 || (res_len % 8 != 0)) {
        s390_program_interrupt(env, PGM_OPERAND, 4, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return 0;
    }
    if ((req_len + res_len) > 8192) {
        s390_program_interrupt(env, PGM_OPERAND, 4, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return 0;
    }

@@ -390,12 +390,12 @@ int pcilg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
    uint8_t pcias;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 4, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

    if (r2 & 0x1) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

@@ -429,25 +429,25 @@ int pcilg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
    switch (pcias) {
    case ZPCI_IO_BAR_MIN...ZPCI_IO_BAR_MAX:
        if (!len || (len > (8 - (offset & 0x7)))) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        result = zpci_read_bar(pbdev, pcias, offset, &data, len);
        if (result != MEMTX_OK) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        break;
    case ZPCI_CONFIG_BAR:
        if (!len || (len > (4 - (offset & 0x3))) || len == 3) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        data =  pci_host_config_read_common(
                   pbdev->pdev, offset, pci_config_size(pbdev->pdev), len);

        if (zpci_endian_swap(&data, len)) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        break;
@@ -489,12 +489,12 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
    uint8_t pcias;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 4, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

    if (r2 & 0x1) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

@@ -536,13 +536,13 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
         * A length of 0 is invalid and length should not cross a double word
         */
        if (!len || (len > (8 - (offset & 0x7)))) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }

        result = zpci_write_bar(pbdev, pcias, offset, data, len);
        if (result != MEMTX_OK) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        break;
@@ -550,7 +550,7 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
        /* ZPCI uses the pseudo BAR number 15 as configuration space */
        /* possible access lengths are 1,2,4 and must not cross a word */
        if (!len || (len > (4 - (offset & 0x3))) || len == 3) {
            s390_program_interrupt(env, PGM_OPERAND, 4, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
        /* len = 1,2,4 so we do not need to test */
@@ -622,12 +622,12 @@ int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
    hwaddr start, end;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 4, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

    if (r2 & 0x1) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

@@ -709,7 +709,7 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,
    uint8_t buffer[128];

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 6, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

@@ -772,7 +772,7 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,

    if (!memory_region_access_valid(mr, offset, len, true,
                                    MEMTXATTRS_UNSPECIFIED)) {
        s390_program_interrupt(env, PGM_OPERAND, 6, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return 0;
    }

@@ -786,7 +786,7 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,
                                              ldq_p(buffer + i * 8),
                                              MO_64, MEMTXATTRS_UNSPECIFIED);
        if (result != MEMTX_OK) {
            s390_program_interrupt(env, PGM_OPERAND, 6, ra);
            s390_program_interrupt(env, PGM_OPERAND, ra);
            return 0;
        }
    }
@@ -797,7 +797,7 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,
    return 0;

specification_error:
    s390_program_interrupt(env, PGM_SPECIFICATION, 6, ra);
    s390_program_interrupt(env, PGM_SPECIFICATION, ra);
    return 0;
}

@@ -871,14 +871,14 @@ static int reg_ioat(CPUS390XState *env, S390PCIIOMMU *iommu, ZpciFib fib,
    pba &= ~0xfff;
    pal |= 0xfff;
    if (pba > pal || pba < ZPCI_SDMA_ADDR || pal > ZPCI_EDMA_ADDR) {
        s390_program_interrupt(env, PGM_OPERAND, 6, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return -EINVAL;
    }

    /* currently we only support designation type 1 with translation */
    if (!(dt == ZPCI_IOTA_RTTO && t)) {
        error_report("unsupported ioat dt %d t %d", dt, t);
        s390_program_interrupt(env, PGM_OPERAND, 6, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return -EINVAL;
    }

@@ -1003,7 +1003,7 @@ int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
    uint64_t cc = ZPCI_PCI_LS_OK;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 6, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

@@ -1012,7 +1012,7 @@ int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
    fh = env->regs[r1] >> 32;

    if (fiba & 0x7) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 6, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

@@ -1040,7 +1040,7 @@ int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
    }

    if (fib.fmt != 0) {
        s390_program_interrupt(env, PGM_OPERAND, 6, ra);
        s390_program_interrupt(env, PGM_OPERAND, ra);
        return 0;
    }

@@ -1151,7 +1151,7 @@ int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
        break;
    }
    default:
        s390_program_interrupt(&cpu->env, PGM_OPERAND, 6, ra);
        s390_program_interrupt(&cpu->env, PGM_OPERAND, ra);
        cc = ZPCI_PCI_LS_ERR;
    }

@@ -1171,7 +1171,7 @@ int stpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
    uint64_t cc = ZPCI_PCI_LS_OK;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, 6, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return 0;
    }

@@ -1185,7 +1185,7 @@ int stpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,
    }

    if (fiba & 0x7) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 6, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

+1 −1
Original line number Diff line number Diff line
@@ -588,7 +588,7 @@ void HELPER(sacf)(CPUS390XState *env, uint64_t a1)
        break;
    default:
        HELPER_LOG("unknown sacf mode: %" PRIx64 "\n", a1);
        s390_program_interrupt(env, PGM_SPECIFICATION, 2, GETPC());
        s390_program_interrupt(env, PGM_SPECIFICATION, GETPC());
        break;
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -809,8 +809,7 @@ void s390_io_interrupt(uint16_t subchannel_id, uint16_t subchannel_nr,
/* automatically detect the instruction length */
#define ILEN_AUTO                   0xff
#define RA_IGNORED                  0
void s390_program_interrupt(CPUS390XState *env, uint32_t code, int ilen,
                            uintptr_t ra);
void s390_program_interrupt(CPUS390XState *env, uint32_t code, uintptr_t ra);
/* service interrupts are floating therefore we must not pass an cpustate */
void s390_sclp_extint(uint32_t parm);

+2 −2
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t r3,
    case S390_FEAT_TYPE_PCKMO:
    case S390_FEAT_TYPE_PCC:
        if (mod) {
            s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra);
            s390_program_interrupt(env, PGM_SPECIFICATION, ra);
            return 0;
        }
        break;
@@ -42,7 +42,7 @@ uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t r3,

    s390_get_feat_block(type, subfunc);
    if (!test_be_bit(fc, subfunc)) {
        s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return 0;
    }

+7 −7
Original line number Diff line number Diff line
@@ -61,12 +61,12 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
    IplParameterBlock *iplb;

    if (env->psw.mask & PSW_MASK_PSTATE) {
        s390_program_interrupt(env, PGM_PRIVILEGED, ILEN_AUTO, ra);
        s390_program_interrupt(env, PGM_PRIVILEGED, ra);
        return;
    }

    if ((subcode & ~0x0ffffULL) || (subcode > 6)) {
        s390_program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        return;
    }

@@ -82,13 +82,13 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
        break;
    case 5:
        if ((r1 & 1) || (addr & 0x0fffULL)) {
            s390_program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
            s390_program_interrupt(env, PGM_SPECIFICATION, ra);
            return;
        }
        if (!address_space_access_valid(&address_space_memory, addr,
                                        sizeof(IplParameterBlock), false,
                                        MEMTXATTRS_UNSPECIFIED)) {
            s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
            s390_program_interrupt(env, PGM_ADDRESSING, ra);
            return;
        }
        iplb = g_new0(IplParameterBlock, 1);
@@ -112,13 +112,13 @@ out:
        return;
    case 6:
        if ((r1 & 1) || (addr & 0x0fffULL)) {
            s390_program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
            s390_program_interrupt(env, PGM_SPECIFICATION, ra);
            return;
        }
        if (!address_space_access_valid(&address_space_memory, addr,
                                        sizeof(IplParameterBlock), true,
                                        MEMTXATTRS_UNSPECIFIED)) {
            s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
            s390_program_interrupt(env, PGM_ADDRESSING, ra);
            return;
        }
        iplb = s390_ipl_get_iplb();
@@ -130,7 +130,7 @@ out:
        }
        return;
    default:
        s390_program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
        s390_program_interrupt(env, PGM_SPECIFICATION, ra);
        break;
    }
}
Loading