Commit 03f311edd33191bae9a2b1a89e37d6e2a8363a69
1 parent
b89e94af
Handle NULL bdrv.
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
1 changed file
with
10 additions
and
4 deletions
hw/sd.c
@@ -365,7 +365,11 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) | @@ -365,7 +365,11 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) | ||
365 | uint32_t size; | 365 | uint32_t size; |
366 | uint64_t sect; | 366 | uint64_t sect; |
367 | 367 | ||
368 | - bdrv_get_geometry(bdrv, §); | 368 | + if (bdrv) { |
369 | + bdrv_get_geometry(bdrv, §); | ||
370 | + } else { | ||
371 | + sect = 0; | ||
372 | + } | ||
369 | sect <<= 9; | 373 | sect <<= 9; |
370 | 374 | ||
371 | if (sect > 0x40000000) | 375 | if (sect > 0x40000000) |
@@ -388,7 +392,7 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) | @@ -388,7 +392,7 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) | ||
388 | 392 | ||
389 | if (sd->wp_groups) | 393 | if (sd->wp_groups) |
390 | qemu_free(sd->wp_groups); | 394 | qemu_free(sd->wp_groups); |
391 | - sd->wp_switch = bdrv_is_read_only(bdrv); | 395 | + sd->wp_switch = bdrv ? bdrv_is_read_only(bdrv) : 0; |
392 | sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect); | 396 | sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect); |
393 | memset(sd->function_group, 0, sizeof(int) * 6); | 397 | memset(sd->function_group, 0, sizeof(int) * 6); |
394 | sd->erase_start = 0; | 398 | sd->erase_start = 0; |
@@ -421,7 +425,9 @@ SDState *sd_init(BlockDriverState *bs, int is_spi) | @@ -421,7 +425,9 @@ SDState *sd_init(BlockDriverState *bs, int is_spi) | ||
421 | sd->spi = is_spi; | 425 | sd->spi = is_spi; |
422 | sd->enable = 1; | 426 | sd->enable = 1; |
423 | sd_reset(sd, bs); | 427 | sd_reset(sd, bs); |
424 | - bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); | 428 | + if (sd->bdrv) { |
429 | + bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); | ||
430 | + } | ||
425 | return sd; | 431 | return sd; |
426 | } | 432 | } |
427 | 433 | ||
@@ -1228,7 +1234,7 @@ int sd_do_command(SDState *sd, struct sd_request_s *req, | @@ -1228,7 +1234,7 @@ int sd_do_command(SDState *sd, struct sd_request_s *req, | ||
1228 | sd_rsp_type_t rtype; | 1234 | sd_rsp_type_t rtype; |
1229 | int rsplen; | 1235 | int rsplen; |
1230 | 1236 | ||
1231 | - if (!bdrv_is_inserted(sd->bdrv) || !sd->enable) { | 1237 | + if (!sd->bdrv || !bdrv_is_inserted(sd->bdrv) || !sd->enable) { |
1232 | return 0; | 1238 | return 0; |
1233 | } | 1239 | } |
1234 | 1240 |