diff options
author | sos <sos@FreeBSD.org> | 2002-03-26 09:31:22 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2002-03-26 09:31:22 +0000 |
commit | cf912d2e7adf28df9b489a4fdac3f010cfdd7372 (patch) | |
tree | 1dddd30ce30d7962181ee37dc4ea3687faae43b1 /sys/dev/ata/ata-all.c | |
parent | 5713462d5adb7131b4da0be427ff395fe49a0c81 (diff) | |
download | FreeBSD-src-cf912d2e7adf28df9b489a4fdac3f010cfdd7372.zip FreeBSD-src-cf912d2e7adf28df9b489a4fdac3f010cfdd7372.tar.gz |
Misc little cleanups.
Diffstat (limited to 'sys/dev/ata/ata-all.c')
-rw-r--r-- | sys/dev/ata/ata-all.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index 6b25699..ef47133 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -418,31 +418,27 @@ ata_getparam(struct ata_device *atadev, u_int8_t command) struct ata_params *ata_parm; int retry = 0; + if (!(ata_parm = malloc(sizeof(struct ata_params), M_ATA, M_NOWAIT))) { + ata_prtdev(atadev, "malloc for identify data failed\n"); + return -1; + } + /* apparently some devices needs this repeated */ do { if (ata_command(atadev, command, 0, 0, 0, ATA_WAIT_INTR)) { ata_prtdev(atadev, "%s identify failed\n", command == ATA_C_ATAPI_IDENTIFY ? "ATAPI" : "ATA"); + free(ata_parm, M_ATA); return -1; } if (retry++ > 4) { ata_prtdev(atadev, "%s identify retries exceeded\n", command == ATA_C_ATAPI_IDENTIFY ? "ATAPI" : "ATA"); + free(ata_parm, M_ATA); return -1; } } while (ata_wait(atadev, ((command == ATA_C_ATAPI_IDENTIFY) ? ATA_S_DRQ : (ATA_S_READY|ATA_S_DSC|ATA_S_DRQ)))); - - ata_parm = malloc(sizeof(struct ata_params), M_ATA, M_NOWAIT); - if (!ata_parm) { - int i; - - for (i = 0; i < sizeof(struct ata_params)/sizeof(int16_t); i++) - ATA_INW(atadev->channel->r_io, ATA_DATA); - ata_prtdev(atadev, "malloc for identify data failed\n"); - return -1; - } - ATA_INSW(atadev->channel->r_io, ATA_DATA, (int16_t *)ata_parm, sizeof(struct ata_params)/sizeof(int16_t)); |