pcmcia: cleanup pccard_validate_cis()
Cleanup pccard_validate_cis() and make it return an error code on all failures, not merely on some failures. Tested-by: Wolfram Sang <w.sang@pengutronix.de> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
904e377744
commit
f131ddc4bd
|
@ -1577,16 +1577,19 @@ next_entry:
|
|||
EXPORT_SYMBOL(pccard_loop_tuple);
|
||||
|
||||
|
||||
/*======================================================================
|
||||
|
||||
This tries to determine if a card has a sensible CIS. It returns
|
||||
the number of tuples in the CIS, or 0 if the CIS looks bad. The
|
||||
checks include making sure several critical tuples are present and
|
||||
valid; seeing if the total number of tuples is reasonable; and
|
||||
looking for tuples that use reserved codes.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
/**
|
||||
* pccard_validate_cis() - check whether card has a sensible CIS
|
||||
* @s: the struct pcmcia_socket we are to check
|
||||
* @info: returns the number of tuples in the (valid) CIS, or 0
|
||||
*
|
||||
* This tries to determine if a card has a sensible CIS. In @info, it
|
||||
* returns the number of tuples in the CIS, or 0 if the CIS looks bad. The
|
||||
* checks include making sure several critical tuples are present and
|
||||
* valid; seeing if the total number of tuples is reasonable; and
|
||||
* looking for tuples that use reserved codes.
|
||||
*
|
||||
* The function returns 0 on success.
|
||||
*/
|
||||
int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
|
||||
{
|
||||
tuple_t *tuple;
|
||||
|
@ -1602,13 +1605,13 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
|
|||
|
||||
tuple = kmalloc(sizeof(*tuple), GFP_KERNEL);
|
||||
if (tuple == NULL) {
|
||||
dev_printk(KERN_WARNING, &s->dev, "no memory to validate CIS\n");
|
||||
dev_warn(&s->dev, "no memory to validate CIS\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
p = kmalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (p == NULL) {
|
||||
kfree(tuple);
|
||||
dev_printk(KERN_WARNING, &s->dev, "no memory to validate CIS\n");
|
||||
dev_warn(&s->dev, "no memory to validate CIS\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -1622,8 +1625,8 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
|
|||
/* First tuple should be DEVICE; we should really have either that
|
||||
or a CFTABLE_ENTRY of some sort */
|
||||
if ((tuple->TupleCode == CISTPL_DEVICE) ||
|
||||
(pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY, p) == 0) ||
|
||||
(pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY_CB, p) == 0))
|
||||
(!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY, p)) ||
|
||||
(!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY_CB, p)))
|
||||
dev_ok++;
|
||||
|
||||
/* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2
|
||||
|
@ -1650,15 +1653,19 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
|
|||
((!dev_ok || !ident_ok) && (count > 10)))
|
||||
count = 0;
|
||||
|
||||
ret = 0;
|
||||
|
||||
done:
|
||||
/* invalidate CIS cache on failure */
|
||||
if (!dev_ok || !ident_ok || !count)
|
||||
if (!dev_ok || !ident_ok || !count) {
|
||||
destroy_cis_cache(s);
|
||||
ret = -EIO;
|
||||
}
|
||||
|
||||
if (info)
|
||||
*info = count;
|
||||
kfree(tuple);
|
||||
kfree(p);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(pccard_validate_cis);
|
||||
|
|
Loading…
Reference in New Issue