Commit feacc6c2 authored by David Hildenbrand's avatar David Hildenbrand Committed by Cornelia Huck
Browse files

s390x/ipl: we always have an ipl device



Both s390 machines unconditionally create an ipl device, so no need to
handle the missing case.

Now we can also change s390_ipl_update_diag308() to return void.

Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Acked-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
parent 09c7f58c
Loading
Loading
Loading
Loading
+12 −14
Original line number Diff line number Diff line
@@ -95,6 +95,11 @@ static const VMStateDescription vmstate_ipl = {
     }
};

static S390IPLState *get_ipl_device(void)
{
    return S390_IPL(object_resolve_path_type("", TYPE_S390_IPL, NULL));
}

static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
{
    uint64_t dstaddr = *(uint64_t *) opaque;
@@ -251,25 +256,19 @@ out:
    return (uint32_t) (ipl->cssid << 24 | ipl->ssid << 16 | ipl->devno);
}

int s390_ipl_update_diag308(IplParameterBlock *iplb)
void s390_ipl_update_diag308(IplParameterBlock *iplb)
{
    S390IPLState *ipl;
    S390IPLState *ipl = get_ipl_device();

    ipl = S390_IPL(object_resolve_path(TYPE_S390_IPL, NULL));
    if (ipl) {
    ipl->iplb = *iplb;
    ipl->iplb_valid = true;
        return 0;
    }
    return -1;
}

IplParameterBlock *s390_ipl_get_iplb(void)
{
    S390IPLState *ipl;
    S390IPLState *ipl = get_ipl_device();

    ipl = S390_IPL(object_resolve_path(TYPE_S390_IPL, NULL));
    if (!ipl || !ipl->iplb_valid) {
    if (!ipl->iplb_valid) {
        return NULL;
    }
    return &ipl->iplb;
@@ -277,9 +276,8 @@ IplParameterBlock *s390_ipl_get_iplb(void)

void s390_reipl_request(void)
{
    S390IPLState *ipl;
    S390IPLState *ipl = get_ipl_device();

    ipl = S390_IPL(object_resolve_path(TYPE_S390_IPL, NULL));
    ipl->reipl_requested = true;
    qemu_system_reset_request();
}
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ typedef struct IplParameterBlock {
      uint8_t  reserved2[88];
} IplParameterBlock;

int s390_ipl_update_diag308(IplParameterBlock *iplb);
void s390_ipl_update_diag308(IplParameterBlock *iplb);
IplParameterBlock *s390_ipl_get_iplb(void);
void s390_reipl_request(void);

+2 −5
Original line number Diff line number Diff line
@@ -233,11 +233,8 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
        }
        iplb = g_malloc0(sizeof(struct IplParameterBlock));
        cpu_physical_memory_read(addr, iplb, sizeof(struct IplParameterBlock));
        if (!s390_ipl_update_diag308(iplb)) {
        s390_ipl_update_diag308(iplb);
        env->regs[r1 + 1] = DIAG_308_RC_OK;
        } else {
            env->regs[r1 + 1] = DIAG_308_RC_INVALID;
        }
        g_free(iplb);
        return;
    case 6: