parisc architecture updates for kernel 5.15:
- Fix a kernel crash when a signal is delivered to bad userspace stack - Fix fall-through warnings in math-emu code - Increase size of gcc stack frame check - Switch coding from 'pci_' to 'dma_' API - Make struct parisc_driver::remove() return void - Some parisc related Makefile changes - Minor cleanups, e.g. change to octal permissions, fix macro collisions, fix PMD_ORDER collision, replace spaces with tabs -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQS86RI+GtKfB8BJu973ErUQojoPXwUCYTELwQAKCRD3ErUQojoP Xy/uAQChkDVD15kBvj0PUt4hDpGq7ryfAsEfMnxlV2k4Ue6SKAEA3Smfd242lpPF f89NNo6Y/ZhO+aWKfOLerXLfM6sB2QQ= =cxvN -----END PGP SIGNATURE----- Merge tag 'for-5.15/parisc' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux Pull parisc architecture updates from Helge Deller: - Fix a kernel crash when a signal is delivered to bad userspace stack - Fix fall-through warnings in math-emu code - Increase size of gcc stack frame check - Switch coding from 'pci_' to 'dma_' API - Make struct parisc_driver::remove() return void - Some parisc related Makefile changes - Minor cleanups, e.g. change to octal permissions, fix macro collisions, fix PMD_ORDER collision, replace spaces with tabs * tag 'for-5.15/parisc' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: math-emu: Fix fall-through warnings parisc: fix crash with signals and alloca parisc: Fix compile failure when building 64-bit kernel natively parisc: ccio-dma.c: Added tab instead of spaces parisc/parport_gsc: switch from 'pci_' to 'dma_' API parisc: move core-y in arch/parisc/Makefile to arch/parisc/Kbuild parisc: switch from 'pci_' to 'dma_' API parisc: Make struct parisc_driver::remove() return void parisc: remove unused arch/parisc/boot/install.sh and its phony target parisc: Rename PMD_ORDER to PMD_TABLE_ORDER parisc: math-emu: Avoid "fmt" macro collision parisc: Increase size of gcc stack frame check parisc: Replace symbolic permissions with octal permissions
This commit is contained in:
Коммит
a2d616b935
5
Makefile
5
Makefile
|
@ -404,6 +404,11 @@ ifeq ($(ARCH),sparc64)
|
||||||
SRCARCH := sparc
|
SRCARCH := sparc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Additional ARCH settings for parisc
|
||||||
|
ifeq ($(ARCH),parisc64)
|
||||||
|
SRCARCH := parisc
|
||||||
|
endif
|
||||||
|
|
||||||
export cross_compiling :=
|
export cross_compiling :=
|
||||||
ifneq ($(SRCARCH),$(SUBARCH))
|
ifneq ($(SRCARCH),$(SUBARCH))
|
||||||
cross_compiling := 1
|
cross_compiling := 1
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
obj-y += mm/ kernel/ math-emu/
|
||||||
|
|
|
@ -25,18 +25,18 @@ CHECKFLAGS += -D__hppa__=1
|
||||||
ifdef CONFIG_64BIT
|
ifdef CONFIG_64BIT
|
||||||
UTS_MACHINE := parisc64
|
UTS_MACHINE := parisc64
|
||||||
CHECKFLAGS += -D__LP64__=1
|
CHECKFLAGS += -D__LP64__=1
|
||||||
CC_ARCHES = hppa64
|
|
||||||
LD_BFD := elf64-hppa-linux
|
LD_BFD := elf64-hppa-linux
|
||||||
else # 32-bit
|
else # 32-bit
|
||||||
CC_ARCHES = hppa hppa2.0 hppa1.1
|
|
||||||
LD_BFD := elf32-hppa-linux
|
LD_BFD := elf32-hppa-linux
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# select defconfig based on actual architecture
|
# select defconfig based on actual architecture
|
||||||
ifeq ($(shell uname -m),parisc64)
|
ifeq ($(ARCH),parisc64)
|
||||||
KBUILD_DEFCONFIG := generic-64bit_defconfig
|
KBUILD_DEFCONFIG := generic-64bit_defconfig
|
||||||
|
CC_ARCHES := hppa64
|
||||||
else
|
else
|
||||||
KBUILD_DEFCONFIG := generic-32bit_defconfig
|
KBUILD_DEFCONFIG := generic-32bit_defconfig
|
||||||
|
CC_ARCHES := hppa hppa2.0 hppa1.1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export LD_BFD
|
export LD_BFD
|
||||||
|
@ -111,9 +111,6 @@ KBUILD_CFLAGS += $(cflags-y)
|
||||||
LIBGCC := $(shell $(CC) -print-libgcc-file-name)
|
LIBGCC := $(shell $(CC) -print-libgcc-file-name)
|
||||||
export LIBGCC
|
export LIBGCC
|
||||||
|
|
||||||
kernel-y := mm/ kernel/ math-emu/
|
|
||||||
|
|
||||||
core-y += $(addprefix arch/parisc/, $(kernel-y))
|
|
||||||
libs-y += arch/parisc/lib/ $(LIBGCC)
|
libs-y += arch/parisc/lib/ $(LIBGCC)
|
||||||
|
|
||||||
boot := arch/parisc/boot
|
boot := arch/parisc/boot
|
||||||
|
|
|
@ -15,7 +15,3 @@ $(obj)/bzImage: $(obj)/compressed/vmlinux FORCE
|
||||||
|
|
||||||
$(obj)/compressed/vmlinux: FORCE
|
$(obj)/compressed/vmlinux: FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
||||||
|
|
||||||
install: $(CONFIGURE) $(obj)/bzImage
|
|
||||||
sh -x $(srctree)/$(obj)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
|
|
||||||
System.map "$(INSTALL_PATH)"
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# arch/parisc/install.sh, derived from arch/i386/boot/install.sh
|
|
||||||
#
|
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
|
||||||
# for more details.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1995 by Linus Torvalds
|
|
||||||
#
|
|
||||||
# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
|
|
||||||
#
|
|
||||||
# "make install" script for i386 architecture
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - kernel version
|
|
||||||
# $2 - kernel image file
|
|
||||||
# $3 - kernel map file
|
|
||||||
# $4 - default install path (blank if root directory)
|
|
||||||
#
|
|
||||||
|
|
||||||
verify () {
|
|
||||||
if [ ! -f "$1" ]; then
|
|
||||||
echo "" 1>&2
|
|
||||||
echo " *** Missing file: $1" 1>&2
|
|
||||||
echo ' *** You need to run "make" before "make install".' 1>&2
|
|
||||||
echo "" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Make sure the files actually exist
|
|
||||||
|
|
||||||
verify "$2"
|
|
||||||
verify "$3"
|
|
||||||
|
|
||||||
# User may have a custom install script
|
|
||||||
|
|
||||||
if [ -n "${INSTALLKERNEL}" ]; then
|
|
||||||
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
|
||||||
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Default install
|
|
||||||
|
|
||||||
if [ "$(basename $2)" = "zImage" ]; then
|
|
||||||
# Compressed install
|
|
||||||
echo "Installing compressed kernel"
|
|
||||||
base=vmlinuz
|
|
||||||
else
|
|
||||||
# Normal install
|
|
||||||
echo "Installing normal kernel"
|
|
||||||
base=vmlinux
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f $4/$base-$1 ]; then
|
|
||||||
mv $4/$base-$1 $4/$base-$1.old
|
|
||||||
fi
|
|
||||||
cat $2 > $4/$base-$1
|
|
||||||
|
|
||||||
# Install system map file
|
|
||||||
if [ -f $4/System.map-$1 ]; then
|
|
||||||
mv $4/System.map-$1 $4/System.map-$1.old
|
|
||||||
fi
|
|
||||||
cp $3 $4/System.map-$1
|
|
|
@ -34,8 +34,8 @@ struct parisc_driver {
|
||||||
struct parisc_driver *next;
|
struct parisc_driver *next;
|
||||||
char *name;
|
char *name;
|
||||||
const struct parisc_device_id *id_table;
|
const struct parisc_device_id *id_table;
|
||||||
int (*probe) (struct parisc_device *dev); /* New device discovered */
|
int (*probe)(struct parisc_device *dev); /* New device discovered */
|
||||||
int (*remove) (struct parisc_device *dev);
|
void (*remove)(struct parisc_device *dev);
|
||||||
struct device_driver drv;
|
struct device_driver drv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -48,15 +48,15 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||||
{
|
{
|
||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
|
|
||||||
pmd = (pmd_t *)__get_free_pages(GFP_PGTABLE_KERNEL, PMD_ORDER);
|
pmd = (pmd_t *)__get_free_pages(GFP_PGTABLE_KERNEL, PMD_TABLE_ORDER);
|
||||||
if (likely(pmd))
|
if (likely(pmd))
|
||||||
memset ((void *)pmd, 0, PAGE_SIZE << PMD_ORDER);
|
memset ((void *)pmd, 0, PAGE_SIZE << PMD_TABLE_ORDER);
|
||||||
return pmd;
|
return pmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
||||||
{
|
{
|
||||||
free_pages((unsigned long)pmd, PMD_ORDER);
|
free_pages((unsigned long)pmd, PMD_TABLE_ORDER);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
||||||
#define KERNEL_INITIAL_SIZE (1 << KERNEL_INITIAL_ORDER)
|
#define KERNEL_INITIAL_SIZE (1 << KERNEL_INITIAL_ORDER)
|
||||||
|
|
||||||
#if CONFIG_PGTABLE_LEVELS == 3
|
#if CONFIG_PGTABLE_LEVELS == 3
|
||||||
#define PMD_ORDER 1
|
#define PMD_TABLE_ORDER 1
|
||||||
#define PGD_ORDER 0
|
#define PGD_ORDER 0
|
||||||
#else
|
#else
|
||||||
#define PGD_ORDER 1
|
#define PGD_ORDER 1
|
||||||
|
@ -131,7 +131,7 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
||||||
#define PMD_SHIFT (PLD_SHIFT + BITS_PER_PTE)
|
#define PMD_SHIFT (PLD_SHIFT + BITS_PER_PTE)
|
||||||
#define PMD_SIZE (1UL << PMD_SHIFT)
|
#define PMD_SIZE (1UL << PMD_SHIFT)
|
||||||
#define PMD_MASK (~(PMD_SIZE-1))
|
#define PMD_MASK (~(PMD_SIZE-1))
|
||||||
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
|
#define BITS_PER_PMD (PAGE_SHIFT + PMD_TABLE_ORDER - BITS_PER_PMD_ENTRY)
|
||||||
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
||||||
#else
|
#else
|
||||||
#define BITS_PER_PMD 0
|
#define BITS_PER_PMD 0
|
||||||
|
|
|
@ -237,6 +237,12 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
usp = (regs->gr[30] & ~(0x01UL));
|
usp = (regs->gr[30] & ~(0x01UL));
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
if (is_compat_task()) {
|
||||||
|
/* The gcc alloca implementation leaves garbage in the upper 32 bits of sp */
|
||||||
|
usp = (compat_uint_t)usp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/*FIXME: frame_size parameter is unused, remove it. */
|
/*FIXME: frame_size parameter is unused, remove it. */
|
||||||
frame = get_sigframe(&ksig->ka, usp, sizeof(*frame));
|
frame = get_sigframe(&ksig->ka, usp, sizeof(*frame));
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#define SIGNALCODE(signal, code) ((signal) << 24 | (code))
|
#define SIGNALCODE(signal, code) ((signal) << 24 | (code))
|
||||||
#define copropbit 1<<31-2 /* bit position 2 */
|
#define copropbit 1<<31-2 /* bit position 2 */
|
||||||
#define opclass 9 /* bits 21 & 22 */
|
#define opclass 9 /* bits 21 & 22 */
|
||||||
#define fmt 11 /* bits 19 & 20 */
|
#define fmtbits 11 /* bits 19 & 20 */
|
||||||
#define df 13 /* bits 17 & 18 */
|
#define df 13 /* bits 17 & 18 */
|
||||||
#define twobits 3 /* mask low-order 2 bits */
|
#define twobits 3 /* mask low-order 2 bits */
|
||||||
#define fivebits 31 /* mask low-order 5 bits */
|
#define fivebits 31 /* mask low-order 5 bits */
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
#define Excp_instr(index) Instructionfield(Fpu_register[index])
|
#define Excp_instr(index) Instructionfield(Fpu_register[index])
|
||||||
#define Clear_excp_register(index) Allexception(Fpu_register[index]) = 0
|
#define Clear_excp_register(index) Allexception(Fpu_register[index]) = 0
|
||||||
#define Excp_format() \
|
#define Excp_format() \
|
||||||
(current_ir >> ((current_ir>>opclass & twobits)==1 ? df : fmt) & twobits)
|
(current_ir >> ((current_ir>>opclass & twobits) == 1 ? df : fmtbits) & twobits)
|
||||||
|
|
||||||
/* Miscellaneous definitions */
|
/* Miscellaneous definitions */
|
||||||
#define Fpu_sgl(index) Fpu_register[index*2]
|
#define Fpu_sgl(index) Fpu_register[index*2]
|
||||||
|
|
|
@ -310,12 +310,15 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
r1 &= ~3;
|
r1 &= ~3;
|
||||||
fpregs[t+3] = fpregs[r1+3];
|
fpregs[t+3] = fpregs[r1+3];
|
||||||
fpregs[t+2] = fpregs[r1+2];
|
fpregs[t+2] = fpregs[r1+2];
|
||||||
|
fallthrough;
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
fpregs[t] = fpregs[r1];
|
fpregs[t] = fpregs[r1];
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FABS */
|
case 3: /* FABS */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2: /* illegal */
|
case 2: /* illegal */
|
||||||
|
@ -325,13 +328,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
r1 &= ~3;
|
r1 &= ~3;
|
||||||
fpregs[t+3] = fpregs[r1+3];
|
fpregs[t+3] = fpregs[r1+3];
|
||||||
fpregs[t+2] = fpregs[r1+2];
|
fpregs[t+2] = fpregs[r1+2];
|
||||||
|
fallthrough;
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
/* copy and clear sign bit */
|
/* copy and clear sign bit */
|
||||||
fpregs[t] = fpregs[r1] & 0x7fffffff;
|
fpregs[t] = fpregs[r1] & 0x7fffffff;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 6: /* FNEG */
|
case 6: /* FNEG */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2: /* illegal */
|
case 2: /* illegal */
|
||||||
|
@ -341,13 +347,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
r1 &= ~3;
|
r1 &= ~3;
|
||||||
fpregs[t+3] = fpregs[r1+3];
|
fpregs[t+3] = fpregs[r1+3];
|
||||||
fpregs[t+2] = fpregs[r1+2];
|
fpregs[t+2] = fpregs[r1+2];
|
||||||
|
fallthrough;
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
/* copy and invert sign bit */
|
/* copy and invert sign bit */
|
||||||
fpregs[t] = fpregs[r1] ^ 0x80000000;
|
fpregs[t] = fpregs[r1] ^ 0x80000000;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 7: /* FNEGABS */
|
case 7: /* FNEGABS */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2: /* illegal */
|
case 2: /* illegal */
|
||||||
|
@ -357,13 +366,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
r1 &= ~3;
|
r1 &= ~3;
|
||||||
fpregs[t+3] = fpregs[r1+3];
|
fpregs[t+3] = fpregs[r1+3];
|
||||||
fpregs[t+2] = fpregs[r1+2];
|
fpregs[t+2] = fpregs[r1+2];
|
||||||
|
fallthrough;
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
/* copy and set sign bit */
|
/* copy and set sign bit */
|
||||||
fpregs[t] = fpregs[r1] | 0x80000000;
|
fpregs[t] = fpregs[r1] | 0x80000000;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* FSQRT */
|
case 4: /* FSQRT */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -376,6 +388,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 5: /* FRND */
|
case 5: /* FRND */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -389,7 +402,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
} /* end of switch (subop) */
|
} /* end of switch (subop) */
|
||||||
|
BUG();
|
||||||
case 1: /* class 1 */
|
case 1: /* class 1 */
|
||||||
df = extru(ir,fpdfpos,2); /* get dest format */
|
df = extru(ir,fpdfpos,2); /* get dest format */
|
||||||
if ((df & 2) || (fmt & 2)) {
|
if ((df & 2) || (fmt & 2)) {
|
||||||
|
@ -419,6 +432,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* dbl/dbl */
|
case 3: /* dbl/dbl */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 1: /* FCNVXF */
|
case 1: /* FCNVXF */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -434,6 +448,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvxf(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvxf(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 2: /* FCNVFX */
|
case 2: /* FCNVFX */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -449,6 +464,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvfx(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfx(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FCNVFXT */
|
case 3: /* FCNVFXT */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -464,6 +480,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 5: /* FCNVUF (PA2.0 only) */
|
case 5: /* FCNVUF (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -479,6 +496,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvuf(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvuf(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 6: /* FCNVFU (PA2.0 only) */
|
case 6: /* FCNVFU (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -494,6 +512,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvfu(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfu(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 7: /* FCNVFUT (PA2.0 only) */
|
case 7: /* FCNVFUT (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -509,10 +528,11 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
return(dbl_to_dbl_fcnvfut(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfut(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* undefined */
|
case 4: /* undefined */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
} /* end of switch subop */
|
} /* end of switch subop */
|
||||||
|
BUG();
|
||||||
case 2: /* class 2 */
|
case 2: /* class 2 */
|
||||||
fpu_type_flags=fpregs[FPU_TYPE_FLAG_POS];
|
fpu_type_flags=fpregs[FPU_TYPE_FLAG_POS];
|
||||||
r2 = extru(ir, fpr2pos, 5) * sizeof(double)/sizeof(u_int);
|
r2 = extru(ir, fpr2pos, 5) * sizeof(double)/sizeof(u_int);
|
||||||
|
@ -590,6 +610,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 1: /* FTEST */
|
case 1: /* FTEST */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -609,8 +630,10 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3:
|
case 3:
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
} /* end of switch subop */
|
} /* end of switch subop */
|
||||||
} /* end of else for PA1.0 & PA1.1 */
|
} /* end of else for PA1.0 & PA1.1 */
|
||||||
|
BUG();
|
||||||
case 3: /* class 3 */
|
case 3: /* class 3 */
|
||||||
r2 = extru(ir,fpr2pos,5) * sizeof(double)/sizeof(u_int);
|
r2 = extru(ir,fpr2pos,5) * sizeof(double)/sizeof(u_int);
|
||||||
if (r2 == 0)
|
if (r2 == 0)
|
||||||
|
@ -633,6 +656,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 1: /* FSUB */
|
case 1: /* FSUB */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -645,6 +669,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 2: /* FMPY */
|
case 2: /* FMPY */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -657,6 +682,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FDIV */
|
case 3: /* FDIV */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -669,6 +695,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* FREM */
|
case 4: /* FREM */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -681,6 +708,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[])
|
||||||
case 3: /* quad not implemented */
|
case 3: /* quad not implemented */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
} /* end of class 3 switch */
|
} /* end of class 3 switch */
|
||||||
} /* end of switch(class) */
|
} /* end of switch(class) */
|
||||||
|
|
||||||
|
@ -736,10 +764,12 @@ u_int fpregs[];
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
fpregs[t] = fpregs[r1];
|
fpregs[t] = fpregs[r1];
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FABS */
|
case 3: /* FABS */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -747,10 +777,12 @@ u_int fpregs[];
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
fpregs[t] = fpregs[r1] & 0x7fffffff;
|
fpregs[t] = fpregs[r1] & 0x7fffffff;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 6: /* FNEG */
|
case 6: /* FNEG */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -758,10 +790,12 @@ u_int fpregs[];
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
fpregs[t] = fpregs[r1] ^ 0x80000000;
|
fpregs[t] = fpregs[r1] ^ 0x80000000;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 7: /* FNEGABS */
|
case 7: /* FNEGABS */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -769,10 +803,12 @@ u_int fpregs[];
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
case 1: /* double */
|
case 1: /* double */
|
||||||
fpregs[t+1] = fpregs[r1+1];
|
fpregs[t+1] = fpregs[r1+1];
|
||||||
|
fallthrough;
|
||||||
case 0: /* single */
|
case 0: /* single */
|
||||||
fpregs[t] = fpregs[r1] | 0x80000000;
|
fpregs[t] = fpregs[r1] | 0x80000000;
|
||||||
return(NOEXCEPTION);
|
return(NOEXCEPTION);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* FSQRT */
|
case 4: /* FSQRT */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -785,6 +821,7 @@ u_int fpregs[];
|
||||||
case 3:
|
case 3:
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 5: /* FRMD */
|
case 5: /* FRMD */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -798,7 +835,7 @@ u_int fpregs[];
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
}
|
}
|
||||||
} /* end of switch (subop */
|
} /* end of switch (subop */
|
||||||
|
BUG();
|
||||||
case 1: /* class 1 */
|
case 1: /* class 1 */
|
||||||
df = extru(ir,fpdfpos,2); /* get dest format */
|
df = extru(ir,fpdfpos,2); /* get dest format */
|
||||||
/*
|
/*
|
||||||
|
@ -826,6 +863,7 @@ u_int fpregs[];
|
||||||
case 3: /* dbl/dbl */
|
case 3: /* dbl/dbl */
|
||||||
return(MAJOR_0E_EXCP);
|
return(MAJOR_0E_EXCP);
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 1: /* FCNVXF */
|
case 1: /* FCNVXF */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -841,6 +879,7 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvxf(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvxf(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 2: /* FCNVFX */
|
case 2: /* FCNVFX */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -856,6 +895,7 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvfx(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfx(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FCNVFXT */
|
case 3: /* FCNVFXT */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -871,6 +911,7 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 5: /* FCNVUF (PA2.0 only) */
|
case 5: /* FCNVUF (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -886,6 +927,7 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvuf(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvuf(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 6: /* FCNVFU (PA2.0 only) */
|
case 6: /* FCNVFU (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -901,6 +943,7 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvfu(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfu(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 7: /* FCNVFUT (PA2.0 only) */
|
case 7: /* FCNVFUT (PA2.0 only) */
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
case 0: /* sgl/sgl */
|
case 0: /* sgl/sgl */
|
||||||
|
@ -916,9 +959,11 @@ u_int fpregs[];
|
||||||
return(dbl_to_dbl_fcnvfut(&fpregs[r1],0,
|
return(dbl_to_dbl_fcnvfut(&fpregs[r1],0,
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* undefined */
|
case 4: /* undefined */
|
||||||
return(MAJOR_0C_EXCP);
|
return(MAJOR_0C_EXCP);
|
||||||
} /* end of switch subop */
|
} /* end of switch subop */
|
||||||
|
BUG();
|
||||||
case 2: /* class 2 */
|
case 2: /* class 2 */
|
||||||
/*
|
/*
|
||||||
* Be careful out there.
|
* Be careful out there.
|
||||||
|
@ -994,6 +1039,7 @@ u_int fpregs[];
|
||||||
}
|
}
|
||||||
} /* end of switch subop */
|
} /* end of switch subop */
|
||||||
} /* end of else for PA1.0 & PA1.1 */
|
} /* end of else for PA1.0 & PA1.1 */
|
||||||
|
BUG();
|
||||||
case 3: /* class 3 */
|
case 3: /* class 3 */
|
||||||
/*
|
/*
|
||||||
* Be careful out there.
|
* Be careful out there.
|
||||||
|
@ -1026,6 +1072,7 @@ u_int fpregs[];
|
||||||
return(dbl_fadd(&fpregs[r1],&fpregs[r2],
|
return(dbl_fadd(&fpregs[r1],&fpregs[r2],
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 1: /* FSUB */
|
case 1: /* FSUB */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1035,6 +1082,7 @@ u_int fpregs[];
|
||||||
return(dbl_fsub(&fpregs[r1],&fpregs[r2],
|
return(dbl_fsub(&fpregs[r1],&fpregs[r2],
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 2: /* FMPY or XMPYU */
|
case 2: /* FMPY or XMPYU */
|
||||||
/*
|
/*
|
||||||
* check for integer multiply (x bit set)
|
* check for integer multiply (x bit set)
|
||||||
|
@ -1071,6 +1119,7 @@ u_int fpregs[];
|
||||||
&fpregs[r2],&fpregs[t],status));
|
&fpregs[r2],&fpregs[t],status));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 3: /* FDIV */
|
case 3: /* FDIV */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1080,6 +1129,7 @@ u_int fpregs[];
|
||||||
return(dbl_fdiv(&fpregs[r1],&fpregs[r2],
|
return(dbl_fdiv(&fpregs[r1],&fpregs[r2],
|
||||||
&fpregs[t],status));
|
&fpregs[t],status));
|
||||||
}
|
}
|
||||||
|
BUG();
|
||||||
case 4: /* FREM */
|
case 4: /* FREM */
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
|
@ -378,8 +378,8 @@ static void __init map_pages(unsigned long start_vaddr,
|
||||||
|
|
||||||
#if CONFIG_PGTABLE_LEVELS == 3
|
#if CONFIG_PGTABLE_LEVELS == 3
|
||||||
if (pud_none(*pud)) {
|
if (pud_none(*pud)) {
|
||||||
pmd = memblock_alloc(PAGE_SIZE << PMD_ORDER,
|
pmd = memblock_alloc(PAGE_SIZE << PMD_TABLE_ORDER,
|
||||||
PAGE_SIZE << PMD_ORDER);
|
PAGE_SIZE << PMD_TABLE_ORDER);
|
||||||
if (!pmd)
|
if (!pmd)
|
||||||
panic("pmd allocation failed.\n");
|
panic("pmd allocation failed.\n");
|
||||||
pud_populate(NULL, pud, pmd);
|
pud_populate(NULL, pud, pmd);
|
||||||
|
|
|
@ -73,7 +73,7 @@ irqreturn_t ipmi_si_irq_handler(int irq, void *data);
|
||||||
void ipmi_irq_start_cleanup(struct si_sm_io *io);
|
void ipmi_irq_start_cleanup(struct si_sm_io *io);
|
||||||
int ipmi_std_irq_setup(struct si_sm_io *io);
|
int ipmi_std_irq_setup(struct si_sm_io *io);
|
||||||
void ipmi_irq_finish_setup(struct si_sm_io *io);
|
void ipmi_irq_finish_setup(struct si_sm_io *io);
|
||||||
int ipmi_si_remove_by_dev(struct device *dev);
|
void ipmi_si_remove_by_dev(struct device *dev);
|
||||||
struct device *ipmi_si_remove_by_data(int addr_space, enum si_type si_type,
|
struct device *ipmi_si_remove_by_data(int addr_space, enum si_type si_type,
|
||||||
unsigned long addr);
|
unsigned long addr);
|
||||||
void ipmi_hardcode_init(void);
|
void ipmi_hardcode_init(void);
|
||||||
|
|
|
@ -2228,22 +2228,18 @@ static void cleanup_one_si(struct smi_info *smi_info)
|
||||||
kfree(smi_info);
|
kfree(smi_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipmi_si_remove_by_dev(struct device *dev)
|
void ipmi_si_remove_by_dev(struct device *dev)
|
||||||
{
|
{
|
||||||
struct smi_info *e;
|
struct smi_info *e;
|
||||||
int rv = -ENOENT;
|
|
||||||
|
|
||||||
mutex_lock(&smi_infos_lock);
|
mutex_lock(&smi_infos_lock);
|
||||||
list_for_each_entry(e, &smi_infos, link) {
|
list_for_each_entry(e, &smi_infos, link) {
|
||||||
if (e->io.dev == dev) {
|
if (e->io.dev == dev) {
|
||||||
cleanup_one_si(e);
|
cleanup_one_si(e);
|
||||||
rv = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mutex_unlock(&smi_infos_lock);
|
mutex_unlock(&smi_infos_lock);
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct device *ipmi_si_remove_by_data(int addr_space, enum si_type si_type,
|
struct device *ipmi_si_remove_by_data(int addr_space, enum si_type si_type,
|
||||||
|
|
|
@ -29,9 +29,9 @@ static int __init ipmi_parisc_probe(struct parisc_device *dev)
|
||||||
return ipmi_si_add_smi(&io);
|
return ipmi_si_add_smi(&io);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit ipmi_parisc_remove(struct parisc_device *dev)
|
static void __exit ipmi_parisc_remove(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
return ipmi_si_remove_by_dev(&dev->dev);
|
ipmi_si_remove_by_dev(&dev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = {
|
static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = {
|
||||||
|
|
|
@ -411,7 +411,9 @@ static int ipmi_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
static int ipmi_remove(struct platform_device *pdev)
|
static int ipmi_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
return ipmi_si_remove_by_dev(&pdev->dev);
|
ipmi_si_remove_by_dev(&pdev->dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pdev_match_name(struct device *dev, const void *data)
|
static int pdev_match_name(struct device *dev, const void *data)
|
||||||
|
|
|
@ -316,11 +316,9 @@ static int __init hil_probe_chip(struct parisc_device *dev)
|
||||||
return hil_keyb_init();
|
return hil_keyb_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit hil_remove_chip(struct parisc_device *dev)
|
static void __exit hil_remove_chip(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
hil_keyb_exit();
|
hil_keyb_exit();
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct parisc_device_id hil_tbl[] __initconst = {
|
static const struct parisc_device_id hil_tbl[] __initconst = {
|
||||||
|
|
|
@ -411,7 +411,7 @@ fail_nomem:
|
||||||
* @return: success/error report
|
* @return: success/error report
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int __exit gscps2_remove(struct parisc_device *dev)
|
static void __exit gscps2_remove(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
struct gscps2port *ps2port = dev_get_drvdata(&dev->dev);
|
struct gscps2port *ps2port = dev_get_drvdata(&dev->dev);
|
||||||
|
|
||||||
|
@ -425,7 +425,6 @@ static int __exit gscps2_remove(struct parisc_device *dev)
|
||||||
#endif
|
#endif
|
||||||
dev_set_drvdata(&dev->dev, NULL);
|
dev_set_drvdata(&dev->dev, NULL);
|
||||||
kfree(ps2port);
|
kfree(ps2port);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -196,7 +196,7 @@ out_free_netdev:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit lan_remove_chip(struct parisc_device *pdev)
|
static void __exit lan_remove_chip(struct parisc_device *pdev)
|
||||||
{
|
{
|
||||||
struct net_device *dev = parisc_get_drvdata(pdev);
|
struct net_device *dev = parisc_get_drvdata(pdev);
|
||||||
struct i596_private *lp = netdev_priv(dev);
|
struct i596_private *lp = netdev_priv(dev);
|
||||||
|
@ -205,7 +205,6 @@ static int __exit lan_remove_chip(struct parisc_device *pdev)
|
||||||
dma_free_noncoherent(&pdev->dev, sizeof(struct i596_private), lp->dma,
|
dma_free_noncoherent(&pdev->dev, sizeof(struct i596_private), lp->dma,
|
||||||
lp->dma_addr, DMA_BIDIRECTIONAL);
|
lp->dma_addr, DMA_BIDIRECTIONAL);
|
||||||
free_netdev (dev);
|
free_netdev (dev);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct parisc_device_id lan_tbl[] __initconst = {
|
static const struct parisc_device_id lan_tbl[] __initconst = {
|
||||||
|
|
|
@ -111,29 +111,29 @@
|
||||||
#define CMD_TLB_PURGE 33 /* IO_COMMAND to Purge I/O TLB entry */
|
#define CMD_TLB_PURGE 33 /* IO_COMMAND to Purge I/O TLB entry */
|
||||||
|
|
||||||
struct ioa_registers {
|
struct ioa_registers {
|
||||||
/* Runway Supervisory Set */
|
/* Runway Supervisory Set */
|
||||||
int32_t unused1[12];
|
int32_t unused1[12];
|
||||||
uint32_t io_command; /* Offset 12 */
|
uint32_t io_command; /* Offset 12 */
|
||||||
uint32_t io_status; /* Offset 13 */
|
uint32_t io_status; /* Offset 13 */
|
||||||
uint32_t io_control; /* Offset 14 */
|
uint32_t io_control; /* Offset 14 */
|
||||||
int32_t unused2[1];
|
int32_t unused2[1];
|
||||||
|
|
||||||
/* Runway Auxiliary Register Set */
|
/* Runway Auxiliary Register Set */
|
||||||
uint32_t io_err_resp; /* Offset 0 */
|
uint32_t io_err_resp; /* Offset 0 */
|
||||||
uint32_t io_err_info; /* Offset 1 */
|
uint32_t io_err_info; /* Offset 1 */
|
||||||
uint32_t io_err_req; /* Offset 2 */
|
uint32_t io_err_req; /* Offset 2 */
|
||||||
uint32_t io_err_resp_hi; /* Offset 3 */
|
uint32_t io_err_resp_hi; /* Offset 3 */
|
||||||
uint32_t io_tlb_entry_m; /* Offset 4 */
|
uint32_t io_tlb_entry_m; /* Offset 4 */
|
||||||
uint32_t io_tlb_entry_l; /* Offset 5 */
|
uint32_t io_tlb_entry_l; /* Offset 5 */
|
||||||
uint32_t unused3[1];
|
uint32_t unused3[1];
|
||||||
uint32_t io_pdir_base; /* Offset 7 */
|
uint32_t io_pdir_base; /* Offset 7 */
|
||||||
uint32_t io_io_low_hv; /* Offset 8 */
|
uint32_t io_io_low_hv; /* Offset 8 */
|
||||||
uint32_t io_io_high_hv; /* Offset 9 */
|
uint32_t io_io_high_hv; /* Offset 9 */
|
||||||
uint32_t unused4[1];
|
uint32_t unused4[1];
|
||||||
uint32_t io_chain_id_mask; /* Offset 11 */
|
uint32_t io_chain_id_mask; /* Offset 11 */
|
||||||
uint32_t unused5[2];
|
uint32_t unused5[2];
|
||||||
uint32_t io_io_low; /* Offset 14 */
|
uint32_t io_io_low; /* Offset 14 */
|
||||||
uint32_t io_io_high; /* Offset 15 */
|
uint32_t io_io_high; /* Offset 15 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -198,7 +198,7 @@ struct ioa_registers {
|
||||||
** In order for a Runway address to reside within GSC+ extended address space:
|
** In order for a Runway address to reside within GSC+ extended address space:
|
||||||
** Runway Address [0:7] must identically compare to 8'b11111111
|
** Runway Address [0:7] must identically compare to 8'b11111111
|
||||||
** Runway Address [8:11] must be equal to IO_IO_LOW(_HV)[16:19]
|
** Runway Address [8:11] must be equal to IO_IO_LOW(_HV)[16:19]
|
||||||
** Runway Address [12:23] must be greater than or equal to
|
** Runway Address [12:23] must be greater than or equal to
|
||||||
** IO_IO_LOW(_HV)[20:31] and less than IO_IO_HIGH(_HV)[20:31].
|
** IO_IO_LOW(_HV)[20:31] and less than IO_IO_HIGH(_HV)[20:31].
|
||||||
** Runway Address [24:39] is not used in the comparison.
|
** Runway Address [24:39] is not used in the comparison.
|
||||||
**
|
**
|
||||||
|
@ -226,10 +226,10 @@ struct ioc {
|
||||||
struct ioa_registers __iomem *ioc_regs; /* I/O MMU base address */
|
struct ioa_registers __iomem *ioc_regs; /* I/O MMU base address */
|
||||||
u8 *res_map; /* resource map, bit == pdir entry */
|
u8 *res_map; /* resource map, bit == pdir entry */
|
||||||
u64 *pdir_base; /* physical base address */
|
u64 *pdir_base; /* physical base address */
|
||||||
u32 pdir_size; /* bytes, function of IOV Space size */
|
u32 pdir_size; /* bytes, function of IOV Space size */
|
||||||
u32 res_hint; /* next available IOVP -
|
u32 res_hint; /* next available IOVP -
|
||||||
circular search */
|
circular search */
|
||||||
u32 res_size; /* size of resource map in bytes */
|
u32 res_size; /* size of resource map in bytes */
|
||||||
spinlock_t res_lock;
|
spinlock_t res_lock;
|
||||||
|
|
||||||
#ifdef CCIO_COLLECT_STATS
|
#ifdef CCIO_COLLECT_STATS
|
||||||
|
@ -249,7 +249,7 @@ struct ioc {
|
||||||
unsigned short cujo20_bug;
|
unsigned short cujo20_bug;
|
||||||
|
|
||||||
/* STUFF We don't need in performance path */
|
/* STUFF We don't need in performance path */
|
||||||
u32 chainid_shift; /* specify bit location of chain_id */
|
u32 chainid_shift; /* specify bit location of chain_id */
|
||||||
struct ioc *next; /* Linked list of discovered iocs */
|
struct ioc *next; /* Linked list of discovered iocs */
|
||||||
const char *name; /* device name from firmware */
|
const char *name; /* device name from firmware */
|
||||||
unsigned int hw_path; /* the hardware path this ioc is associatd with */
|
unsigned int hw_path; /* the hardware path this ioc is associatd with */
|
||||||
|
@ -293,7 +293,7 @@ static int ioc_count;
|
||||||
** cause the kernel to panic anyhow.
|
** cause the kernel to panic anyhow.
|
||||||
*/
|
*/
|
||||||
#define CCIO_SEARCH_LOOP(ioc, res_idx, mask, size) \
|
#define CCIO_SEARCH_LOOP(ioc, res_idx, mask, size) \
|
||||||
for(; res_ptr < res_end; ++res_ptr) { \
|
for (; res_ptr < res_end; ++res_ptr) { \
|
||||||
int ret;\
|
int ret;\
|
||||||
unsigned int idx;\
|
unsigned int idx;\
|
||||||
idx = (unsigned int)((unsigned long)res_ptr - (unsigned long)ioc->res_map); \
|
idx = (unsigned int)((unsigned long)res_ptr - (unsigned long)ioc->res_map); \
|
||||||
|
@ -309,9 +309,9 @@ static int ioc_count;
|
||||||
#define CCIO_FIND_FREE_MAPPING(ioa, res_idx, mask, size) \
|
#define CCIO_FIND_FREE_MAPPING(ioa, res_idx, mask, size) \
|
||||||
u##size *res_ptr = (u##size *)&((ioc)->res_map[ioa->res_hint & ~((size >> 3) - 1)]); \
|
u##size *res_ptr = (u##size *)&((ioc)->res_map[ioa->res_hint & ~((size >> 3) - 1)]); \
|
||||||
u##size *res_end = (u##size *)&(ioc)->res_map[ioa->res_size]; \
|
u##size *res_end = (u##size *)&(ioc)->res_map[ioa->res_size]; \
|
||||||
CCIO_SEARCH_LOOP(ioc, res_idx, mask, size); \
|
CCIO_SEARCH_LOOP(ioc, res_idx, mask, size); \
|
||||||
res_ptr = (u##size *)&(ioc)->res_map[0]; \
|
res_ptr = (u##size *)&(ioc)->res_map[0]; \
|
||||||
CCIO_SEARCH_LOOP(ioa, res_idx, mask, size);
|
CCIO_SEARCH_LOOP(ioa, res_idx, mask, size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Find available bit in this ioa's resource map.
|
** Find available bit in this ioa's resource map.
|
||||||
|
@ -348,9 +348,9 @@ ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size)
|
||||||
|
|
||||||
BUG_ON(pages_needed == 0);
|
BUG_ON(pages_needed == 0);
|
||||||
BUG_ON((pages_needed * IOVP_SIZE) > DMA_CHUNK_SIZE);
|
BUG_ON((pages_needed * IOVP_SIZE) > DMA_CHUNK_SIZE);
|
||||||
|
|
||||||
DBG_RES("%s() size: %d pages_needed %d\n",
|
DBG_RES("%s() size: %d pages_needed %d\n",
|
||||||
__func__, size, pages_needed);
|
__func__, size, pages_needed);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** "seek and ye shall find"...praying never hurts either...
|
** "seek and ye shall find"...praying never hurts either...
|
||||||
|
@ -416,7 +416,7 @@ resource_found:
|
||||||
#define CCIO_FREE_MAPPINGS(ioc, res_idx, mask, size) \
|
#define CCIO_FREE_MAPPINGS(ioc, res_idx, mask, size) \
|
||||||
u##size *res_ptr = (u##size *)&((ioc)->res_map[res_idx]); \
|
u##size *res_ptr = (u##size *)&((ioc)->res_map[res_idx]); \
|
||||||
BUG_ON((*res_ptr & mask) != mask); \
|
BUG_ON((*res_ptr & mask) != mask); \
|
||||||
*res_ptr &= ~(mask);
|
*res_ptr &= ~(mask);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccio_free_range - Free pages from the ioc's resource map.
|
* ccio_free_range - Free pages from the ioc's resource map.
|
||||||
|
@ -518,9 +518,9 @@ typedef unsigned long space_t;
|
||||||
** when it passes in BIDIRECTIONAL flag.
|
** when it passes in BIDIRECTIONAL flag.
|
||||||
*/
|
*/
|
||||||
static u32 hint_lookup[] = {
|
static u32 hint_lookup[] = {
|
||||||
[PCI_DMA_BIDIRECTIONAL] = HINT_STOP_MOST | HINT_SAFE_DMA | IOPDIR_VALID,
|
[DMA_BIDIRECTIONAL] = HINT_STOP_MOST | HINT_SAFE_DMA | IOPDIR_VALID,
|
||||||
[PCI_DMA_TODEVICE] = HINT_STOP_MOST | HINT_PREFETCH | IOPDIR_VALID,
|
[DMA_TO_DEVICE] = HINT_STOP_MOST | HINT_PREFETCH | IOPDIR_VALID,
|
||||||
[PCI_DMA_FROMDEVICE] = HINT_STOP_MOST | IOPDIR_VALID,
|
[DMA_FROM_DEVICE] = HINT_STOP_MOST | IOPDIR_VALID,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -845,7 +845,7 @@ static void *
|
||||||
ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag,
|
ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag,
|
||||||
unsigned long attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
#if 0
|
#if 0
|
||||||
/* GRANT Need to establish hierarchy for non-PCI devs as well
|
/* GRANT Need to establish hierarchy for non-PCI devs as well
|
||||||
** and then provide matching gsc_map_xxx() functions for them as well.
|
** and then provide matching gsc_map_xxx() functions for them as well.
|
||||||
|
@ -856,11 +856,11 @@ ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ret = (void *) __get_free_pages(flag, get_order(size));
|
ret = (void *) __get_free_pages(flag, get_order(size));
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
memset(ret, 0, size);
|
memset(ret, 0, size);
|
||||||
*dma_handle = ccio_map_single(dev, ret, size, PCI_DMA_BIDIRECTIONAL);
|
*dma_handle = ccio_map_single(dev, ret, size, DMA_BIDIRECTIONAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1022,8 +1022,8 @@ static const struct dma_map_ops ccio_ops = {
|
||||||
.free = ccio_free,
|
.free = ccio_free,
|
||||||
.map_page = ccio_map_page,
|
.map_page = ccio_map_page,
|
||||||
.unmap_page = ccio_unmap_page,
|
.unmap_page = ccio_unmap_page,
|
||||||
.map_sg = ccio_map_sg,
|
.map_sg = ccio_map_sg,
|
||||||
.unmap_sg = ccio_unmap_sg,
|
.unmap_sg = ccio_unmap_sg,
|
||||||
.get_sgtable = dma_common_get_sgtable,
|
.get_sgtable = dma_common_get_sgtable,
|
||||||
.alloc_pages = dma_common_alloc_pages,
|
.alloc_pages = dma_common_alloc_pages,
|
||||||
.free_pages = dma_common_free_pages,
|
.free_pages = dma_common_free_pages,
|
||||||
|
@ -1080,7 +1080,7 @@ static int ccio_proc_info(struct seq_file *m, void *p)
|
||||||
max = ioc->usingle_pages - ioc->usg_pages;
|
max = ioc->usingle_pages - ioc->usg_pages;
|
||||||
seq_printf(m, "pci_unmap_single: %8ld calls %8ld pages (avg %d/1000)\n",
|
seq_printf(m, "pci_unmap_single: %8ld calls %8ld pages (avg %d/1000)\n",
|
||||||
min, max, (int)((max * 1000)/min));
|
min, max, (int)((max * 1000)/min));
|
||||||
|
|
||||||
seq_printf(m, "pci_map_sg() : %8ld calls %8ld pages (avg %d/1000)\n",
|
seq_printf(m, "pci_map_sg() : %8ld calls %8ld pages (avg %d/1000)\n",
|
||||||
ioc->msg_calls, ioc->msg_pages,
|
ioc->msg_calls, ioc->msg_pages,
|
||||||
(int)((ioc->msg_pages * 1000)/ioc->msg_calls));
|
(int)((ioc->msg_pages * 1000)/ioc->msg_calls));
|
||||||
|
@ -1169,7 +1169,7 @@ void __init ccio_cujo20_fixup(struct parisc_device *cujo, u32 iovp)
|
||||||
idx = PDIR_INDEX(iovp) >> 3;
|
idx = PDIR_INDEX(iovp) >> 3;
|
||||||
|
|
||||||
while (idx < ioc->res_size) {
|
while (idx < ioc->res_size) {
|
||||||
res_ptr[idx] |= 0xff;
|
res_ptr[idx] |= 0xff;
|
||||||
idx += PDIR_INDEX(CUJO_20_STEP) >> 3;
|
idx += PDIR_INDEX(CUJO_20_STEP) >> 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1297,7 +1297,7 @@ ccio_ioc_init(struct ioc *ioc)
|
||||||
DBG_INIT(" base %p\n", ioc->pdir_base);
|
DBG_INIT(" base %p\n", ioc->pdir_base);
|
||||||
|
|
||||||
/* resource map size dictated by pdir_size */
|
/* resource map size dictated by pdir_size */
|
||||||
ioc->res_size = (ioc->pdir_size / sizeof(u64)) >> 3;
|
ioc->res_size = (ioc->pdir_size / sizeof(u64)) >> 3;
|
||||||
DBG_INIT("%s() res_size 0x%x\n", __func__, ioc->res_size);
|
DBG_INIT("%s() res_size 0x%x\n", __func__, ioc->res_size);
|
||||||
|
|
||||||
ioc->res_map = (u8 *)__get_free_pages(GFP_KERNEL,
|
ioc->res_map = (u8 *)__get_free_pages(GFP_KERNEL,
|
||||||
|
|
|
@ -250,14 +250,14 @@ static int __init led_create_procfs(void)
|
||||||
|
|
||||||
if (!lcd_no_led_support)
|
if (!lcd_no_led_support)
|
||||||
{
|
{
|
||||||
ent = proc_create_data("led", S_IRUGO|S_IWUSR, proc_pdc_root,
|
ent = proc_create_data("led", 0644, proc_pdc_root,
|
||||||
&led_proc_ops, (void *)LED_NOLCD); /* LED */
|
&led_proc_ops, (void *)LED_NOLCD); /* LED */
|
||||||
if (!ent) return -1;
|
if (!ent) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (led_type == LED_HASLCD)
|
if (led_type == LED_HASLCD)
|
||||||
{
|
{
|
||||||
ent = proc_create_data("lcd", S_IRUGO|S_IWUSR, proc_pdc_root,
|
ent = proc_create_data("lcd", 0644, proc_pdc_root,
|
||||||
&led_proc_ops, (void *)LED_HASLCD); /* LCD */
|
&led_proc_ops, (void *)LED_HASLCD); /* LCD */
|
||||||
if (!ent) return -1;
|
if (!ent) return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -378,7 +378,7 @@ static int __init parport_init_chip(struct parisc_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit parport_remove_chip(struct parisc_device *dev)
|
static void __exit parport_remove_chip(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
struct parport *p = dev_get_drvdata(&dev->dev);
|
struct parport *p = dev_get_drvdata(&dev->dev);
|
||||||
if (p) {
|
if (p) {
|
||||||
|
@ -390,14 +390,12 @@ static int __exit parport_remove_chip(struct parisc_device *dev)
|
||||||
if (p->irq != PARPORT_IRQ_NONE)
|
if (p->irq != PARPORT_IRQ_NONE)
|
||||||
free_irq(p->irq, p);
|
free_irq(p->irq, p);
|
||||||
if (priv->dma_buf)
|
if (priv->dma_buf)
|
||||||
pci_free_consistent(priv->dev, PAGE_SIZE,
|
dma_free_coherent(&priv->dev->dev, PAGE_SIZE,
|
||||||
priv->dma_buf,
|
priv->dma_buf, priv->dma_handle);
|
||||||
priv->dma_handle);
|
|
||||||
kfree (p->private_data);
|
kfree (p->private_data);
|
||||||
parport_put_port(p);
|
parport_put_port(p);
|
||||||
kfree (ops); /* hope no-one cached it */
|
kfree (ops); /* hope no-one cached it */
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct parisc_device_id parport_tbl[] __initconst = {
|
static const struct parisc_device_id parport_tbl[] __initconst = {
|
||||||
|
|
|
@ -134,7 +134,7 @@ lasi700_probe(struct parisc_device *dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit
|
static void __exit
|
||||||
lasi700_driver_remove(struct parisc_device *dev)
|
lasi700_driver_remove(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
|
struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
|
||||||
|
@ -146,8 +146,6 @@ lasi700_driver_remove(struct parisc_device *dev)
|
||||||
free_irq(host->irq, host);
|
free_irq(host->irq, host);
|
||||||
iounmap(hostdata->base);
|
iounmap(hostdata->base);
|
||||||
kfree(hostdata);
|
kfree(hostdata);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct parisc_driver lasi700_driver __refdata = {
|
static struct parisc_driver lasi700_driver __refdata = {
|
||||||
|
|
|
@ -168,15 +168,13 @@ static const struct parisc_device_id zalon_tbl[] __initconst = {
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(parisc, zalon_tbl);
|
MODULE_DEVICE_TABLE(parisc, zalon_tbl);
|
||||||
|
|
||||||
static int __exit zalon_remove(struct parisc_device *dev)
|
static void __exit zalon_remove(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
|
struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
|
||||||
|
|
||||||
scsi_remove_host(host);
|
scsi_remove_host(host);
|
||||||
ncr53c8xx_release(host);
|
ncr53c8xx_release(host);
|
||||||
free_irq(dev->irq, host);
|
free_irq(dev->irq, host);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct parisc_driver zalon_driver __refdata = {
|
static struct parisc_driver zalon_driver __refdata = {
|
||||||
|
|
|
@ -496,7 +496,7 @@ static int __init mux_probe(struct parisc_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit mux_remove(struct parisc_device *dev)
|
static void __exit mux_remove(struct parisc_device *dev)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int port_count = (long)dev_get_drvdata(&dev->dev);
|
int port_count = (long)dev_get_drvdata(&dev->dev);
|
||||||
|
@ -518,7 +518,6 @@ static int __exit mux_remove(struct parisc_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
release_mem_region(dev->hpa.start + MUX_OFFSET, port_count * MUX_LINE_OFFSET);
|
release_mem_region(dev->hpa.start + MUX_OFFSET, port_count * MUX_LINE_OFFSET);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hack. This idea was taken from the 8250_gsc.c on how to properly order
|
/* Hack. This idea was taken from the 8250_gsc.c on how to properly order
|
||||||
|
|
|
@ -346,7 +346,7 @@ config FRAME_WARN
|
||||||
int "Warn for stack frames larger than"
|
int "Warn for stack frames larger than"
|
||||||
range 0 8192
|
range 0 8192
|
||||||
default 2048 if GCC_PLUGIN_LATENT_ENTROPY
|
default 2048 if GCC_PLUGIN_LATENT_ENTROPY
|
||||||
default 1280 if (!64BIT && PARISC)
|
default 1536 if (!64BIT && PARISC)
|
||||||
default 1024 if (!64BIT && !PARISC)
|
default 1024 if (!64BIT && !PARISC)
|
||||||
default 2048 if 64BIT
|
default 2048 if 64BIT
|
||||||
help
|
help
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
|
SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
|
||||||
-e s/sun4u/sparc64/ \
|
-e s/sun4u/sparc64/ \
|
||||||
-e s/arm.*/arm/ -e s/sa110/arm/ \
|
-e s/arm.*/arm/ -e s/sa110/arm/ \
|
||||||
-e s/s390x/s390/ -e s/parisc64/parisc/ \
|
-e s/s390x/s390/ \
|
||||||
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
|
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
|
||||||
-e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
|
-e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
|
||||||
-e s/riscv.*/riscv/)
|
-e s/riscv.*/riscv/)
|
||||||
|
|
|
@ -954,11 +954,10 @@ free_and_ret:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit
|
static void __exit
|
||||||
snd_harmony_remove(struct parisc_device *padev)
|
snd_harmony_remove(struct parisc_device *padev)
|
||||||
{
|
{
|
||||||
snd_card_free(parisc_get_drvdata(padev));
|
snd_card_free(parisc_get_drvdata(padev));
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct parisc_driver snd_harmony_driver __refdata = {
|
static struct parisc_driver snd_harmony_driver __refdata = {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче