Merge branch 'for-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k
Pull m68k fixes from Geert Uytterhoeven: "These are two critical fixes, needed by distro kernels, and thus also destined for stable: - The do_div() commit fixes a crash in mounting btrfs volumes, which was a regression from 3.2, - The ARAnyM fix allows to have NatFeat drivers as loadable modules, which is needed for initrds" * 'for-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k: m68k: Truncate base in do_div() m68k/atari: ARAnyM - Fix NatFeat module support
This commit is contained in:
commit
359d16ca1b
|
@ -18,9 +18,11 @@
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/natfeat.h>
|
#include <asm/natfeat.h>
|
||||||
|
|
||||||
|
extern long nf_get_id2(const char *feature_name);
|
||||||
|
|
||||||
asm("\n"
|
asm("\n"
|
||||||
" .global nf_get_id,nf_call\n"
|
" .global nf_get_id2,nf_call\n"
|
||||||
"nf_get_id:\n"
|
"nf_get_id2:\n"
|
||||||
" .short 0x7300\n"
|
" .short 0x7300\n"
|
||||||
" rts\n"
|
" rts\n"
|
||||||
"nf_call:\n"
|
"nf_call:\n"
|
||||||
|
@ -29,12 +31,25 @@ asm("\n"
|
||||||
"1: moveq.l #0,%d0\n"
|
"1: moveq.l #0,%d0\n"
|
||||||
" rts\n"
|
" rts\n"
|
||||||
" .section __ex_table,\"a\"\n"
|
" .section __ex_table,\"a\"\n"
|
||||||
" .long nf_get_id,1b\n"
|
" .long nf_get_id2,1b\n"
|
||||||
" .long nf_call,1b\n"
|
" .long nf_call,1b\n"
|
||||||
" .previous");
|
" .previous");
|
||||||
EXPORT_SYMBOL_GPL(nf_get_id);
|
|
||||||
EXPORT_SYMBOL_GPL(nf_call);
|
EXPORT_SYMBOL_GPL(nf_call);
|
||||||
|
|
||||||
|
long nf_get_id(const char *feature_name)
|
||||||
|
{
|
||||||
|
/* feature_name may be in vmalloc()ed memory, so make a copy */
|
||||||
|
char name_copy[32];
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
n = strlcpy(name_copy, feature_name, sizeof(name_copy));
|
||||||
|
if (n >= sizeof(name_copy))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return nf_get_id2(name_copy);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nf_get_id);
|
||||||
|
|
||||||
void nfprint(const char *fmt, ...)
|
void nfprint(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char buf[256];
|
static char buf[256];
|
||||||
|
|
|
@ -15,16 +15,17 @@
|
||||||
unsigned long long n64; \
|
unsigned long long n64; \
|
||||||
} __n; \
|
} __n; \
|
||||||
unsigned long __rem, __upper; \
|
unsigned long __rem, __upper; \
|
||||||
|
unsigned long __base = (base); \
|
||||||
\
|
\
|
||||||
__n.n64 = (n); \
|
__n.n64 = (n); \
|
||||||
if ((__upper = __n.n32[0])) { \
|
if ((__upper = __n.n32[0])) { \
|
||||||
asm ("divul.l %2,%1:%0" \
|
asm ("divul.l %2,%1:%0" \
|
||||||
: "=d" (__n.n32[0]), "=d" (__upper) \
|
: "=d" (__n.n32[0]), "=d" (__upper) \
|
||||||
: "d" (base), "0" (__n.n32[0])); \
|
: "d" (__base), "0" (__n.n32[0])); \
|
||||||
} \
|
} \
|
||||||
asm ("divu.l %2,%1:%0" \
|
asm ("divu.l %2,%1:%0" \
|
||||||
: "=d" (__n.n32[1]), "=d" (__rem) \
|
: "=d" (__n.n32[1]), "=d" (__rem) \
|
||||||
: "d" (base), "1" (__upper), "0" (__n.n32[1])); \
|
: "d" (__base), "1" (__upper), "0" (__n.n32[1])); \
|
||||||
(n) = __n.n64; \
|
(n) = __n.n64; \
|
||||||
__rem; \
|
__rem; \
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue