Skip to content

Commit

Permalink
hgafb: resource management fix
Browse files Browse the repository at this point in the history
Release ports which are requested during detection which are not freed if
there is no hga card.  Otherwise there is a crash during cat /proc/ioports
command.

Signed-off-by: Krzysztof Helt <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Krzysztof-H authored and torvalds committed Jun 13, 2008
1 parent 69c5ddf commit 630c270
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions drivers/video/hgafb.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static void hga_blank(int blank_mode)

static int __init hga_card_detect(void)
{
int count=0;
int count = 0;
void __iomem *p, *q;
unsigned short p_save, q_save;

Expand All @@ -303,20 +303,18 @@ static int __init hga_card_detect(void)
writew(0x55aa, p); if (readw(p) == 0x55aa) count++;
writew(p_save, p);

if (count != 2) {
return 0;
}
if (count != 2)
goto error;

/* Ok, there is definitely a card registering at the correct
* memory location, so now we do an I/O port test.
*/

if (!test_hga_b(0x66, 0x0f)) { /* cursor low register */
return 0;
}
if (!test_hga_b(0x99, 0x0f)) { /* cursor low register */
return 0;
}
if (!test_hga_b(0x66, 0x0f)) /* cursor low register */
goto error;

if (!test_hga_b(0x99, 0x0f)) /* cursor low register */
goto error;

/* See if the card is a Hercules, by checking whether the vsync
* bit of the status register is changing. This test lasts for
Expand All @@ -331,7 +329,7 @@ static int __init hga_card_detect(void)
}

if (p_save == q_save)
return 0;
goto error;

switch (inb_p(HGA_STATUS_PORT) & 0x70) {
case 0x10:
Expand All @@ -348,6 +346,12 @@ static int __init hga_card_detect(void)
break;
}
return 1;
error:
if (release_io_ports)
release_region(0x3b0, 12);
if (release_io_port)
release_region(0x3bf, 1);
return 0;
}

/**
Expand Down

0 comments on commit 630c270

Please sign in to comment.