qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 4/5] S390: BIOS boot from given device


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH v2 4/5] S390: BIOS boot from given device
Date: Tue, 30 Apr 2013 12:23:21 +0200

On 29.04.2013, at 16:52, Dominik Dingel wrote:

> Use the passed device, if there is no device, use the first applicable device.
> 
> Signed-off-by: Dominik Dingel <address@hidden>
> 
> diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
> index fd40fa5..206979f 100644
> --- a/pc-bios/s390-ccw/main.c
> +++ b/pc-bios/s390-ccw/main.c
> @@ -12,6 +12,7 @@
> 
> struct subchannel_id blk_schid;
> char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
> +uint64_t boot_value;
> 
> void virtio_panic(const char *string)
> {
> @@ -20,15 +21,20 @@ void virtio_panic(const char *string)
>     while (1) { }
> }
> 
> -static void virtio_setup(void)
> +static void virtio_setup(uint64_t dev_info)
> {
>     struct schib schib;
>     int i;
>     int r;
>     bool found = false;
> -
> +    uint16_t dev_no;
>     blk_schid.one = 1;
> 
> +    if (dev_info != -1) {
> +        dev_no = dev_info & 0xffff; 
> +        debug_print_int("device no. ", dev_no);

It'd be nice if you could make this a bit more obvious.

bool check_devno = false

if (dev_info != -1) {
    check_devno = true;
    ...
}

> +    }
> +
>     for (i = 0; i < 0x10000; i++) {
>         blk_schid.sch_no = i;
>         r = stsch_err(blk_schid, &schib);
> @@ -36,9 +42,14 @@ static void virtio_setup(void)
>             break;
>         }
>         if (schib.pmcw.dnv) {
> -            if (virtio_is_blk(blk_schid)) {
> -                found = true;
> -                break;
> +            if (dev_info != -1 && schib.pmcw.dev != dev_no) {

if (check_devno && ...)

> +                continue;
> +            }
> +            else {

} else {

But really in this case there's no need for that either, since the branch will 
have continue'd anyway. Just close the branch.

> +                if (virtio_is_blk(blk_schid)) {
> +                    found = true;
> +                    break;
> +                }
>             }
>         }
>     }
> @@ -53,7 +64,9 @@ static void virtio_setup(void)
> int main(void)
> {
>     sclp_setup();
> -    virtio_setup();
> +    debug_print_int("boot reg[7]\n", boot_value);

\n?


Alex

> +    virtio_setup(boot_value);
> +    
>     if (zipl_load() < 0)
>         sclp_print("Failed to load OS from hard disk\n");
>     disabled_wait();
> diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S
> index 09deee7..5d5df0d 100644
> --- a/pc-bios/s390-ccw/start.S
> +++ b/pc-bios/s390-ccw/start.S
> @@ -14,6 +14,8 @@
> _start:
> 
> larl  %r15, stack + 0x8000    /* Set up stack */
> +larl    %r6, boot_value
> +stg     %r7, 0(%r6)     /* save the boot_value before any function calls */
> j     main                    /* And call C */
> 
> /*
> -- 
> 1.7.9.5
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]