Skip to content

Commit cc2ea41

Browse files
akpm00Linus Torvalds
authored and
Linus Torvalds
committed
uninline check_signature()
This is a rather bizarre thing to have inlined in io.h. Stick it in lib/ instead. While we're there, despaghetti it a bit, and fix its off-by-one behaviour when passed a zero length. Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 4e7bd66 commit cc2ea41

File tree

3 files changed

+29
-28
lines changed

3 files changed

+29
-28
lines changed

include/linux/io.h

+2-27
Original file line numberDiff line numberDiff line change
@@ -63,32 +63,7 @@ void __iomem * devm_ioremap(struct device *dev, unsigned long offset,
6363
void __iomem * devm_ioremap_nocache(struct device *dev, unsigned long offset,
6464
unsigned long size);
6565
void devm_iounmap(struct device *dev, void __iomem *addr);
66-
67-
/**
68-
* check_signature - find BIOS signatures
69-
* @io_addr: mmio address to check
70-
* @signature: signature block
71-
* @length: length of signature
72-
*
73-
* Perform a signature comparison with the mmio address io_addr. This
74-
* address should have been obtained by ioremap.
75-
* Returns 1 on a match.
76-
*/
77-
78-
static inline int check_signature(const volatile void __iomem *io_addr,
79-
const unsigned char *signature, int length)
80-
{
81-
int retval = 0;
82-
do {
83-
if (readb(io_addr) != *signature)
84-
goto out;
85-
io_addr++;
86-
signature++;
87-
length--;
88-
} while (length);
89-
retval = 1;
90-
out:
91-
return retval;
92-
}
66+
int check_signature(const volatile void __iomem *io_addr,
67+
const unsigned char *signature, int length);
9368

9469
#endif /* _LINUX_IO_H */

lib/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ lib-$(CONFIG_SMP) += cpumask.o
1313
lib-y += kobject.o kref.o kobject_uevent.o klist.o
1414

1515
obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \
16-
bust_spinlocks.o hexdump.o
16+
bust_spinlocks.o hexdump.o check_signature.o
1717

1818
ifeq ($(CONFIG_DEBUG_KOBJECT),y)
1919
CFLAGS_kobject.o += -DDEBUG

lib/check_signature.c

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <linux/io.h>
2+
#include <linux/module.h>
3+
4+
/**
5+
* check_signature - find BIOS signatures
6+
* @io_addr: mmio address to check
7+
* @signature: signature block
8+
* @length: length of signature
9+
*
10+
* Perform a signature comparison with the mmio address io_addr. This
11+
* address should have been obtained by ioremap.
12+
* Returns 1 on a match.
13+
*/
14+
15+
int check_signature(const volatile void __iomem *io_addr,
16+
const unsigned char *signature, int length)
17+
{
18+
while (length--) {
19+
if (readb(io_addr) != *signature)
20+
return 0;
21+
io_addr++;
22+
signature++;
23+
}
24+
return 1;
25+
}
26+
EXPORT_SYMBOL(check_signature);

0 commit comments

Comments
 (0)