Handle NULL bdrv.
Signed-off-by: Paul Brook <paul@codesourcery.com>
This commit is contained in:
		
							parent
							
								
									b89e94af1d
								
							
						
					
					
						commit
						03f311edd3
					
				
							
								
								
									
										10
									
								
								hw/sd.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								hw/sd.c
									
									
									
									
									
								
							@ -365,7 +365,11 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv)
 | 
				
			|||||||
    uint32_t size;
 | 
					    uint32_t size;
 | 
				
			||||||
    uint64_t sect;
 | 
					    uint64_t sect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (bdrv) {
 | 
				
			||||||
        bdrv_get_geometry(bdrv, §);
 | 
					        bdrv_get_geometry(bdrv, §);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        sect = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    sect <<= 9;
 | 
					    sect <<= 9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (sect > 0x40000000)
 | 
					    if (sect > 0x40000000)
 | 
				
			||||||
@ -388,7 +392,7 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (sd->wp_groups)
 | 
					    if (sd->wp_groups)
 | 
				
			||||||
        qemu_free(sd->wp_groups);
 | 
					        qemu_free(sd->wp_groups);
 | 
				
			||||||
    sd->wp_switch = bdrv_is_read_only(bdrv);
 | 
					    sd->wp_switch = bdrv ? bdrv_is_read_only(bdrv) : 0;
 | 
				
			||||||
    sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect);
 | 
					    sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect);
 | 
				
			||||||
    memset(sd->function_group, 0, sizeof(int) * 6);
 | 
					    memset(sd->function_group, 0, sizeof(int) * 6);
 | 
				
			||||||
    sd->erase_start = 0;
 | 
					    sd->erase_start = 0;
 | 
				
			||||||
@ -421,7 +425,9 @@ SDState *sd_init(BlockDriverState *bs, int is_spi)
 | 
				
			|||||||
    sd->spi = is_spi;
 | 
					    sd->spi = is_spi;
 | 
				
			||||||
    sd->enable = 1;
 | 
					    sd->enable = 1;
 | 
				
			||||||
    sd_reset(sd, bs);
 | 
					    sd_reset(sd, bs);
 | 
				
			||||||
 | 
					    if (sd->bdrv) {
 | 
				
			||||||
        bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd);
 | 
					        bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    return sd;
 | 
					    return sd;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1228,7 +1234,7 @@ int sd_do_command(SDState *sd, struct sd_request_s *req,
 | 
				
			|||||||
    sd_rsp_type_t rtype;
 | 
					    sd_rsp_type_t rtype;
 | 
				
			||||||
    int rsplen;
 | 
					    int rsplen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!bdrv_is_inserted(sd->bdrv) || !sd->enable) {
 | 
					    if (!sd->bdrv || !bdrv_is_inserted(sd->bdrv) || !sd->enable) {
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user