sound fixes for 4.13-rc7
We're keeping in a good shape, this batch contains just a few small fixes (a regression fix for ASoC rt5677 codec, NULL dereference and error-path fixes in firewire, and a corner-case ioctl error fix for user TLV), as well as usual quirks for USB-audio and HD-audio. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEECxfAB4MH3rD5mfB6bDGAVD0pKaQFAlmf4wAOHHRpd2FpQHN1 c2UuZGUACgkQbDGAVD0pKaTafhAAks6blpz37fjodZVl/0LSb84jv/oIRtuednSD 9wdZyvL/mDHe7c5u88+/k5A/MNIi49TQO0MlMTmRm+ZB5gEtCFn2fX8dtNvMwfEC Vxmt9A9k8AnQVOVB8QR4A+v4/TB22MACdYECs9T5PYv6DchOUtiM+aGrgYuSu3Hi kkjThAvi8JheuaSGCjRLB0ztEXUSE8Y8LouINiYNBM1cIxxYFkwa/Dp1erCjMqf3 bImUKC5rJSq7ex8dVMJ30tfP+0hLPyntx1SotUPDn0POKmw/VBZasOdEvIrk/rDV sk2HoNTiV8APKYgwHO+SwVFufjr3ioKAh4q+xtE1z7iqZbRqE8AOnse6p36zD7Lh gx7DbSYG5M3UlYoQByWO/l6HNq7Ei2gC3zmbXpW68JinLvxt3qGhiHQhZJ8q+GuD NGO8IZbO0e4VK3uvW2fFh27xlceTSZbmfC9yQ8IFncd/tUly+ZYaD7U7t360X4Ap fyI2/oCckM1OGG51VlO5sympvR5dh4+L5h4m3+H3ZoTUjFeiS2rdjAokjxsRmQdo rrSGPlNYn1LQ0s+IC+NuDuTLih9BhQN3IGM87UVbxRInjhb/ftcOhaRgu4hrJ+lw npR2CfMVdfvgkeJ3wQ5pThsN1hOmoL/7ytF4OdV+YdlQSrtRxOW47eqTWdRpPXz8 YTomDyo= =Sqtt -----END PGP SIGNATURE----- Merge tag 'sound-4.13-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound into asoc-rt5677 sound fixes for 4.13-rc7 We're keeping in a good shape, this batch contains just a few small fixes (a regression fix for ASoC rt5677 codec, NULL dereference and error-path fixes in firewire, and a corner-case ioctl error fix for user TLV), as well as usual quirks for USB-audio and HD-audio.
This commit is contained in:
commit
b7e2672d1a
|
@ -343,3 +343,4 @@ Version History
|
|||
1.11.0 Fix table line argument order
|
||||
(wrong raid10_copies/raid10_format sequence)
|
||||
1.11.1 Add raid4/5/6 journal write-back support via journal_mode option
|
||||
1.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available
|
||||
|
|
|
@ -8,7 +8,6 @@ Required properties:
|
|||
|
||||
Optional properties:
|
||||
- clocks: Reference to the crypto engine clock.
|
||||
- dma-mask: The address mask limitation. Defaults to 64.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -24,6 +23,5 @@ Example:
|
|||
interrupt-names = "mem", "ring0", "ring1", "ring2", "ring3",
|
||||
"eip";
|
||||
clocks = <&cpm_syscon0 1 26>;
|
||||
dma-mask = <0xff 0xffffffff>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
@ -78,7 +78,6 @@ Example:
|
|||
};
|
||||
|
||||
dwmmc0@12200000 {
|
||||
num-slots = <1>;
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
broken-cd;
|
||||
|
|
|
@ -24,6 +24,5 @@ Example:
|
|||
|
||||
fifo-depth = <0x20>;
|
||||
bus-width = <4>;
|
||||
num-slots = <1>;
|
||||
disable-wp;
|
||||
};
|
||||
|
|
|
@ -36,7 +36,6 @@ Example:
|
|||
|
||||
/* Board portion */
|
||||
dwmmc0@fcd03000 {
|
||||
num-slots = <1>;
|
||||
vmmc-supply = <&ldo12>;
|
||||
fifo-depth = <0x100>;
|
||||
pinctrl-names = "default";
|
||||
|
@ -52,7 +51,6 @@ Example:
|
|||
|
||||
dwmmc_1: dwmmc1@f723e000 {
|
||||
compatible = "hisilicon,hi6220-dw-mshc";
|
||||
num-slots = <0x1>;
|
||||
bus-width = <0x4>;
|
||||
disable-wp;
|
||||
cap-sd-highspeed;
|
||||
|
|
|
@ -12,12 +12,12 @@ Required Properties:
|
|||
* #address-cells: should be 1.
|
||||
* #size-cells: should be 0.
|
||||
|
||||
# Slots: The slot specific information are contained within child-nodes with
|
||||
each child-node representing a supported slot. There should be atleast one
|
||||
child node representing a card slot. The name of the child node representing
|
||||
the slot is recommended to be slot@n where n is the unique number of the slot
|
||||
connected to the controller. The following are optional properties which
|
||||
can be included in the slot child node.
|
||||
# Slots (DEPRECATED): The slot specific information are contained within
|
||||
child-nodes with each child-node representing a supported slot. There should
|
||||
be atleast one child node representing a card slot. The name of the child node
|
||||
representing the slot is recommended to be slot@n where n is the unique number
|
||||
of the slot connected to the controller. The following are optional properties
|
||||
which can be included in the slot child node.
|
||||
|
||||
* reg: specifies the physical slot number. The valid values of this
|
||||
property is 0 to (num-slots -1), where num-slots is the value
|
||||
|
@ -63,7 +63,7 @@ Optional properties:
|
|||
clock(cclk_out). If it's not specified, max is 200MHZ and min is 400KHz by default.
|
||||
(Use the "max-frequency" instead of "clock-freq-min-max".)
|
||||
|
||||
* num-slots: specifies the number of slots supported by the controller.
|
||||
* num-slots (DEPRECATED): specifies the number of slots supported by the controller.
|
||||
The number of physical slots actually used could be equal or less than the
|
||||
value specified by num-slots. If this property is not specified, the value
|
||||
of num-slot property is assumed to be 1.
|
||||
|
@ -124,7 +124,6 @@ board specific portions as listed below.
|
|||
dwmmc0@12200000 {
|
||||
clock-frequency = <400000000>;
|
||||
clock-freq-min-max = <400000 200000000>;
|
||||
num-slots = <1>;
|
||||
broken-cd;
|
||||
fifo-depth = <0x80>;
|
||||
card-detect-delay = <200>;
|
||||
|
@ -139,7 +138,6 @@ board specific portions as listed below.
|
|||
dwmmc0@12200000 {
|
||||
clock-frequency = <400000000>;
|
||||
clock-freq-min-max = <400000 200000000>;
|
||||
num-slots = <1>;
|
||||
broken-cd;
|
||||
fifo-depth = <0x80>;
|
||||
card-detect-delay = <200>;
|
||||
|
|
|
@ -25,7 +25,6 @@ Example:
|
|||
clock-frequency = <50000000>;
|
||||
clocks = <&topcrm SD0_AHB>, <&topcrm SD0_WCLK>;
|
||||
clock-names = "biu", "ciu";
|
||||
num-slots = <1>;
|
||||
max-frequency = <50000000>;
|
||||
cap-sdio-irq;
|
||||
cap-sd-highspeed;
|
||||
|
|
|
@ -11,6 +11,7 @@ Required properties:
|
|||
- reg-names: Names of the registers.
|
||||
"amac_base": Address and length of the GMAC registers
|
||||
"idm_base": Address and length of the GMAC IDM registers
|
||||
(required for NSP and Northstar2)
|
||||
"nicpm_base": Address and length of the NIC Port Manager
|
||||
registers (required for Northstar2)
|
||||
- interrupts: Interrupt number
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
Broadcom GMAC Ethernet Controller Device Tree Bindings
|
||||
-------------------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible: "brcm,bgmac-nsp"
|
||||
- reg: Address and length of the GMAC registers,
|
||||
Address and length of the GMAC IDM registers
|
||||
- reg-names: Names of the registers. Must have both "gmac_base" and
|
||||
"idm_base"
|
||||
- interrupts: Interrupt number
|
||||
|
||||
Optional properties:
|
||||
- mac-address: See ethernet.txt file in the same directory
|
||||
|
||||
Examples:
|
||||
|
||||
gmac0: ethernet@18022000 {
|
||||
compatible = "brcm,bgmac-nsp";
|
||||
reg = <0x18022000 0x1000>,
|
||||
<0x18110000 0x1000>;
|
||||
reg-names = "gmac_base", "idm_base";
|
||||
interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
|
@ -4,7 +4,7 @@ Required properties:
|
|||
- compatible: Should be one of the following.
|
||||
- "rockchip,rk3066a-efuse" - for RK3066a SoCs.
|
||||
- "rockchip,rk3188-efuse" - for RK3188 SoCs.
|
||||
- "rockchip,rk322x-efuse" - for RK322x SoCs.
|
||||
- "rockchip,rk3228-efuse" - for RK3228 SoCs.
|
||||
- "rockchip,rk3288-efuse" - for RK3288 SoCs.
|
||||
- "rockchip,rk3399-efuse" - for RK3399 SoCs.
|
||||
- reg: Should contain the registers location and exact eFuse size
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
* Broadcom Digital Timing Engine(DTE) based PTP clock driver
|
||||
* Broadcom Digital Timing Engine(DTE) based PTP clock
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "brcm,ptp-dte"
|
||||
- compatible: should contain the core compatibility string
|
||||
and the SoC compatibility string. The SoC
|
||||
compatibility string is to handle SoC specific
|
||||
hardware differences.
|
||||
Core compatibility string:
|
||||
"brcm,ptp-dte"
|
||||
SoC compatibility strings:
|
||||
"brcm,iproc-ptp-dte" - for iproc based SoC's
|
||||
- reg: address and length of the DTE block's NCO registers
|
||||
|
||||
Example:
|
||||
|
||||
ptp_dte: ptp_dte@180af650 {
|
||||
compatible = "brcm,ptp-dte";
|
||||
ptp: ptp-dte@180af650 {
|
||||
compatible = "brcm,iproc-ptp-dte", "brcm,ptp-dte";
|
||||
reg = <0x180af650 0x10>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -9,7 +9,6 @@ Optional properties:
|
|||
- fsl,irda-mode : Indicate the uart supports irda mode
|
||||
- fsl,dte-mode : Indicate the uart works in DTE mode. The uart works
|
||||
in DCE mode by default.
|
||||
- fsl,dma-size : Indicate the size of the DMA buffer and its periods
|
||||
|
||||
Please check Documentation/devicetree/bindings/serial/serial.txt
|
||||
for the complete list of generic properties.
|
||||
|
@ -29,5 +28,4 @@ uart1: serial@73fbc000 {
|
|||
interrupts = <31>;
|
||||
uart-has-rtscts;
|
||||
fsl,dte-mode;
|
||||
fsl,dma-size = <1024 4>;
|
||||
};
|
||||
|
|
5046
MAINTAINERS
5046
MAINTAINERS
File diff suppressed because it is too large
Load Diff
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 13
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Fearless Coyote
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
|
|
|
@ -117,7 +117,7 @@ static int arc_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < count && user_count <= (count - off)) {
|
||||
|
|
|
@ -37,7 +37,7 @@ do { \
|
|||
".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \
|
||||
"2:\t.asciz " #__file "\n" \
|
||||
".popsection\n" \
|
||||
".pushsection __bug_table,\"a\"\n" \
|
||||
".pushsection __bug_table,\"aw\"\n" \
|
||||
".align 2\n" \
|
||||
"3:\t.word 1b, 2b\n" \
|
||||
"\t.hword " #__line ", 0\n" \
|
||||
|
|
|
@ -116,7 +116,7 @@ struct cpu_cache_fns {
|
|||
void (*dma_unmap_area)(const void *, size_t, int);
|
||||
|
||||
void (*dma_flush_range)(const void *, const void *);
|
||||
};
|
||||
} __no_randomize_layout;
|
||||
|
||||
/*
|
||||
* Select the calling method
|
||||
|
|
|
@ -19,6 +19,11 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define ARCH_HAS_KIMAGE_ARCH
|
||||
struct kimage_arch {
|
||||
u32 kernel_r2;
|
||||
};
|
||||
|
||||
/**
|
||||
* crash_setup_regs() - save registers for the panic kernel
|
||||
* @newregs: registers are saved here
|
||||
|
|
|
@ -35,6 +35,12 @@ struct ucontext {
|
|||
* bytes, to prevent unpredictable padding in the signal frame.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Dummy padding block: if this magic is encountered, the block should
|
||||
* be skipped using the corresponding size field.
|
||||
*/
|
||||
#define DUMMY_MAGIC 0xb0d9ed01
|
||||
|
||||
#ifdef CONFIG_CRUNCH
|
||||
#define CRUNCH_MAGIC 0x5065cf03
|
||||
#define CRUNCH_STORAGE_SIZE (CRUNCH_SIZE + 8)
|
||||
|
|
|
@ -30,7 +30,6 @@ extern unsigned long kexec_boot_atags;
|
|||
|
||||
static atomic_t waiting_for_crash_ipi;
|
||||
|
||||
static unsigned long dt_mem;
|
||||
/*
|
||||
* Provide a dummy crash_notes definition while crash dump arrives to arm.
|
||||
* This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
|
||||
|
@ -42,6 +41,9 @@ int machine_kexec_prepare(struct kimage *image)
|
|||
__be32 header;
|
||||
int i, err;
|
||||
|
||||
image->arch.kernel_r2 = image->start - KEXEC_ARM_ZIMAGE_OFFSET
|
||||
+ KEXEC_ARM_ATAGS_OFFSET;
|
||||
|
||||
/*
|
||||
* Validate that if the current HW supports SMP, then the SW supports
|
||||
* and implements CPU hotplug for the current HW. If not, we won't be
|
||||
|
@ -66,8 +68,8 @@ int machine_kexec_prepare(struct kimage *image)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (be32_to_cpu(header) == OF_DT_HEADER)
|
||||
dt_mem = current_segment->mem;
|
||||
if (header == cpu_to_be32(OF_DT_HEADER))
|
||||
image->arch.kernel_r2 = current_segment->mem;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -165,8 +167,7 @@ void machine_kexec(struct kimage *image)
|
|||
kexec_start_address = image->start;
|
||||
kexec_indirection_page = page_list;
|
||||
kexec_mach_type = machine_arch_type;
|
||||
kexec_boot_atags = dt_mem ?: image->start - KEXEC_ARM_ZIMAGE_OFFSET
|
||||
+ KEXEC_ARM_ATAGS_OFFSET;
|
||||
kexec_boot_atags = image->arch.kernel_r2;
|
||||
|
||||
/* copy our kernel relocation code to the control code page */
|
||||
reboot_entry = fncpy(reboot_code_buffer,
|
||||
|
|
|
@ -987,6 +987,9 @@ static void __init reserve_crashkernel(void)
|
|||
|
||||
if (crash_base <= 0) {
|
||||
unsigned long long crash_max = idmap_to_phys((u32)~0);
|
||||
unsigned long long lowmem_max = __pa(high_memory - 1) + 1;
|
||||
if (crash_max > lowmem_max)
|
||||
crash_max = lowmem_max;
|
||||
crash_base = memblock_find_in_range(CRASH_ALIGN, crash_max,
|
||||
crash_size, CRASH_ALIGN);
|
||||
if (!crash_base) {
|
||||
|
|
|
@ -40,8 +40,10 @@ static int preserve_crunch_context(struct crunch_sigframe __user *frame)
|
|||
return __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
}
|
||||
|
||||
static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
||||
static int restore_crunch_context(char __user **auxp)
|
||||
{
|
||||
struct crunch_sigframe __user *frame =
|
||||
(struct crunch_sigframe __user *)*auxp;
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct crunch_sigframe *kframe;
|
||||
|
||||
|
@ -52,6 +54,7 @@ static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
|||
if (kframe->magic != CRUNCH_MAGIC ||
|
||||
kframe->size != CRUNCH_STORAGE_SIZE)
|
||||
return -1;
|
||||
*auxp += CRUNCH_STORAGE_SIZE;
|
||||
crunch_task_restore(current_thread_info(), &kframe->storage);
|
||||
return 0;
|
||||
}
|
||||
|
@ -59,21 +62,39 @@ static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
|||
|
||||
#ifdef CONFIG_IWMMXT
|
||||
|
||||
static int preserve_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
||||
static int preserve_iwmmxt_context(struct iwmmxt_sigframe __user *frame)
|
||||
{
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct iwmmxt_sigframe *kframe;
|
||||
int err = 0;
|
||||
|
||||
/* the iWMMXt context must be 64 bit aligned */
|
||||
kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
|
||||
|
||||
if (test_thread_flag(TIF_USING_IWMMXT)) {
|
||||
kframe->magic = IWMMXT_MAGIC;
|
||||
kframe->size = IWMMXT_STORAGE_SIZE;
|
||||
iwmmxt_task_copy(current_thread_info(), &kframe->storage);
|
||||
return __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
|
||||
err = __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
} else {
|
||||
/*
|
||||
* For bug-compatibility with older kernels, some space
|
||||
* has to be reserved for iWMMXt even if it's not used.
|
||||
* Set the magic and size appropriately so that properly
|
||||
* written userspace can skip it reliably:
|
||||
*/
|
||||
__put_user_error(DUMMY_MAGIC, &frame->magic, err);
|
||||
__put_user_error(IWMMXT_STORAGE_SIZE, &frame->size, err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
||||
static int restore_iwmmxt_context(char __user **auxp)
|
||||
{
|
||||
struct iwmmxt_sigframe __user *frame =
|
||||
(struct iwmmxt_sigframe __user *)*auxp;
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct iwmmxt_sigframe *kframe;
|
||||
|
||||
|
@ -81,10 +102,28 @@ static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
|||
kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
|
||||
if (__copy_from_user(kframe, frame, sizeof(*frame)))
|
||||
return -1;
|
||||
if (kframe->magic != IWMMXT_MAGIC ||
|
||||
kframe->size != IWMMXT_STORAGE_SIZE)
|
||||
|
||||
/*
|
||||
* For non-iWMMXt threads: a single iwmmxt_sigframe-sized dummy
|
||||
* block is discarded for compatibility with setup_sigframe() if
|
||||
* present, but we don't mandate its presence. If some other
|
||||
* magic is here, it's not for us:
|
||||
*/
|
||||
if (!test_thread_flag(TIF_USING_IWMMXT) &&
|
||||
kframe->magic != DUMMY_MAGIC)
|
||||
return 0;
|
||||
|
||||
if (kframe->size != IWMMXT_STORAGE_SIZE)
|
||||
return -1;
|
||||
|
||||
if (test_thread_flag(TIF_USING_IWMMXT)) {
|
||||
if (kframe->magic != IWMMXT_MAGIC)
|
||||
return -1;
|
||||
|
||||
iwmmxt_task_restore(current_thread_info(), &kframe->storage);
|
||||
}
|
||||
|
||||
*auxp += IWMMXT_STORAGE_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -107,8 +146,10 @@ static int preserve_vfp_context(struct vfp_sigframe __user *frame)
|
|||
return vfp_preserve_user_clear_hwstate(&frame->ufp, &frame->ufp_exc);
|
||||
}
|
||||
|
||||
static int restore_vfp_context(struct vfp_sigframe __user *frame)
|
||||
static int restore_vfp_context(char __user **auxp)
|
||||
{
|
||||
struct vfp_sigframe __user *frame =
|
||||
(struct vfp_sigframe __user *)*auxp;
|
||||
unsigned long magic;
|
||||
unsigned long size;
|
||||
int err = 0;
|
||||
|
@ -121,6 +162,7 @@ static int restore_vfp_context(struct vfp_sigframe __user *frame)
|
|||
if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
*auxp += size;
|
||||
return vfp_restore_user_hwstate(&frame->ufp, &frame->ufp_exc);
|
||||
}
|
||||
|
||||
|
@ -141,7 +183,7 @@ struct rt_sigframe {
|
|||
|
||||
static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
|
||||
{
|
||||
struct aux_sigframe __user *aux;
|
||||
char __user *aux;
|
||||
sigset_t set;
|
||||
int err;
|
||||
|
||||
|
@ -169,18 +211,18 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
|
|||
|
||||
err |= !valid_user_regs(regs);
|
||||
|
||||
aux = (struct aux_sigframe __user *) sf->uc.uc_regspace;
|
||||
aux = (char __user *) sf->uc.uc_regspace;
|
||||
#ifdef CONFIG_CRUNCH
|
||||
if (err == 0)
|
||||
err |= restore_crunch_context(&aux->crunch);
|
||||
err |= restore_crunch_context(&aux);
|
||||
#endif
|
||||
#ifdef CONFIG_IWMMXT
|
||||
if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
|
||||
err |= restore_iwmmxt_context(&aux->iwmmxt);
|
||||
if (err == 0)
|
||||
err |= restore_iwmmxt_context(&aux);
|
||||
#endif
|
||||
#ifdef CONFIG_VFP
|
||||
if (err == 0)
|
||||
err |= restore_vfp_context(&aux->vfp);
|
||||
err |= restore_vfp_context(&aux);
|
||||
#endif
|
||||
|
||||
return err;
|
||||
|
@ -286,7 +328,7 @@ setup_sigframe(struct sigframe __user *sf, struct pt_regs *regs, sigset_t *set)
|
|||
err |= preserve_crunch_context(&aux->crunch);
|
||||
#endif
|
||||
#ifdef CONFIG_IWMMXT
|
||||
if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
|
||||
if (err == 0)
|
||||
err |= preserve_iwmmxt_context(&aux->iwmmxt);
|
||||
#endif
|
||||
#ifdef CONFIG_VFP
|
||||
|
|
|
@ -32,120 +32,6 @@ static u16 control_devconf1_offset;
|
|||
|
||||
#define HSMMC_NAME_LEN 9
|
||||
|
||||
static void omap_hsmmc1_before_set_reg(struct device *dev,
|
||||
int power_on, int vdd)
|
||||
{
|
||||
u32 reg, prog_io;
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (mmc->remux)
|
||||
mmc->remux(dev, power_on);
|
||||
|
||||
/*
|
||||
* Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the
|
||||
* card with Vcc regulator (from twl4030 or whatever). OMAP has both
|
||||
* 1.8V and 3.0V modes, controlled by the PBIAS register.
|
||||
*
|
||||
* In 8-bit modes, OMAP VMMC1A (for DAT4..7) needs a supply, which
|
||||
* is most naturally TWL VSIM; those pins also use PBIAS.
|
||||
*
|
||||
* FIXME handle VMMC1A as needed ...
|
||||
*/
|
||||
if (power_on) {
|
||||
if (cpu_is_omap2430()) {
|
||||
reg = omap_ctrl_readl(OMAP243X_CONTROL_DEVCONF1);
|
||||
if ((1 << vdd) >= MMC_VDD_30_31)
|
||||
reg |= OMAP243X_MMC1_ACTIVE_OVERWRITE;
|
||||
else
|
||||
reg &= ~OMAP243X_MMC1_ACTIVE_OVERWRITE;
|
||||
omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
|
||||
}
|
||||
|
||||
if (mmc->internal_clock) {
|
||||
reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
|
||||
reg |= OMAP2_MMCSDIO1ADPCLKISEL;
|
||||
omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
|
||||
}
|
||||
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
if (cpu_is_omap3630()) {
|
||||
/* Set MMC I/O to 52MHz */
|
||||
prog_io = omap_ctrl_readl(OMAP343X_CONTROL_PROG_IO1);
|
||||
prog_io |= OMAP3630_PRG_SDMMC1_SPEEDCTRL;
|
||||
omap_ctrl_writel(prog_io, OMAP343X_CONTROL_PROG_IO1);
|
||||
} else {
|
||||
reg |= OMAP2_PBIASSPEEDCTRL0;
|
||||
}
|
||||
reg &= ~OMAP2_PBIASLITEPWRDNZ0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
} else {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg &= ~OMAP2_PBIASLITEPWRDNZ0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
}
|
||||
}
|
||||
|
||||
static void omap_hsmmc1_after_set_reg(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
/* 100ms delay required for PBIAS configuration */
|
||||
msleep(100);
|
||||
|
||||
if (power_on) {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg |= (OMAP2_PBIASLITEPWRDNZ0 | OMAP2_PBIASSPEEDCTRL0);
|
||||
if ((1 << vdd) <= MMC_VDD_165_195)
|
||||
reg &= ~OMAP2_PBIASLITEVMODE0;
|
||||
else
|
||||
reg |= OMAP2_PBIASLITEVMODE0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
} else {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg |= (OMAP2_PBIASSPEEDCTRL0 | OMAP2_PBIASLITEPWRDNZ0 |
|
||||
OMAP2_PBIASLITEVMODE0);
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
}
|
||||
}
|
||||
|
||||
static void hsmmc2_select_input_clk_src(struct omap_hsmmc_platform_data *mmc)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
reg = omap_ctrl_readl(control_devconf1_offset);
|
||||
if (mmc->internal_clock)
|
||||
reg |= OMAP2_MMCSDIO2ADPCLKISEL;
|
||||
else
|
||||
reg &= ~OMAP2_MMCSDIO2ADPCLKISEL;
|
||||
omap_ctrl_writel(reg, control_devconf1_offset);
|
||||
}
|
||||
|
||||
static void hsmmc2_before_set_reg(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (mmc->remux)
|
||||
mmc->remux(dev, power_on);
|
||||
|
||||
if (power_on)
|
||||
hsmmc2_select_input_clk_src(mmc);
|
||||
}
|
||||
|
||||
static int am35x_hsmmc2_set_power(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (power_on)
|
||||
hsmmc2_select_input_clk_src(mmc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nop_mmc_set_power(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
||||
struct omap_hsmmc_platform_data *mmc)
|
||||
{
|
||||
|
@ -157,101 +43,11 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (c->name)
|
||||
strncpy(hc_name, c->name, HSMMC_NAME_LEN);
|
||||
else
|
||||
snprintf(hc_name, (HSMMC_NAME_LEN + 1), "mmc%islot%i",
|
||||
c->mmc, 1);
|
||||
snprintf(hc_name, (HSMMC_NAME_LEN + 1), "mmc%islot%i", c->mmc, 1);
|
||||
mmc->name = hc_name;
|
||||
mmc->caps = c->caps;
|
||||
mmc->internal_clock = !c->ext_clock;
|
||||
mmc->reg_offset = 0;
|
||||
|
||||
if (c->cover_only) {
|
||||
/* detect if mobile phone cover removed */
|
||||
mmc->gpio_cd = -EINVAL;
|
||||
mmc->gpio_cod = c->gpio_cd;
|
||||
} else {
|
||||
/* card detect pin on the mmc socket itself */
|
||||
mmc->gpio_cd = c->gpio_cd;
|
||||
mmc->gpio_cod = -EINVAL;
|
||||
}
|
||||
mmc->gpio_wp = c->gpio_wp;
|
||||
|
||||
mmc->remux = c->remux;
|
||||
mmc->init_card = c->init_card;
|
||||
|
||||
if (c->nonremovable)
|
||||
mmc->nonremovable = 1;
|
||||
|
||||
/*
|
||||
* NOTE: MMC slots should have a Vcc regulator set up.
|
||||
* This may be from a TWL4030-family chip, another
|
||||
* controllable regulator, or a fixed supply.
|
||||
*
|
||||
* temporary HACK: ocr_mask instead of fixed supply
|
||||
*/
|
||||
if (soc_is_am35xx())
|
||||
mmc->ocr_mask = MMC_VDD_165_195 |
|
||||
MMC_VDD_26_27 |
|
||||
MMC_VDD_27_28 |
|
||||
MMC_VDD_29_30 |
|
||||
MMC_VDD_30_31 |
|
||||
MMC_VDD_31_32;
|
||||
else
|
||||
mmc->ocr_mask = c->ocr_mask;
|
||||
|
||||
if (!soc_is_am35xx())
|
||||
mmc->features |= HSMMC_HAS_PBIAS;
|
||||
|
||||
switch (c->mmc) {
|
||||
case 1:
|
||||
if (mmc->features & HSMMC_HAS_PBIAS) {
|
||||
/* on-chip level shifting via PBIAS0/PBIAS1 */
|
||||
mmc->before_set_reg =
|
||||
omap_hsmmc1_before_set_reg;
|
||||
mmc->after_set_reg =
|
||||
omap_hsmmc1_after_set_reg;
|
||||
}
|
||||
|
||||
if (soc_is_am35xx())
|
||||
mmc->set_power = nop_mmc_set_power;
|
||||
|
||||
/* OMAP3630 HSMMC1 supports only 4-bit */
|
||||
if (cpu_is_omap3630() &&
|
||||
(c->caps & MMC_CAP_8_BIT_DATA)) {
|
||||
c->caps &= ~MMC_CAP_8_BIT_DATA;
|
||||
c->caps |= MMC_CAP_4_BIT_DATA;
|
||||
mmc->caps = c->caps;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (soc_is_am35xx())
|
||||
mmc->set_power = am35x_hsmmc2_set_power;
|
||||
|
||||
if (c->ext_clock)
|
||||
c->transceiver = 1;
|
||||
if (c->transceiver && (c->caps & MMC_CAP_8_BIT_DATA)) {
|
||||
c->caps &= ~MMC_CAP_8_BIT_DATA;
|
||||
c->caps |= MMC_CAP_4_BIT_DATA;
|
||||
}
|
||||
if (mmc->features & HSMMC_HAS_PBIAS) {
|
||||
/* off-chip level shifting, or none */
|
||||
mmc->before_set_reg = hsmmc2_before_set_reg;
|
||||
mmc->after_set_reg = NULL;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
mmc->before_set_reg = NULL;
|
||||
mmc->after_set_reg = NULL;
|
||||
break;
|
||||
default:
|
||||
pr_err("MMC%d configuration not supported!\n", c->mmc);
|
||||
kfree(hc_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -260,7 +56,6 @@ static int omap_hsmmc_done;
|
|||
void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct omap_hsmmc_platform_data *mmc_pdata;
|
||||
int res;
|
||||
|
||||
if (omap_hsmmc_done != 1)
|
||||
|
@ -269,32 +64,12 @@ void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
|||
omap_hsmmc_done++;
|
||||
|
||||
for (; c->mmc; c++) {
|
||||
if (!c->deferred)
|
||||
continue;
|
||||
|
||||
pdev = c->pdev;
|
||||
if (!pdev)
|
||||
continue;
|
||||
|
||||
mmc_pdata = pdev->dev.platform_data;
|
||||
if (!mmc_pdata)
|
||||
continue;
|
||||
|
||||
if (c->cover_only) {
|
||||
/* detect if mobile phone cover removed */
|
||||
mmc_pdata->gpio_cd = -EINVAL;
|
||||
mmc_pdata->gpio_cod = c->gpio_cd;
|
||||
} else {
|
||||
/* card detect pin on the mmc socket itself */
|
||||
mmc_pdata->gpio_cd = c->gpio_cd;
|
||||
mmc_pdata->gpio_cod = -EINVAL;
|
||||
}
|
||||
mmc_pdata->gpio_wp = c->gpio_wp;
|
||||
|
||||
res = omap_device_register(pdev);
|
||||
if (res)
|
||||
pr_err("Could not late init MMC %s\n",
|
||||
c->name);
|
||||
pr_err("Could not late init MMC\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -336,13 +111,6 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
|||
if (oh->dev_attr != NULL) {
|
||||
mmc_dev_attr = oh->dev_attr;
|
||||
mmc_data->controller_flags = mmc_dev_attr->flags;
|
||||
/*
|
||||
* erratum 2.1.1.128 doesn't apply if board has
|
||||
* a transceiver is attached
|
||||
*/
|
||||
if (hsmmcinfo->transceiver)
|
||||
mmc_data->controller_flags &=
|
||||
~OMAP_HSMMC_BROKEN_MULTIBLOCK_READ;
|
||||
}
|
||||
|
||||
pdev = platform_device_alloc(name, ctrl_nr - 1);
|
||||
|
@ -367,9 +135,6 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
|||
|
||||
hsmmcinfo->pdev = pdev;
|
||||
|
||||
if (hsmmcinfo->deferred)
|
||||
goto free_mmc;
|
||||
|
||||
res = omap_device_register(pdev);
|
||||
if (res) {
|
||||
pr_err("Could not register od for %s\n", name);
|
||||
|
|
|
@ -12,18 +12,9 @@ struct omap2_hsmmc_info {
|
|||
u8 mmc; /* controller 1/2/3 */
|
||||
u32 caps; /* 4/8 wires and any additional host
|
||||
* capabilities OR'd (ref. linux/mmc/host.h) */
|
||||
bool transceiver; /* MMC-2 option */
|
||||
bool ext_clock; /* use external pin for input clock */
|
||||
bool cover_only; /* No card detect - just cover switch */
|
||||
bool nonremovable; /* Nonremovable e.g. eMMC */
|
||||
bool deferred; /* mmc needs a deferred probe */
|
||||
int gpio_cd; /* or -EINVAL */
|
||||
int gpio_wp; /* or -EINVAL */
|
||||
char *name; /* or NULL for default */
|
||||
struct platform_device *pdev; /* mmc controller instance */
|
||||
int ocr_mask; /* temporary HACK */
|
||||
/* Remux (pad configuration) when powering on/off */
|
||||
void (*remux)(struct device *dev, int power_on);
|
||||
/* init some special card */
|
||||
void (*init_card)(struct mmc_card *card);
|
||||
};
|
||||
|
|
|
@ -133,6 +133,7 @@ static irqreturn_t db8500_pmu_handler(int irq, void *dev, irq_handler_t handler)
|
|||
|
||||
static struct arm_pmu_platdata db8500_pmu_platdata = {
|
||||
.handle_irq = db8500_pmu_handler,
|
||||
.irq_flags = IRQF_NOBALANCING | IRQF_NO_THREAD,
|
||||
};
|
||||
|
||||
static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
|
||||
|
|
|
@ -40,9 +40,21 @@ static void *arm_nommu_dma_alloc(struct device *dev, size_t size,
|
|||
|
||||
{
|
||||
const struct dma_map_ops *ops = &dma_noop_ops;
|
||||
void *ret;
|
||||
|
||||
/*
|
||||
* We are here because:
|
||||
* Try generic allocator first if we are advertised that
|
||||
* consistency is not required.
|
||||
*/
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
return ops->alloc(dev, size, dma_handle, gfp, attrs);
|
||||
|
||||
ret = dma_alloc_from_global_coherent(size, dma_handle);
|
||||
|
||||
/*
|
||||
* dma_alloc_from_global_coherent() may fail because:
|
||||
*
|
||||
* - no consistent DMA region has been defined, so we can't
|
||||
* continue.
|
||||
* - there is no space left in consistent DMA region, so we
|
||||
|
@ -50,11 +62,8 @@ static void *arm_nommu_dma_alloc(struct device *dev, size_t size,
|
|||
* advertised that consistency is not required.
|
||||
*/
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
return ops->alloc(dev, size, dma_handle, gfp, attrs);
|
||||
|
||||
WARN_ON_ONCE(1);
|
||||
return NULL;
|
||||
WARN_ON_ONCE(ret == NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void arm_nommu_dma_free(struct device *dev, size_t size,
|
||||
|
@ -63,14 +72,31 @@ static void arm_nommu_dma_free(struct device *dev, size_t size,
|
|||
{
|
||||
const struct dma_map_ops *ops = &dma_noop_ops;
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT) {
|
||||
ops->free(dev, size, cpu_addr, dma_addr, attrs);
|
||||
else
|
||||
WARN_ON_ONCE(1);
|
||||
} else {
|
||||
int ret = dma_release_from_global_coherent(get_order(size),
|
||||
cpu_addr);
|
||||
|
||||
WARN_ON_ONCE(ret == 0);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static int arm_nommu_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
||||
void *cpu_addr, dma_addr_t dma_addr, size_t size,
|
||||
unsigned long attrs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (dma_mmap_from_global_coherent(vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size);
|
||||
}
|
||||
|
||||
|
||||
static void __dma_page_cpu_to_dev(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
|
@ -173,6 +199,7 @@ static void arm_nommu_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist
|
|||
const struct dma_map_ops arm_nommu_dma_ops = {
|
||||
.alloc = arm_nommu_dma_alloc,
|
||||
.free = arm_nommu_dma_free,
|
||||
.mmap = arm_nommu_dma_mmap,
|
||||
.map_page = arm_nommu_dma_map_page,
|
||||
.unmap_page = arm_nommu_dma_unmap_page,
|
||||
.map_sg = arm_nommu_dma_map_sg,
|
||||
|
|
|
@ -851,7 +851,7 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
unsigned long pfn = dma_to_pfn(dev, dma_addr);
|
||||
unsigned long off = vma->vm_pgoff;
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
|
||||
|
|
|
@ -435,7 +435,7 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
|
|||
" sub x30, x30, %[ret]\n"
|
||||
" cbnz x30, 1b\n"
|
||||
"2:")
|
||||
: [ret] "+&r" (x0), [v] "+Q" (v->counter)
|
||||
: [ret] "+r" (x0), [v] "+Q" (v->counter)
|
||||
:
|
||||
: __LL_SC_CLOBBERS, "cc", "memory");
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#ifdef CONFIG_GENERIC_BUG
|
||||
|
||||
#define __BUG_ENTRY(flags) \
|
||||
".pushsection __bug_table,\"a\"\n\t" \
|
||||
".pushsection __bug_table,\"aw\"\n\t" \
|
||||
".align 2\n\t" \
|
||||
"0: .long 1f - 0b\n\t" \
|
||||
_BUGVERBOSE_LOCATION(__FILE__, __LINE__) \
|
||||
|
|
|
@ -492,7 +492,7 @@ asm(
|
|||
* the "%x0" template means XZR.
|
||||
*/
|
||||
#define write_sysreg(v, r) do { \
|
||||
u64 __val = (u64)v; \
|
||||
u64 __val = (u64)(v); \
|
||||
asm volatile("msr " __stringify(r) ", %x0" \
|
||||
: : "rZ" (__val)); \
|
||||
} while (0)
|
||||
|
@ -508,7 +508,7 @@ asm(
|
|||
})
|
||||
|
||||
#define write_sysreg_s(v, r) do { \
|
||||
u64 __val = (u64)v; \
|
||||
u64 __val = (u64)(v); \
|
||||
asm volatile("msr_s " __stringify(r) ", %x0" : : "rZ" (__val)); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ static inline void set_fs(mm_segment_t fs)
|
|||
*/
|
||||
#define __range_ok(addr, size) \
|
||||
({ \
|
||||
unsigned long __addr = (unsigned long __force)(addr); \
|
||||
unsigned long __addr = (unsigned long)(addr); \
|
||||
unsigned long flag, roksum; \
|
||||
__chk_user_ptr(addr); \
|
||||
asm("adds %1, %1, %3; ccmp %1, %4, #2, cc; cset %0, ls" \
|
||||
|
|
|
@ -82,8 +82,8 @@ static const char *__init cpu_read_enable_method(int cpu)
|
|||
* Don't warn spuriously.
|
||||
*/
|
||||
if (cpu != 0)
|
||||
pr_err("%s: missing enable-method property\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: missing enable-method property\n",
|
||||
dn);
|
||||
}
|
||||
} else {
|
||||
enable_method = acpi_get_enable_method(cpu);
|
||||
|
|
|
@ -469,7 +469,7 @@ static u64 __init of_get_cpu_mpidr(struct device_node *dn)
|
|||
*/
|
||||
cell = of_get_property(dn, "reg", NULL);
|
||||
if (!cell) {
|
||||
pr_err("%s: missing reg property\n", dn->full_name);
|
||||
pr_err("%pOF: missing reg property\n", dn);
|
||||
return INVALID_HWID;
|
||||
}
|
||||
|
||||
|
@ -478,7 +478,7 @@ static u64 __init of_get_cpu_mpidr(struct device_node *dn)
|
|||
* Non affinity bits must be set to 0 in the DT
|
||||
*/
|
||||
if (hwid & ~MPIDR_HWID_BITMASK) {
|
||||
pr_err("%s: invalid reg property\n", dn->full_name);
|
||||
pr_err("%pOF: invalid reg property\n", dn);
|
||||
return INVALID_HWID;
|
||||
}
|
||||
return hwid;
|
||||
|
@ -627,8 +627,8 @@ static void __init of_parse_and_init_cpus(void)
|
|||
goto next;
|
||||
|
||||
if (is_mpidr_duplicate(cpu_count, hwid)) {
|
||||
pr_err("%s: duplicate cpu reg properties in the DT\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: duplicate cpu reg properties in the DT\n",
|
||||
dn);
|
||||
goto next;
|
||||
}
|
||||
|
||||
|
@ -640,8 +640,8 @@ static void __init of_parse_and_init_cpus(void)
|
|||
*/
|
||||
if (hwid == cpu_logical_map(0)) {
|
||||
if (bootcpu_valid) {
|
||||
pr_err("%s: duplicate boot cpu reg property in DT\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: duplicate boot cpu reg property in DT\n",
|
||||
dn);
|
||||
goto next;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ static int __init get_cpu_for_node(struct device_node *node)
|
|||
}
|
||||
}
|
||||
|
||||
pr_crit("Unable to find CPU node for %s\n", cpu_node->full_name);
|
||||
pr_crit("Unable to find CPU node for %pOF\n", cpu_node);
|
||||
|
||||
of_node_put(cpu_node);
|
||||
return -1;
|
||||
|
@ -71,8 +71,8 @@ static int __init parse_core(struct device_node *core, int cluster_id,
|
|||
cpu_topology[cpu].core_id = core_id;
|
||||
cpu_topology[cpu].thread_id = i;
|
||||
} else {
|
||||
pr_err("%s: Can't get CPU for thread\n",
|
||||
t->full_name);
|
||||
pr_err("%pOF: Can't get CPU for thread\n",
|
||||
t);
|
||||
of_node_put(t);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -84,15 +84,15 @@ static int __init parse_core(struct device_node *core, int cluster_id,
|
|||
cpu = get_cpu_for_node(core);
|
||||
if (cpu >= 0) {
|
||||
if (!leaf) {
|
||||
pr_err("%s: Core has both threads and CPU\n",
|
||||
core->full_name);
|
||||
pr_err("%pOF: Core has both threads and CPU\n",
|
||||
core);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
cpu_topology[cpu].cluster_id = cluster_id;
|
||||
cpu_topology[cpu].core_id = core_id;
|
||||
} else if (leaf) {
|
||||
pr_err("%s: Can't get CPU for leaf core\n", core->full_name);
|
||||
pr_err("%pOF: Can't get CPU for leaf core\n", core);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -137,8 +137,8 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
has_cores = true;
|
||||
|
||||
if (depth == 0) {
|
||||
pr_err("%s: cpu-map children should be clusters\n",
|
||||
c->full_name);
|
||||
pr_err("%pOF: cpu-map children should be clusters\n",
|
||||
c);
|
||||
of_node_put(c);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -146,8 +146,8 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
if (leaf) {
|
||||
ret = parse_core(c, cluster_id, core_id++);
|
||||
} else {
|
||||
pr_err("%s: Non-leaf cluster with core %s\n",
|
||||
cluster->full_name, name);
|
||||
pr_err("%pOF: Non-leaf cluster with core %s\n",
|
||||
cluster, name);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -159,7 +159,7 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
} while (c);
|
||||
|
||||
if (leaf && !has_cores)
|
||||
pr_warn("%s: empty cluster\n", cluster->full_name);
|
||||
pr_warn("%pOF: empty cluster\n", cluster);
|
||||
|
||||
if (leaf)
|
||||
cluster_id++;
|
||||
|
|
|
@ -274,10 +274,12 @@ static DEFINE_RAW_SPINLOCK(die_lock);
|
|||
void die(const char *str, struct pt_regs *regs, int err)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&die_lock, flags);
|
||||
|
||||
oops_enter();
|
||||
|
||||
raw_spin_lock_irq(&die_lock);
|
||||
console_verbose();
|
||||
bust_spinlocks(1);
|
||||
ret = __die(str, err, regs);
|
||||
|
@ -287,13 +289,15 @@ void die(const char *str, struct pt_regs *regs, int err)
|
|||
|
||||
bust_spinlocks(0);
|
||||
add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
|
||||
raw_spin_unlock_irq(&die_lock);
|
||||
oops_exit();
|
||||
|
||||
if (in_interrupt())
|
||||
panic("Fatal exception in interrupt");
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception");
|
||||
|
||||
raw_spin_unlock_irqrestore(&die_lock, flags);
|
||||
|
||||
if (ret != NOTIFY_STOP)
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
|
|
@ -30,9 +30,10 @@
|
|||
*/
|
||||
ENTRY(copy_page)
|
||||
alternative_if ARM64_HAS_NO_HW_PREFETCH
|
||||
# Prefetch two cache lines ahead.
|
||||
// Prefetch three cache lines ahead.
|
||||
prfm pldl1strm, [x1, #128]
|
||||
prfm pldl1strm, [x1, #256]
|
||||
prfm pldl1strm, [x1, #384]
|
||||
alternative_else_nop_endif
|
||||
|
||||
ldp x2, x3, [x1]
|
||||
|
|
|
@ -329,7 +329,7 @@ static int __swiotlb_mmap(struct device *dev,
|
|||
vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
|
||||
is_device_dma_coherent(dev));
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
return __swiotlb_mmap_pfn(vma, pfn, size);
|
||||
|
@ -706,7 +706,7 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
|
|||
vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
|
||||
is_device_dma_coherent(dev));
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
|
||||
|
|
|
@ -496,7 +496,7 @@ void mark_rodata_ro(void)
|
|||
|
||||
static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,
|
||||
pgprot_t prot, struct vm_struct *vma,
|
||||
int flags)
|
||||
int flags, unsigned long vm_flags)
|
||||
{
|
||||
phys_addr_t pa_start = __pa_symbol(va_start);
|
||||
unsigned long size = va_end - va_start;
|
||||
|
@ -507,10 +507,13 @@ static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,
|
|||
__create_pgd_mapping(pgd, pa_start, (unsigned long)va_start, size, prot,
|
||||
early_pgtable_alloc, flags);
|
||||
|
||||
if (!(vm_flags & VM_NO_GUARD))
|
||||
size += PAGE_SIZE;
|
||||
|
||||
vma->addr = va_start;
|
||||
vma->phys_addr = pa_start;
|
||||
vma->size = size;
|
||||
vma->flags = VM_MAP;
|
||||
vma->flags = VM_MAP | vm_flags;
|
||||
vma->caller = __builtin_return_address(0);
|
||||
|
||||
vm_area_add_early(vma);
|
||||
|
@ -541,14 +544,15 @@ static void __init map_kernel(pgd_t *pgd)
|
|||
* Only rodata will be remapped with different permissions later on,
|
||||
* all other segments are allowed to use contiguous mappings.
|
||||
*/
|
||||
map_kernel_segment(pgd, _text, _etext, text_prot, &vmlinux_text, 0);
|
||||
map_kernel_segment(pgd, _text, _etext, text_prot, &vmlinux_text, 0,
|
||||
VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __start_rodata, __inittext_begin, PAGE_KERNEL,
|
||||
&vmlinux_rodata, NO_CONT_MAPPINGS);
|
||||
&vmlinux_rodata, NO_CONT_MAPPINGS, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __inittext_begin, __inittext_end, text_prot,
|
||||
&vmlinux_inittext, 0);
|
||||
&vmlinux_inittext, 0, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __initdata_begin, __initdata_end, PAGE_KERNEL,
|
||||
&vmlinux_initdata, 0);
|
||||
map_kernel_segment(pgd, _data, _end, PAGE_KERNEL, &vmlinux_data, 0);
|
||||
&vmlinux_initdata, 0, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, _data, _end, PAGE_KERNEL, &vmlinux_data, 0, 0);
|
||||
|
||||
if (!pgd_val(*pgd_offset_raw(pgd, FIXADDR_START))) {
|
||||
/*
|
||||
|
|
|
@ -208,8 +208,6 @@ int __init numa_add_memblk(int nid, u64 start, u64 end)
|
|||
}
|
||||
|
||||
node_set(nid, numa_nodes_parsed);
|
||||
pr_info("Adding memblock [0x%llx - 0x%llx] on node %d\n",
|
||||
start, (end - 1), nid);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -223,10 +221,7 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
|
|||
void *nd;
|
||||
int tnid;
|
||||
|
||||
if (start_pfn < end_pfn)
|
||||
pr_info("Initmem setup node %d [mem %#010Lx-%#010Lx]\n", nid,
|
||||
start_pfn << PAGE_SHIFT, (end_pfn << PAGE_SHIFT) - 1);
|
||||
else
|
||||
if (start_pfn >= end_pfn)
|
||||
pr_info("Initmem setup node %d [<memory-less node>]\n", nid);
|
||||
|
||||
nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
" .section __bug_table,\"aw\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .long %1\n" \
|
||||
" .short %2\n" \
|
||||
|
@ -38,7 +38,7 @@
|
|||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
" .section __bug_table,\"aw\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .short %1\n" \
|
||||
" .org 2b + %2\n" \
|
||||
|
|
|
@ -44,8 +44,7 @@ flat_get_relocate_addr (unsigned long relval)
|
|||
return relval & 0x03ffffff; /* Mask out top 6 bits */
|
||||
}
|
||||
|
||||
static inline int flat_set_persistent(unsigned long relval,
|
||||
unsigned long *persistent)
|
||||
static inline int flat_set_persistent(u32 relval, u32 *persistent)
|
||||
{
|
||||
int type = (relval >> 26) & 7;
|
||||
if (type == 3) {
|
||||
|
|
|
@ -32,7 +32,7 @@ unsigned long bfin_get_addr_from_rp(u32 *ptr,
|
|||
break;
|
||||
|
||||
case FLAT_BFIN_RELOC_TYPE_32_BIT:
|
||||
pr_debug("*ptr = %lx", get_unaligned(ptr));
|
||||
pr_debug("*ptr = %x", get_unaligned(ptr));
|
||||
val = get_unaligned(ptr);
|
||||
break;
|
||||
|
||||
|
@ -77,7 +77,7 @@ void bfin_put_addr_at_rp(u32 *ptr, u32 addr, u32 relval)
|
|||
|
||||
case FLAT_BFIN_RELOC_TYPE_32_BIT:
|
||||
put_unaligned(addr, ptr);
|
||||
pr_debug("new ptr =%lx", get_unaligned(ptr));
|
||||
pr_debug("new ptr =%x", get_unaligned(ptr));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ static inline int flat_get_addr_from_rp(u32 __user *rp, u32 relval, u32 flags,
|
|||
u32 *addr, u32 *persistent)
|
||||
{
|
||||
u32 val = get_unaligned((__force u32 *)rp);
|
||||
if (!(flags & FLAT_FLAG_GOTPIC)
|
||||
if (!(flags & FLAT_FLAG_GOTPIC))
|
||||
val &= 0x00ffffff;
|
||||
*addr = val;
|
||||
return 0;
|
||||
|
|
|
@ -30,8 +30,7 @@ static inline int flat_put_addr_at_rp(u32 __user *rp, u32 addr, u32 rel)
|
|||
}
|
||||
#define flat_get_relocate_addr(rel) (rel)
|
||||
|
||||
static inline int flat_set_persistent(unsigned long relval,
|
||||
unsigned long *persistent)
|
||||
static inline int flat_set_persistent(u32 relval, u32 *persistent)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
/* I hope the range from 0x5480 on is free ... */
|
||||
#define TIOCSCTTY 0x5480 /* become controlling tty */
|
||||
|
|
|
@ -232,7 +232,7 @@ static int mips_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
else
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < count && user_count <= (count - off)) {
|
||||
|
|
|
@ -21,7 +21,7 @@ do { \
|
|||
asm volatile( \
|
||||
" syscall 15 \n" \
|
||||
"0: \n" \
|
||||
" .section __bug_table,\"a\" \n" \
|
||||
" .section __bug_table,\"aw\" \n" \
|
||||
" .long 0b,%0,%1 \n" \
|
||||
" .previous \n" \
|
||||
: \
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_SLAB=y
|
||||
|
@ -14,7 +12,6 @@ CONFIG_OPROFILE=m
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PA7100LC=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
CONFIG_GSC_LASI=y
|
||||
|
@ -32,11 +29,9 @@ CONFIG_IP_PNP_DHCP=y
|
|||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_NET_PKTGEN=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
|
@ -65,21 +60,20 @@ CONFIG_MD_LINEAR=m
|
|||
CONFIG_MD_RAID0=m
|
||||
CONFIG_MD_RAID1=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=m
|
||||
CONFIG_LASI_82596=y
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||
|
@ -88,22 +82,17 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
|
|||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_MUX is not set
|
||||
CONFIG_PDC_CONSOLE=y
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_PRINTER=m
|
||||
CONFIG_PPDEV=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
|
@ -111,13 +100,9 @@ CONFIG_LOGO=y
|
|||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_HARMONY=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
|
@ -130,14 +115,10 @@ CONFIG_PROC_KCORE=y
|
|||
CONFIG_TMPFS=y
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_RPCSEC_GSS_SPKM3=m
|
||||
CONFIG_SMB_FS=m
|
||||
CONFIG_SMB_NLS_DEFAULT=y
|
||||
CONFIG_CIFS=m
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
|
@ -177,21 +158,16 @@ CONFIG_NLS_ISO8859_15=m
|
|||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_AES=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
|
@ -200,6 +176,7 @@ CONFIG_CRYPTO_SERPENT=m
|
|||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_SLAB=y
|
||||
|
@ -16,7 +13,6 @@ CONFIG_OPROFILE=m
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PA8X00=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_SMP=y
|
||||
|
@ -43,21 +39,17 @@ CONFIG_IP_PNP_DHCP=y
|
|||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
|
@ -70,7 +62,6 @@ CONFIG_IP6_NF_MATCH_OPTS=m
|
|||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_LOG=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
|
@ -94,7 +85,6 @@ CONFIG_BLK_DEV_SD=y
|
|||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_QLOGIC_1280=m
|
||||
|
@ -106,43 +96,38 @@ CONFIG_MD_RAID0=y
|
|||
CONFIG_MD_RAID1=y
|
||||
CONFIG_FUSION=y
|
||||
CONFIG_FUSION_SPI=m
|
||||
CONFIG_FUSION_FC=m
|
||||
CONFIG_FUSION_CTL=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
CONFIG_PCMCIA_3C574=m
|
||||
CONFIG_PCMCIA_3C589=m
|
||||
CONFIG_VORTEX=m
|
||||
CONFIG_TYPHOON=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_TIGON3=m
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_DE2104X=m
|
||||
CONFIG_TULIP=y
|
||||
CONFIG_TULIP_MMIO=y
|
||||
CONFIG_PCMCIA_XIRCOM=m
|
||||
CONFIG_HP100=m
|
||||
CONFIG_NET_PCI=y
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_E100=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_E1000=m
|
||||
CONFIG_TIGON3=m
|
||||
CONFIG_NET_PCMCIA=y
|
||||
CONFIG_PCMCIA_3C589=m
|
||||
CONFIG_PCMCIA_3C574=m
|
||||
CONFIG_PCMCIA_SMC91C92=m
|
||||
CONFIG_PCMCIA_XIRC2PS=m
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_CS=m
|
||||
|
@ -151,7 +136,6 @@ CONFIG_SERIAL_8250_EXTENDED=y
|
|||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_PDC_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
# CONFIG_HWMON is not set
|
||||
|
@ -160,7 +144,6 @@ CONFIG_AGP_PARISC=y
|
|||
# CONFIG_STI_CONSOLE is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
|
@ -173,13 +156,9 @@ CONFIG_PROC_KCORE=y
|
|||
CONFIG_TMPFS=y
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_RPCSEC_GSS_SPKM3=m
|
||||
CONFIG_SMB_FS=m
|
||||
CONFIG_SMB_NLS_DEFAULT=y
|
||||
CONFIG_CIFS=m
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
|
@ -187,17 +166,12 @@ CONFIG_NLS_ASCII=m
|
|||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
|
|
|
@ -3,7 +3,6 @@ CONFIG_SYSVIPC=y
|
|||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
|
@ -25,8 +24,6 @@ CONFIG_INET=y
|
|||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
|
@ -53,10 +50,9 @@ CONFIG_MD_LINEAR=y
|
|||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_LASI_82596=y
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_TULIP=y
|
||||
CONFIG_LASI_82596=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
|
@ -71,40 +67,31 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
CONFIG_PRINTER=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_HARMONY=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_SMB_FS=y
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SECURITY=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_SLAB=y
|
||||
|
@ -15,7 +12,6 @@ CONFIG_OPROFILE=m
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PA8X00=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_GSC is not set
|
||||
|
@ -31,13 +27,11 @@ CONFIG_INET=y
|
|||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NETFILTER_DEBUG=y
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_NET_PKTGEN=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
|
@ -50,13 +44,11 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m
|
|||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_NS87415=y
|
||||
CONFIG_PATA_SIL680=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||
|
@ -76,28 +68,23 @@ CONFIG_FUSION=y
|
|||
CONFIG_FUSION_SPI=m
|
||||
CONFIG_FUSION_CTL=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_TIGON3=m
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_DE2104X=m
|
||||
CONFIG_TULIP=y
|
||||
CONFIG_TULIP_MMIO=y
|
||||
CONFIG_NET_PCI=y
|
||||
CONFIG_E100=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_E1000=m
|
||||
CONFIG_TIGON3=m
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPPOE=m
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1600
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1200
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_SERIO=m
|
||||
|
@ -111,7 +98,6 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
|
@ -121,9 +107,6 @@ CONFIG_LOGO=y
|
|||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_AD1889=y
|
||||
CONFIG_USB_HIDDEV=y
|
||||
CONFIG_USB=y
|
||||
|
@ -139,7 +122,6 @@ CONFIG_USB_MICROTEK=m
|
|||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
|
@ -149,7 +131,6 @@ CONFIG_VFAT_FS=m
|
|||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
|
@ -159,18 +140,13 @@ CONFIG_NLS_ASCII=m
|
|||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_MD5=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_DES=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
# CONFIG_CROSS_MEMORY_ATTACH is not set
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_SLAB=y
|
||||
|
@ -23,7 +20,6 @@ CONFIG_PA8X00=y
|
|||
CONFIG_64BIT=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_PREEMPT=y
|
||||
# CONFIG_CROSS_MEMORY_ATTACH is not set
|
||||
CONFIG_IOMMU_CCIO=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LBA=y
|
||||
|
@ -146,7 +142,6 @@ CONFIG_FB_FOREIGN_ENDIAN=y
|
|||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_STI is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
|
@ -157,12 +152,9 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_AD1889=m
|
||||
# CONFIG_SND_USB is not set
|
||||
# CONFIG_SND_GSC is not set
|
||||
|
@ -174,8 +166,6 @@ CONFIG_EXT2_FS_XATTR=y
|
|||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT4_FS=m
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_REISERFS_PROC_INFO=y
|
||||
CONFIG_XFS_FS=m
|
||||
|
@ -238,11 +228,8 @@ CONFIG_DEBUG_SLAB=y
|
|||
CONFIG_DEBUG_SLAB_LEAK=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_PROVE_RCU_DELAY=y
|
||||
CONFIG_DEBUG_BLOCK_EXT_DEVT=y
|
||||
CONFIG_LATENCYTOP=y
|
||||
CONFIG_KEYS=y
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_SLAB=y
|
||||
|
@ -41,9 +39,7 @@ CONFIG_IP_PNP_DHCP=y
|
|||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_INET6_AH=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
|
@ -82,26 +78,23 @@ CONFIG_MD_RAID1=y
|
|||
CONFIG_MD_RAID10=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=m
|
||||
CONFIG_LASI_82596=y
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_TULIP=y
|
||||
CONFIG_NET_PCI=y
|
||||
CONFIG_ACENIC=y
|
||||
CONFIG_TIGON3=y
|
||||
CONFIG_NET_PCMCIA=y
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_TULIP=y
|
||||
CONFIG_LASI_82596=y
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPPOE=m
|
||||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
CONFIG_MOUSE_SERIAL=y
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_CS=y
|
||||
|
@ -109,31 +102,24 @@ CONFIG_SERIAL_8250_NR_UARTS=17
|
|||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_PRINTER=m
|
||||
CONFIG_PPDEV=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_AD1889=y
|
||||
CONFIG_SND_HARMONY=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
|
@ -141,7 +127,6 @@ CONFIG_HID_NTRIG=y
|
|||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SONY=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_HID_TOPSEED=y
|
||||
CONFIG_USB=y
|
||||
|
@ -150,21 +135,15 @@ CONFIG_USB_OHCI_HCD=y
|
|||
CONFIG_USB_UHCI_HCD=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_RPCSEC_GSS_SPKM3=m
|
||||
CONFIG_SMB_FS=m
|
||||
CONFIG_SMB_NLS_DEFAULT=y
|
||||
CONFIG_CIFS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
|
@ -204,30 +183,24 @@ CONFIG_NLS_ISO8859_15=m
|
|||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_HEADERS_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_KEYS=y
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_AES=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_FONTS=y
|
||||
|
|
|
@ -2,15 +2,11 @@ CONFIG_LOCALVERSION="-32bit"
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
|
@ -49,7 +45,6 @@ CONFIG_INET_ESP=m
|
|||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_LLC2=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
|
@ -149,10 +144,8 @@ CONFIG_PRINTER=m
|
|||
CONFIG_PPDEV=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_AGP=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_FOREIGN_ENDIAN=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
|
@ -169,11 +162,8 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_AD1889=m
|
||||
CONFIG_SND_HARMONY=m
|
||||
CONFIG_HIDRAW=y
|
||||
|
@ -223,12 +213,7 @@ CONFIG_EXT2_FS=y
|
|||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT3_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_QUOTA=y
|
||||
CONFIG_XFS_RT=y
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
CONFIG_QFMT_V2=y
|
||||
|
@ -293,15 +278,12 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
|||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_TIMER_STATS=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_LATENCYTOP=y
|
||||
CONFIG_LKDTM=m
|
||||
CONFIG_KEYS=y
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
|
@ -320,7 +302,6 @@ CONFIG_CRYPTO_SERPENT=m
|
|||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRC_CCITT=m
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_FONTS=y
|
||||
|
|
|
@ -8,10 +8,11 @@ CONFIG_TASKSTATS=y
|
|||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASK_XACCT=y
|
||||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -52,7 +53,6 @@ CONFIG_INET_ESP=m
|
|||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
CONFIG_INET_LRO=m
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_ADVANCED is not set
|
||||
|
@ -84,7 +84,6 @@ CONFIG_PATA_SIL680=y
|
|||
CONFIG_ATA_GENERIC=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
|
@ -138,21 +137,21 @@ CONFIG_QLGE=m
|
|||
# CONFIG_NET_VENDOR_TI is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_MARVELL_PHY=m
|
||||
CONFIG_DAVICOM_PHY=m
|
||||
CONFIG_QSEMI_PHY=m
|
||||
CONFIG_LXT_PHY=m
|
||||
CONFIG_CICADA_PHY=m
|
||||
CONFIG_VITESSE_PHY=m
|
||||
CONFIG_SMSC_PHY=m
|
||||
CONFIG_BROADCOM_PHY=m
|
||||
CONFIG_ICPLUS_PHY=m
|
||||
CONFIG_REALTEK_PHY=m
|
||||
CONFIG_NATIONAL_PHY=m
|
||||
CONFIG_STE10XP=m
|
||||
CONFIG_LSI_ET1011C_PHY=m
|
||||
CONFIG_MDIO_BITBANG=m
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_BROADCOM_PHY=m
|
||||
CONFIG_CICADA_PHY=m
|
||||
CONFIG_DAVICOM_PHY=m
|
||||
CONFIG_ICPLUS_PHY=m
|
||||
CONFIG_LSI_ET1011C_PHY=m
|
||||
CONFIG_LXT_PHY=m
|
||||
CONFIG_MARVELL_PHY=m
|
||||
CONFIG_NATIONAL_PHY=m
|
||||
CONFIG_QSEMI_PHY=m
|
||||
CONFIG_REALTEK_PHY=m
|
||||
CONFIG_SMSC_PHY=m
|
||||
CONFIG_STE10XP=m
|
||||
CONFIG_VITESSE_PHY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
|
@ -166,10 +165,8 @@ CONFIG_INPUT_MISC=y
|
|||
CONFIG_SERIO_SERPORT=m
|
||||
# CONFIG_HP_SDC is not set
|
||||
CONFIG_SERIO_RAW=m
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_NOZOMI=m
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
|
@ -207,10 +204,8 @@ CONFIG_AGP=y
|
|||
CONFIG_AGP_PARISC=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_RADEON=y
|
||||
CONFIG_DRM_RADEON_UMS=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_LOGO=y
|
||||
|
@ -246,8 +241,6 @@ CONFIG_EXT2_FS_XATTR=y
|
|||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT3_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_BTRFS_FS=m
|
||||
CONFIG_QUOTA=y
|
||||
|
@ -286,27 +279,16 @@ CONFIG_DEBUG_FS=y
|
|||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_TIMER_STATS=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_CRC_CCITT=m
|
||||
CONFIG_LIBCRC32C=y
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
do { \
|
||||
asm volatile("\n" \
|
||||
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
|
||||
"\t.pushsection __bug_table,\"a\"\n" \
|
||||
"\t.pushsection __bug_table,\"aw\"\n" \
|
||||
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
|
||||
"\t.short %c1, %c2\n" \
|
||||
"\t.org 2b+%c3\n" \
|
||||
|
@ -50,7 +50,7 @@
|
|||
do { \
|
||||
asm volatile("\n" \
|
||||
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
|
||||
"\t.pushsection __bug_table,\"a\"\n" \
|
||||
"\t.pushsection __bug_table,\"aw\"\n" \
|
||||
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
|
||||
"\t.short %c1, %c2\n" \
|
||||
"\t.org 2b+%c3\n" \
|
||||
|
@ -64,7 +64,7 @@
|
|||
do { \
|
||||
asm volatile("\n" \
|
||||
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
|
||||
"\t.pushsection __bug_table,\"a\"\n" \
|
||||
"\t.pushsection __bug_table,\"aw\"\n" \
|
||||
"2:\t" ASM_WORD_INSN "1b\n" \
|
||||
"\t.short %c0\n" \
|
||||
"\t.org 2b+%c1\n" \
|
||||
|
|
|
@ -228,6 +228,17 @@ struct pdc_pat_mem_read_pd_retinfo { /* PDC_PAT_MEM/PDC_PAT_MEM_PD_READ */
|
|||
unsigned long pdt_entries;
|
||||
};
|
||||
|
||||
struct pdc_pat_mem_phys_mem_location { /* PDC_PAT_MEM/PDC_PAT_MEM_ADDRESS */
|
||||
u64 cabinet:8;
|
||||
u64 ign1:8;
|
||||
u64 ign2:8;
|
||||
u64 cell_slot:8;
|
||||
u64 ign3:8;
|
||||
u64 dimm_slot:8; /* DIMM slot, e.g. 0x1A, 0x2B, show user hex value! */
|
||||
u64 ign4:8;
|
||||
u64 source:4; /* for mem: always 0x07 */
|
||||
u64 source_detail:4; /* for mem: always 0x04 (SIMM or DIMM) */
|
||||
};
|
||||
|
||||
struct pdc_pat_pd_addr_map_entry {
|
||||
unsigned char entry_type; /* 1 = Memory Descriptor Entry Type */
|
||||
|
@ -319,6 +330,9 @@ extern int pdc_pat_mem_read_cell_pdt(struct pdc_pat_mem_read_pd_retinfo *pret,
|
|||
extern int pdc_pat_mem_read_pd_pdt(struct pdc_pat_mem_read_pd_retinfo *pret,
|
||||
unsigned long *pdt_entries_ptr, unsigned long count,
|
||||
unsigned long offset);
|
||||
extern int pdc_pat_mem_get_dimm_phys_location(
|
||||
struct pdc_pat_mem_phys_mem_location *pret,
|
||||
unsigned long phys_addr);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
|
||||
#define FIOCLEX 0x5451
|
||||
|
|
|
@ -453,8 +453,8 @@ void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
|
|||
before it can be accessed through the kernel mapping. */
|
||||
preempt_disable();
|
||||
flush_dcache_page_asm(__pa(vfrom), vaddr);
|
||||
preempt_enable();
|
||||
copy_page_asm(vto, vfrom);
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(copy_user_page);
|
||||
|
||||
|
@ -539,6 +539,10 @@ void flush_cache_mm(struct mm_struct *mm)
|
|||
struct vm_area_struct *vma;
|
||||
pgd_t *pgd;
|
||||
|
||||
/* Flush the TLB to avoid speculation if coherency is required. */
|
||||
if (parisc_requires_coherency())
|
||||
flush_tlb_all();
|
||||
|
||||
/* Flushing the whole cache on each cpu takes forever on
|
||||
rp3440, etc. So, avoid it if the mm isn't too big. */
|
||||
if (mm_total_size(mm) >= parisc_cache_flush_threshold) {
|
||||
|
@ -577,33 +581,22 @@ void flush_cache_mm(struct mm_struct *mm)
|
|||
void flush_cache_range(struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
pgd_t *pgd;
|
||||
|
||||
BUG_ON(!vma->vm_mm->context);
|
||||
|
||||
/* Flush the TLB to avoid speculation if coherency is required. */
|
||||
if (parisc_requires_coherency())
|
||||
flush_tlb_range(vma, start, end);
|
||||
|
||||
if ((end - start) >= parisc_cache_flush_threshold) {
|
||||
flush_cache_all();
|
||||
return;
|
||||
}
|
||||
|
||||
if (vma->vm_mm->context == mfsp(3)) {
|
||||
BUG_ON(vma->vm_mm->context != mfsp(3));
|
||||
|
||||
flush_user_dcache_range_asm(start, end);
|
||||
if (vma->vm_flags & VM_EXEC)
|
||||
flush_user_icache_range_asm(start, end);
|
||||
return;
|
||||
}
|
||||
|
||||
pgd = vma->vm_mm->pgd;
|
||||
for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) {
|
||||
unsigned long pfn;
|
||||
pte_t *ptep = get_ptep(pgd, addr);
|
||||
if (!ptep)
|
||||
continue;
|
||||
pfn = pte_pfn(*ptep);
|
||||
if (pfn_valid(pfn))
|
||||
__flush_cache_page(vma, addr, PFN_PHYS(pfn));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -612,6 +605,7 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
|
|||
BUG_ON(!vma->vm_mm->context);
|
||||
|
||||
if (pfn_valid(pfn)) {
|
||||
if (parisc_requires_coherency())
|
||||
flush_tlb_page(vma, vmaddr);
|
||||
__flush_cache_page(vma, vmaddr, PFN_PHYS(pfn));
|
||||
}
|
||||
|
|
|
@ -1481,12 +1481,44 @@ int pdc_pat_mem_read_pd_pdt(struct pdc_pat_mem_read_pd_retinfo *pret,
|
|||
unsigned long offset)
|
||||
{
|
||||
int retval;
|
||||
unsigned long flags;
|
||||
unsigned long flags, entries;
|
||||
|
||||
spin_lock_irqsave(&pdc_lock, flags);
|
||||
retval = mem_pdc_call(PDC_PAT_MEM, PDC_PAT_MEM_PD_READ,
|
||||
__pa(&pret), __pa(pdt_entries_ptr),
|
||||
__pa(&pdc_result), __pa(pdt_entries_ptr),
|
||||
count, offset);
|
||||
|
||||
if (retval == PDC_OK) {
|
||||
entries = min(pdc_result[0], count);
|
||||
pret->actual_count_bytes = entries;
|
||||
pret->pdt_entries = entries / sizeof(unsigned long);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* pdc_pat_mem_get_dimm_phys_location - Get physical DIMM slot via PAT firmware
|
||||
* @pret: ptr to hold returned information
|
||||
* @phys_addr: physical address to examine
|
||||
*
|
||||
*/
|
||||
int pdc_pat_mem_get_dimm_phys_location(
|
||||
struct pdc_pat_mem_phys_mem_location *pret,
|
||||
unsigned long phys_addr)
|
||||
{
|
||||
int retval;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&pdc_lock, flags);
|
||||
retval = mem_pdc_call(PDC_PAT_MEM, PDC_PAT_MEM_ADDRESS,
|
||||
__pa(&pdc_result), phys_addr);
|
||||
|
||||
if (retval == PDC_OK)
|
||||
memcpy(pret, &pdc_result, sizeof(*pret));
|
||||
|
||||
spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
|
||||
return retval;
|
||||
|
|
|
@ -413,6 +413,10 @@ static inline void stack_overflow_check(struct pt_regs *regs)
|
|||
if (regs->sr[7])
|
||||
return;
|
||||
|
||||
/* exit if already in panic */
|
||||
if (sysctl_panic_on_stackoverflow < 0)
|
||||
return;
|
||||
|
||||
/* calculate kernel stack usage */
|
||||
stack_usage = sp - stack_start;
|
||||
#ifdef CONFIG_IRQSTACKS
|
||||
|
@ -454,8 +458,10 @@ static inline void stack_overflow_check(struct pt_regs *regs)
|
|||
#ifdef CONFIG_IRQSTACKS
|
||||
panic_check:
|
||||
#endif
|
||||
if (sysctl_panic_on_stackoverflow)
|
||||
if (sysctl_panic_on_stackoverflow) {
|
||||
sysctl_panic_on_stackoverflow = -1; /* disable further checks */
|
||||
panic("low stack detected by irq handler - check messages\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -112,10 +112,12 @@ void __init pdc_pdt_init(void)
|
|||
#ifdef CONFIG_64BIT
|
||||
struct pdc_pat_mem_read_pd_retinfo pat_pret;
|
||||
|
||||
/* try old obsolete PAT firmware function first */
|
||||
pdt_type = PDT_PAT_OLD;
|
||||
ret = pdc_pat_mem_read_cell_pdt(&pat_pret, pdt_entry,
|
||||
MAX_PDT_ENTRIES);
|
||||
if (ret != PDC_OK) {
|
||||
pdt_type = PDT_PAT_OLD;
|
||||
pdt_type = PDT_PAT_NEW;
|
||||
ret = pdc_pat_mem_read_pd_pdt(&pat_pret, pdt_entry,
|
||||
MAX_PDT_TABLE_SIZE, 0);
|
||||
}
|
||||
|
@ -131,10 +133,19 @@ void __init pdc_pdt_init(void)
|
|||
}
|
||||
|
||||
for (i = 0; i < pdt_status.pdt_entries; i++) {
|
||||
if (i < 20)
|
||||
pr_warn("PDT: BAD PAGE #%d at 0x%08lx (error_type = %lu)\n",
|
||||
struct pdc_pat_mem_phys_mem_location loc;
|
||||
|
||||
/* get DIMM slot number */
|
||||
loc.dimm_slot = 0xff;
|
||||
#ifdef CONFIG_64BIT
|
||||
pdc_pat_mem_get_dimm_phys_location(&loc, pdt_entry[i]);
|
||||
#endif
|
||||
|
||||
pr_warn("PDT: BAD PAGE #%d at 0x%08lx, "
|
||||
"DIMM slot %02x (error_type = %lu)\n",
|
||||
i,
|
||||
pdt_entry[i] & PAGE_MASK,
|
||||
loc.dimm_slot,
|
||||
pdt_entry[i] & 1);
|
||||
|
||||
/* mark memory page bad */
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
#include <linux/uaccess.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/nmi.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
@ -145,6 +146,7 @@ void machine_power_off(void)
|
|||
|
||||
/* prevent soft lockup/stalled CPU messages for endless loop. */
|
||||
rcu_sysrq_start();
|
||||
lockup_detector_suspend();
|
||||
for (;;);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,8 @@ SECTIONS
|
|||
*(.text.sys_exit)
|
||||
*(.text.do_sigaltstack)
|
||||
*(.text.do_fork)
|
||||
*(.text.div)
|
||||
*($$*) /* millicode routines */
|
||||
*(.text.*)
|
||||
*(.fixup)
|
||||
*(.lock.text) /* out-of-line lock text */
|
||||
|
|
|
@ -59,6 +59,19 @@ machine-$(CONFIG_PPC64) += 64
|
|||
machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le
|
||||
UTS_MACHINE := $(subst $(space),,$(machine-y))
|
||||
|
||||
# XXX This needs to be before we override LD below
|
||||
ifdef CONFIG_PPC32
|
||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||
else
|
||||
ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
|
||||
# Have the linker provide sfpr if possible.
|
||||
# There is a corresponding test in arch/powerpc/lib/Makefile
|
||||
KBUILD_LDFLAGS_MODULE += --save-restore-funcs
|
||||
else
|
||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
override LD += -EL
|
||||
LDEMULATION := lppc
|
||||
|
@ -190,18 +203,6 @@ else
|
|||
CHECKFLAGS += -D__LITTLE_ENDIAN__
|
||||
endif
|
||||
|
||||
ifdef CONFIG_PPC32
|
||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||
else
|
||||
ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
|
||||
# Have the linker provide sfpr if possible.
|
||||
# There is a corresponding test in arch/powerpc/lib/Makefile
|
||||
KBUILD_LDFLAGS_MODULE += --save-restore-funcs
|
||||
else
|
||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_476FPE_ERR46),y)
|
||||
KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
|
||||
-T $(srctree)/arch/powerpc/platforms/44x/ppc476_modules.lds
|
||||
|
|
|
@ -91,6 +91,7 @@ static inline int hash__pgd_bad(pgd_t pgd)
|
|||
}
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
extern void hash__mark_rodata_ro(void);
|
||||
extern void hash__mark_initmem_nx(void);
|
||||
#endif
|
||||
|
||||
extern void hpte_need_flush(struct mm_struct *mm, unsigned long addr,
|
||||
|
|
|
@ -59,13 +59,14 @@ extern struct patb_entry *partition_tb;
|
|||
#define PRTS_MASK 0x1f /* process table size field */
|
||||
#define PRTB_MASK 0x0ffffffffffff000UL
|
||||
|
||||
/*
|
||||
* Limit process table to PAGE_SIZE table. This
|
||||
* also limit the max pid we can support.
|
||||
* MAX_USER_CONTEXT * 16 bytes of space.
|
||||
*/
|
||||
#define PRTB_SIZE_SHIFT (CONTEXT_BITS + 4)
|
||||
#define PRTB_ENTRIES (1ul << CONTEXT_BITS)
|
||||
/* Number of supported PID bits */
|
||||
extern unsigned int mmu_pid_bits;
|
||||
|
||||
/* Base PID to allocate from */
|
||||
extern unsigned int mmu_base_pid;
|
||||
|
||||
#define PRTB_SIZE_SHIFT (mmu_pid_bits + 4)
|
||||
#define PRTB_ENTRIES (1ul << mmu_pid_bits)
|
||||
|
||||
/*
|
||||
* Power9 currently only support 64K partition table size.
|
||||
|
|
|
@ -1192,5 +1192,6 @@ static inline const int pud_pfn(pud_t pud)
|
|||
BUILD_BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _ASM_POWERPC_BOOK3S_64_PGTABLE_H_ */
|
||||
|
|
|
@ -118,6 +118,7 @@
|
|||
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
extern void radix__mark_rodata_ro(void);
|
||||
extern void radix__mark_initmem_nx(void);
|
||||
#endif
|
||||
|
||||
static inline unsigned long __radix_pte_update(pte_t *ptep, unsigned long clr,
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <asm/asm-offsets.h>
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
.macro EMIT_BUG_ENTRY addr,file,line,flags
|
||||
.section __bug_table,"a"
|
||||
.section __bug_table,"aw"
|
||||
5001: PPC_LONG \addr, 5002f
|
||||
.short \line, \flags
|
||||
.org 5001b+BUG_ENTRY_SIZE
|
||||
|
@ -29,7 +29,7 @@
|
|||
.endm
|
||||
#else
|
||||
.macro EMIT_BUG_ENTRY addr,file,line,flags
|
||||
.section __bug_table,"a"
|
||||
.section __bug_table,"aw"
|
||||
5001: PPC_LONG \addr
|
||||
.short \flags
|
||||
.org 5001b+BUG_ENTRY_SIZE
|
||||
|
@ -42,14 +42,14 @@
|
|||
sizeof(struct bug_entry), respectively */
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
#define _EMIT_BUG_ENTRY \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
".section __bug_table,\"aw\"\n" \
|
||||
"2:\t" PPC_LONG "1b, %0\n" \
|
||||
"\t.short %1, %2\n" \
|
||||
".org 2b+%3\n" \
|
||||
".previous\n"
|
||||
#else
|
||||
#define _EMIT_BUG_ENTRY \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
".section __bug_table,\"aw\"\n" \
|
||||
"2:\t" PPC_LONG "1b\n" \
|
||||
"\t.short %2\n" \
|
||||
".org 2b+%3\n" \
|
||||
|
|
|
@ -67,6 +67,12 @@ extern void __destroy_context(unsigned long context_id);
|
|||
extern void mmu_context_init(void);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_KVM_BOOK3S_HV_POSSIBLE) && defined(CONFIG_PPC_RADIX_MMU)
|
||||
extern void radix_kvm_prefetch_workaround(struct mm_struct *mm);
|
||||
#else
|
||||
static inline void radix_kvm_prefetch_workaround(struct mm_struct *mm) { }
|
||||
#endif
|
||||
|
||||
extern void switch_cop(struct mm_struct *next);
|
||||
extern int use_cop(unsigned long acop, struct mm_struct *mm);
|
||||
extern void drop_cop(unsigned long acop, struct mm_struct *mm);
|
||||
|
@ -79,9 +85,13 @@ static inline void switch_mm_irqs_off(struct mm_struct *prev,
|
|||
struct mm_struct *next,
|
||||
struct task_struct *tsk)
|
||||
{
|
||||
bool new_on_cpu = false;
|
||||
|
||||
/* Mark this context has been used on the new CPU */
|
||||
if (!cpumask_test_cpu(smp_processor_id(), mm_cpumask(next)))
|
||||
if (!cpumask_test_cpu(smp_processor_id(), mm_cpumask(next))) {
|
||||
cpumask_set_cpu(smp_processor_id(), mm_cpumask(next));
|
||||
new_on_cpu = true;
|
||||
}
|
||||
|
||||
/* 32-bit keeps track of the current PGDIR in the thread struct */
|
||||
#ifdef CONFIG_PPC32
|
||||
|
@ -109,6 +119,10 @@ static inline void switch_mm_irqs_off(struct mm_struct *prev,
|
|||
if (cpu_has_feature(CPU_FTR_ALTIVEC))
|
||||
asm volatile ("dssall");
|
||||
#endif /* CONFIG_ALTIVEC */
|
||||
|
||||
if (new_on_cpu)
|
||||
radix_kvm_prefetch_workaround(next);
|
||||
|
||||
/*
|
||||
* The actual HW switching method differs between the various
|
||||
* sub architectures. Out of line for now
|
||||
|
|
|
@ -80,6 +80,13 @@ unsigned long vmalloc_to_phys(void *vmalloc_addr);
|
|||
|
||||
void pgtable_cache_add(unsigned shift, void (*ctor)(void *));
|
||||
void pgtable_cache_init(void);
|
||||
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
void mark_initmem_nx(void);
|
||||
#else
|
||||
static inline void mark_initmem_nx(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_PGTABLE_H */
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
|
|
|
@ -824,7 +824,7 @@ EXC_COMMON(trap_0b_common, 0xb00, unknown_exception)
|
|||
* r3 volatile parameter and return value for status
|
||||
* r4-r10 volatile input and output value
|
||||
* r11 volatile hypercall number and output value
|
||||
* r12 volatile
|
||||
* r12 volatile input and output value
|
||||
* r13-r31 nonvolatile
|
||||
* LR nonvolatile
|
||||
* CTR volatile
|
||||
|
@ -834,25 +834,26 @@ EXC_COMMON(trap_0b_common, 0xb00, unknown_exception)
|
|||
* Other registers nonvolatile
|
||||
*
|
||||
* The intersection of volatile registers that don't contain possible
|
||||
* inputs is: r12, cr0, xer, ctr. We may use these as scratch regs
|
||||
* upon entry without saving.
|
||||
* inputs is: cr0, xer, ctr. We may use these as scratch regs upon entry
|
||||
* without saving, though xer is not a good idea to use, as hardware may
|
||||
* interpret some bits so it may be costly to change them.
|
||||
*/
|
||||
#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
|
||||
/*
|
||||
* There is a little bit of juggling to get syscall and hcall
|
||||
* working well. Save r10 in ctr to be restored in case it is a
|
||||
* hcall.
|
||||
* working well. Save r13 in ctr to avoid using SPRG scratch
|
||||
* register.
|
||||
*
|
||||
* Userspace syscalls have already saved the PPR, hcalls must save
|
||||
* it before setting HMT_MEDIUM.
|
||||
*/
|
||||
#define SYSCALL_KVMTEST \
|
||||
mr r12,r13; \
|
||||
mtctr r13; \
|
||||
GET_PACA(r13); \
|
||||
mtctr r10; \
|
||||
std r10,PACA_EXGEN+EX_R10(r13); \
|
||||
KVMTEST_PR(0xc00); /* uses r10, branch to do_kvm_0xc00_system_call */ \
|
||||
HMT_MEDIUM; \
|
||||
mr r9,r12; \
|
||||
mfctr r9;
|
||||
|
||||
#else
|
||||
#define SYSCALL_KVMTEST \
|
||||
|
@ -935,8 +936,8 @@ EXC_VIRT_END(system_call, 0x4c00, 0x100)
|
|||
* This is a hcall, so register convention is as above, with these
|
||||
* differences:
|
||||
* r13 = PACA
|
||||
* r12 = orig r13
|
||||
* ctr = orig r10
|
||||
* ctr = orig r13
|
||||
* orig r10 saved in PACA
|
||||
*/
|
||||
TRAMP_KVM_BEGIN(do_kvm_0xc00)
|
||||
/*
|
||||
|
@ -944,14 +945,13 @@ TRAMP_KVM_BEGIN(do_kvm_0xc00)
|
|||
* HMT_MEDIUM. That allows the KVM code to save that value into the
|
||||
* guest state (it is the guest's PPR value).
|
||||
*/
|
||||
OPT_GET_SPR(r0, SPRN_PPR, CPU_FTR_HAS_PPR)
|
||||
OPT_GET_SPR(r10, SPRN_PPR, CPU_FTR_HAS_PPR)
|
||||
HMT_MEDIUM
|
||||
OPT_SAVE_REG_TO_PACA(PACA_EXGEN+EX_PPR, r0, CPU_FTR_HAS_PPR)
|
||||
OPT_SAVE_REG_TO_PACA(PACA_EXGEN+EX_PPR, r10, CPU_FTR_HAS_PPR)
|
||||
mfctr r10
|
||||
SET_SCRATCH0(r12)
|
||||
SET_SCRATCH0(r10)
|
||||
std r9,PACA_EXGEN+EX_R9(r13)
|
||||
mfcr r9
|
||||
std r10,PACA_EXGEN+EX_R10(r13)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_STD, 0xc00)
|
||||
#endif
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
* Use unused space in the interrupt stack to save and restore
|
||||
* registers for winkle support.
|
||||
*/
|
||||
#define _MMCR0 GPR0
|
||||
#define _SDR1 GPR3
|
||||
#define _PTCR GPR3
|
||||
#define _RPR GPR4
|
||||
|
@ -272,6 +273,14 @@ power_enter_stop:
|
|||
b pnv_wakeup_noloss
|
||||
|
||||
.Lhandle_esl_ec_set:
|
||||
/*
|
||||
* POWER9 DD2 can incorrectly set PMAO when waking up after a
|
||||
* state-loss idle. Saving and restoring MMCR0 over idle is a
|
||||
* workaround.
|
||||
*/
|
||||
mfspr r4,SPRN_MMCR0
|
||||
std r4,_MMCR0(r1)
|
||||
|
||||
/*
|
||||
* Check if the requested state is a deep idle state.
|
||||
*/
|
||||
|
@ -450,10 +459,14 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_300)
|
|||
pnv_restore_hyp_resource_arch300:
|
||||
/*
|
||||
* Workaround for POWER9, if we lost resources, the ERAT
|
||||
* might have been mixed up and needs flushing.
|
||||
* might have been mixed up and needs flushing. We also need
|
||||
* to reload MMCR0 (see comment above).
|
||||
*/
|
||||
blt cr3,1f
|
||||
PPC_INVALIDATE_ERAT
|
||||
ld r1,PACAR1(r13)
|
||||
ld r4,_MMCR0(r1)
|
||||
mtspr SPRN_MMCR0,r4
|
||||
1:
|
||||
/*
|
||||
* POWER ISA 3. Use PSSCR to determine if we
|
||||
|
|
|
@ -164,8 +164,10 @@ long kvmppc_alloc_reset_hpt(struct kvm *kvm, int order)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (kvm->arch.hpt.virt)
|
||||
if (kvm->arch.hpt.virt) {
|
||||
kvmppc_free_hpt(&kvm->arch.hpt);
|
||||
kvmppc_rmap_reset(kvm);
|
||||
}
|
||||
|
||||
err = kvmppc_allocate_hpt(&info, order);
|
||||
if (err < 0)
|
||||
|
|
|
@ -3211,6 +3211,8 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
|||
run->fail_entry.hardware_entry_failure_reason = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Enable TM so we can read the TM SPRs */
|
||||
mtmsr(mfmsr() | MSR_TM);
|
||||
current->thread.tm_tfhar = mfspr(SPRN_TFHAR);
|
||||
current->thread.tm_tfiar = mfspr(SPRN_TFIAR);
|
||||
current->thread.tm_texasr = mfspr(SPRN_TEXASR);
|
||||
|
|
|
@ -1443,12 +1443,14 @@ mc_cont:
|
|||
ori r6,r6,1
|
||||
mtspr SPRN_CTRLT,r6
|
||||
4:
|
||||
/* Read the guest SLB and save it away */
|
||||
/* Check if we are running hash or radix and store it in cr2 */
|
||||
ld r5, VCPU_KVM(r9)
|
||||
lbz r0, KVM_RADIX(r5)
|
||||
cmpwi r0, 0
|
||||
cmpwi cr2,r0,0
|
||||
|
||||
/* Read the guest SLB and save it away */
|
||||
li r5, 0
|
||||
bne 3f /* for radix, save 0 entries */
|
||||
bne cr2, 3f /* for radix, save 0 entries */
|
||||
lwz r0,VCPU_SLB_NR(r9) /* number of entries in SLB */
|
||||
mtctr r0
|
||||
li r6,0
|
||||
|
@ -1712,11 +1714,6 @@ BEGIN_FTR_SECTION_NESTED(96)
|
|||
END_FTR_SECTION_NESTED(CPU_FTR_ARCH_300, 0, 96)
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
|
||||
22:
|
||||
/* Clear out SLB */
|
||||
li r5,0
|
||||
slbmte r5,r5
|
||||
slbia
|
||||
ptesync
|
||||
|
||||
/* Restore host values of some registers */
|
||||
BEGIN_FTR_SECTION
|
||||
|
@ -1737,10 +1734,56 @@ BEGIN_FTR_SECTION
|
|||
mtspr SPRN_PID, r7
|
||||
mtspr SPRN_IAMR, r8
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
|
||||
|
||||
#ifdef CONFIG_PPC_RADIX_MMU
|
||||
/*
|
||||
* Are we running hash or radix ?
|
||||
*/
|
||||
beq cr2,3f
|
||||
|
||||
/* Radix: Handle the case where the guest used an illegal PID */
|
||||
LOAD_REG_ADDR(r4, mmu_base_pid)
|
||||
lwz r3, VCPU_GUEST_PID(r9)
|
||||
lwz r5, 0(r4)
|
||||
cmpw cr0,r3,r5
|
||||
blt 2f
|
||||
|
||||
/*
|
||||
* Illegal PID, the HW might have prefetched and cached in the TLB
|
||||
* some translations for the LPID 0 / guest PID combination which
|
||||
* Linux doesn't know about, so we need to flush that PID out of
|
||||
* the TLB. First we need to set LPIDR to 0 so tlbiel applies to
|
||||
* the right context.
|
||||
*/
|
||||
li r0,0
|
||||
mtspr SPRN_LPID,r0
|
||||
isync
|
||||
|
||||
/* Then do a congruence class local flush */
|
||||
ld r6,VCPU_KVM(r9)
|
||||
lwz r0,KVM_TLB_SETS(r6)
|
||||
mtctr r0
|
||||
li r7,0x400 /* IS field = 0b01 */
|
||||
ptesync
|
||||
sldi r0,r3,32 /* RS has PID */
|
||||
1: PPC_TLBIEL(7,0,2,1,1) /* RIC=2, PRS=1, R=1 */
|
||||
addi r7,r7,0x1000
|
||||
bdnz 1b
|
||||
ptesync
|
||||
|
||||
2: /* Flush the ERAT on radix P9 DD1 guest exit */
|
||||
BEGIN_FTR_SECTION
|
||||
PPC_INVALIDATE_ERAT
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_POWER9_DD1)
|
||||
b 4f
|
||||
#endif /* CONFIG_PPC_RADIX_MMU */
|
||||
|
||||
/* Hash: clear out SLB */
|
||||
3: li r5,0
|
||||
slbmte r5,r5
|
||||
slbia
|
||||
ptesync
|
||||
4:
|
||||
/*
|
||||
* POWER7/POWER8 guest -> host partition switch code.
|
||||
* We don't have to lock against tlbies but we do
|
||||
|
|
|
@ -402,6 +402,7 @@ void __init mem_init(void)
|
|||
void free_initmem(void)
|
||||
{
|
||||
ppc_md.progress = ppc_printk_progress;
|
||||
mark_initmem_nx();
|
||||
free_initmem_default(POISON_FREE_INITMEM);
|
||||
}
|
||||
|
||||
|
|
|
@ -126,9 +126,10 @@ static int hash__init_new_context(struct mm_struct *mm)
|
|||
static int radix__init_new_context(struct mm_struct *mm)
|
||||
{
|
||||
unsigned long rts_field;
|
||||
int index;
|
||||
int index, max_id;
|
||||
|
||||
index = alloc_context_id(1, PRTB_ENTRIES - 1);
|
||||
max_id = (1 << mmu_pid_bits) - 1;
|
||||
index = alloc_context_id(mmu_base_pid, max_id);
|
||||
if (index < 0)
|
||||
return index;
|
||||
|
||||
|
|
|
@ -425,33 +425,51 @@ int hash__has_transparent_hugepage(void)
|
|||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
void hash__mark_rodata_ro(void)
|
||||
static bool hash__change_memory_range(unsigned long start, unsigned long end,
|
||||
unsigned long newpp)
|
||||
{
|
||||
unsigned long start = (unsigned long)_stext;
|
||||
unsigned long end = (unsigned long)__init_begin;
|
||||
unsigned long idx;
|
||||
unsigned int step, shift;
|
||||
unsigned long newpp = PP_RXXX;
|
||||
|
||||
shift = mmu_psize_defs[mmu_linear_psize].shift;
|
||||
step = 1 << shift;
|
||||
|
||||
start = ((start + step - 1) >> shift) << shift;
|
||||
end = (end >> shift) << shift;
|
||||
start = ALIGN_DOWN(start, step);
|
||||
end = ALIGN(end, step); // aligns up
|
||||
|
||||
pr_devel("marking ro start %lx, end %lx, step %x\n",
|
||||
start, end, step);
|
||||
if (start >= end)
|
||||
return false;
|
||||
|
||||
if (start == end) {
|
||||
pr_warn("could not set rodata ro, relocate the start"
|
||||
" of the kernel to a 0x%x boundary\n", step);
|
||||
return;
|
||||
}
|
||||
pr_debug("Changing page protection on range 0x%lx-0x%lx, to 0x%lx, step 0x%x\n",
|
||||
start, end, newpp, step);
|
||||
|
||||
for (idx = start; idx < end; idx += step)
|
||||
/* Not sure if we can do much with the return value */
|
||||
mmu_hash_ops.hpte_updateboltedpp(newpp, idx, mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void hash__mark_rodata_ro(void)
|
||||
{
|
||||
unsigned long start, end;
|
||||
|
||||
start = (unsigned long)_stext;
|
||||
end = (unsigned long)__init_begin;
|
||||
|
||||
WARN_ON(!hash__change_memory_range(start, end, PP_RXXX));
|
||||
}
|
||||
|
||||
void hash__mark_initmem_nx(void)
|
||||
{
|
||||
unsigned long start, end, pp;
|
||||
|
||||
start = (unsigned long)__init_begin;
|
||||
end = (unsigned long)__init_end;
|
||||
|
||||
pp = htab_convert_pte_flags(pgprot_val(PAGE_KERNEL));
|
||||
|
||||
WARN_ON(!hash__change_memory_range(start, end, pp));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -25,6 +25,9 @@
|
|||
|
||||
#include <trace/events/thp.h>
|
||||
|
||||
unsigned int mmu_pid_bits;
|
||||
unsigned int mmu_base_pid;
|
||||
|
||||
static int native_register_process_table(unsigned long base, unsigned long pg_sz,
|
||||
unsigned long table_size)
|
||||
{
|
||||
|
@ -112,10 +115,9 @@ int radix__map_kernel_page(unsigned long ea, unsigned long pa,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_STRICT_KERNEL_RWX
|
||||
void radix__mark_rodata_ro(void)
|
||||
void radix__change_memory_range(unsigned long start, unsigned long end,
|
||||
unsigned long clear)
|
||||
{
|
||||
unsigned long start = (unsigned long)_stext;
|
||||
unsigned long end = (unsigned long)__init_begin;
|
||||
unsigned long idx;
|
||||
pgd_t *pgdp;
|
||||
pud_t *pudp;
|
||||
|
@ -125,7 +127,8 @@ void radix__mark_rodata_ro(void)
|
|||
start = ALIGN_DOWN(start, PAGE_SIZE);
|
||||
end = PAGE_ALIGN(end); // aligns up
|
||||
|
||||
pr_devel("marking ro start %lx, end %lx\n", start, end);
|
||||
pr_debug("Changing flags on range %lx-%lx removing 0x%lx\n",
|
||||
start, end, clear);
|
||||
|
||||
for (idx = start; idx < end; idx += PAGE_SIZE) {
|
||||
pgdp = pgd_offset_k(idx);
|
||||
|
@ -147,11 +150,29 @@ void radix__mark_rodata_ro(void)
|
|||
if (!ptep)
|
||||
continue;
|
||||
update_the_pte:
|
||||
radix__pte_update(&init_mm, idx, ptep, _PAGE_WRITE, 0, 0);
|
||||
radix__pte_update(&init_mm, idx, ptep, clear, 0, 0);
|
||||
}
|
||||
|
||||
radix__flush_tlb_kernel_range(start, end);
|
||||
}
|
||||
|
||||
void radix__mark_rodata_ro(void)
|
||||
{
|
||||
unsigned long start, end;
|
||||
|
||||
start = (unsigned long)_stext;
|
||||
end = (unsigned long)__init_begin;
|
||||
|
||||
radix__change_memory_range(start, end, _PAGE_WRITE);
|
||||
}
|
||||
|
||||
void radix__mark_initmem_nx(void)
|
||||
{
|
||||
unsigned long start = (unsigned long)__init_begin;
|
||||
unsigned long end = (unsigned long)__init_end;
|
||||
|
||||
radix__change_memory_range(start, end, _PAGE_EXEC);
|
||||
}
|
||||
#endif /* CONFIG_STRICT_KERNEL_RWX */
|
||||
|
||||
static inline void __meminit print_mapping(unsigned long start,
|
||||
|
@ -243,11 +264,34 @@ static void __init radix_init_pgtable(void)
|
|||
for_each_memblock(memory, reg)
|
||||
WARN_ON(create_physical_mapping(reg->base,
|
||||
reg->base + reg->size));
|
||||
|
||||
/* Find out how many PID bits are supported */
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE)) {
|
||||
if (!mmu_pid_bits)
|
||||
mmu_pid_bits = 20;
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
/*
|
||||
* When KVM is possible, we only use the top half of the
|
||||
* PID space to avoid collisions between host and guest PIDs
|
||||
* which can cause problems due to prefetch when exiting the
|
||||
* guest with AIL=3
|
||||
*/
|
||||
mmu_base_pid = 1 << (mmu_pid_bits - 1);
|
||||
#else
|
||||
mmu_base_pid = 1;
|
||||
#endif
|
||||
} else {
|
||||
/* The guest uses the bottom half of the PID space */
|
||||
if (!mmu_pid_bits)
|
||||
mmu_pid_bits = 19;
|
||||
mmu_base_pid = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate Partition table and process table for the
|
||||
* host.
|
||||
*/
|
||||
BUILD_BUG_ON_MSG((PRTB_SIZE_SHIFT > 36), "Process table size too large.");
|
||||
BUG_ON(PRTB_SIZE_SHIFT > 36);
|
||||
process_tb = early_alloc_pgtable(1UL << PRTB_SIZE_SHIFT);
|
||||
/*
|
||||
* Fill in the process table.
|
||||
|
@ -321,6 +365,12 @@ static int __init radix_dt_scan_page_sizes(unsigned long node,
|
|||
if (type == NULL || strcmp(type, "cpu") != 0)
|
||||
return 0;
|
||||
|
||||
/* Find MMU PID size */
|
||||
prop = of_get_flat_dt_prop(node, "ibm,mmu-pid-bits", &size);
|
||||
if (prop && size == 4)
|
||||
mmu_pid_bits = be32_to_cpup(prop);
|
||||
|
||||
/* Grab page size encodings */
|
||||
prop = of_get_flat_dt_prop(node, "ibm,processor-radix-AP-encodings", &size);
|
||||
if (!prop)
|
||||
return 0;
|
||||
|
|
|
@ -505,4 +505,12 @@ void mark_rodata_ro(void)
|
|||
else
|
||||
hash__mark_rodata_ro();
|
||||
}
|
||||
|
||||
void mark_initmem_nx(void)
|
||||
{
|
||||
if (radix_enabled())
|
||||
radix__mark_initmem_nx();
|
||||
else
|
||||
hash__mark_initmem_nx();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -36,7 +36,7 @@ void subpage_prot_free(struct mm_struct *mm)
|
|||
}
|
||||
}
|
||||
addr = 0;
|
||||
for (i = 0; i < 2; ++i) {
|
||||
for (i = 0; i < (TASK_SIZE_USER64 >> 43); ++i) {
|
||||
p = spt->protptrs[i];
|
||||
if (!p)
|
||||
continue;
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
#include <linux/mm.h>
|
||||
#include <linux/hugetlb.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <asm/ppc-opcode.h>
|
||||
|
||||
#include <asm/ppc-opcode.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/trace.h>
|
||||
|
||||
#include <asm/cputhreads.h>
|
||||
|
||||
#define RIC_FLUSH_TLB 0
|
||||
#define RIC_FLUSH_PWC 1
|
||||
|
@ -454,3 +454,44 @@ void radix__flush_tlb_pte_p9_dd1(unsigned long old_pte, struct mm_struct *mm,
|
|||
else
|
||||
radix__flush_tlb_page_psize(mm, address, mmu_virtual_psize);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
extern void radix_kvm_prefetch_workaround(struct mm_struct *mm)
|
||||
{
|
||||
unsigned int pid = mm->context.id;
|
||||
|
||||
if (unlikely(pid == MMU_NO_CONTEXT))
|
||||
return;
|
||||
|
||||
/*
|
||||
* If this context hasn't run on that CPU before and KVM is
|
||||
* around, there's a slim chance that the guest on another
|
||||
* CPU just brought in obsolete translation into the TLB of
|
||||
* this CPU due to a bad prefetch using the guest PID on
|
||||
* the way into the hypervisor.
|
||||
*
|
||||
* We work around this here. If KVM is possible, we check if
|
||||
* any sibling thread is in KVM. If it is, the window may exist
|
||||
* and thus we flush that PID from the core.
|
||||
*
|
||||
* A potential future improvement would be to mark which PIDs
|
||||
* have never been used on the system and avoid it if the PID
|
||||
* is new and the process has no other cpumask bit set.
|
||||
*/
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE) && radix_enabled()) {
|
||||
int cpu = smp_processor_id();
|
||||
int sib = cpu_first_thread_sibling(cpu);
|
||||
bool flush = false;
|
||||
|
||||
for (; sib <= cpu_last_thread_sibling(cpu) && !flush; sib++) {
|
||||
if (sib == cpu)
|
||||
continue;
|
||||
if (paca[sib].kvm_hstate.kvm_vcpu)
|
||||
flush = true;
|
||||
}
|
||||
if (flush)
|
||||
_tlbiel_pid(pid, RIC_FLUSH_ALL);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(radix_kvm_prefetch_workaround);
|
||||
#endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */
|
||||
|
|
|
@ -78,7 +78,7 @@ void opal_configure_cores(void)
|
|||
* ie. Host hash supports hash guests
|
||||
* Host radix supports hash/radix guests
|
||||
*/
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300)) {
|
||||
if (early_cpu_has_feature(CPU_FTR_ARCH_300)) {
|
||||
reinit_flags |= OPAL_REINIT_CPUS_MMU_HASH;
|
||||
if (early_radix_enabled())
|
||||
reinit_flags |= OPAL_REINIT_CPUS_MMU_RADIX;
|
||||
|
|
|
@ -82,7 +82,6 @@ static int pSeries_reconfig_remove_node(struct device_node *np)
|
|||
|
||||
of_detach_node(np);
|
||||
of_node_put(parent);
|
||||
of_node_put(np); /* Must decrement the refcount */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
".section .rodata.str,\"aMS\",@progbits,1\n" \
|
||||
"2: .asciz \""__FILE__"\"\n" \
|
||||
".previous\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
".section __bug_table,\"aw\"\n" \
|
||||
"3: .long 1b-3b,2b-3b\n" \
|
||||
" .short %0,%1\n" \
|
||||
" .org 3b+%2\n" \
|
||||
|
@ -30,7 +30,7 @@
|
|||
asm volatile( \
|
||||
"0: j 0b+2\n" \
|
||||
"1:\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
".section __bug_table,\"aw\"\n" \
|
||||
"2: .long 1b-2b\n" \
|
||||
" .short %0\n" \
|
||||
" .org 2b+%1\n" \
|
||||
|
|
|
@ -998,7 +998,7 @@ static int perf_push_sample(struct perf_event *event, struct sf_raw_sample *sfr)
|
|||
psw_bits(regs.psw).ia = sfr->basic.ia;
|
||||
psw_bits(regs.psw).dat = sfr->basic.T;
|
||||
psw_bits(regs.psw).wait = sfr->basic.W;
|
||||
psw_bits(regs.psw).per = sfr->basic.P;
|
||||
psw_bits(regs.psw).pstate = sfr->basic.P;
|
||||
psw_bits(regs.psw).as = sfr->basic.AS;
|
||||
|
||||
/*
|
||||
|
|
|
@ -1324,7 +1324,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
{
|
||||
uint8_t *keys;
|
||||
uint64_t hva;
|
||||
int i, r = 0;
|
||||
int srcu_idx, i, r = 0;
|
||||
|
||||
if (args->flags != 0)
|
||||
return -EINVAL;
|
||||
|
@ -1342,6 +1342,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
return -ENOMEM;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
srcu_idx = srcu_read_lock(&kvm->srcu);
|
||||
for (i = 0; i < args->count; i++) {
|
||||
hva = gfn_to_hva(kvm, args->start_gfn + i);
|
||||
if (kvm_is_error_hva(hva)) {
|
||||
|
@ -1353,6 +1354,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
if (r)
|
||||
break;
|
||||
}
|
||||
srcu_read_unlock(&kvm->srcu, srcu_idx);
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
|
||||
if (!r) {
|
||||
|
@ -1370,7 +1372,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
{
|
||||
uint8_t *keys;
|
||||
uint64_t hva;
|
||||
int i, r = 0;
|
||||
int srcu_idx, i, r = 0;
|
||||
|
||||
if (args->flags != 0)
|
||||
return -EINVAL;
|
||||
|
@ -1396,6 +1398,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
goto out;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
srcu_idx = srcu_read_lock(&kvm->srcu);
|
||||
for (i = 0; i < args->count; i++) {
|
||||
hva = gfn_to_hva(kvm, args->start_gfn + i);
|
||||
if (kvm_is_error_hva(hva)) {
|
||||
|
@ -1413,6 +1416,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
|
|||
if (r)
|
||||
break;
|
||||
}
|
||||
srcu_read_unlock(&kvm->srcu, srcu_idx);
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
out:
|
||||
kvfree(keys);
|
||||
|
|
|
@ -591,11 +591,11 @@ void ptep_zap_key(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
|||
unsigned long ptev;
|
||||
pgste_t pgste;
|
||||
|
||||
/* Clear storage key */
|
||||
/* Clear storage key ACC and F, but set R/C */
|
||||
preempt_disable();
|
||||
pgste = pgste_get_lock(ptep);
|
||||
pgste_val(pgste) &= ~(PGSTE_ACC_BITS | PGSTE_FP_BIT |
|
||||
PGSTE_GR_BIT | PGSTE_GC_BIT);
|
||||
pgste_val(pgste) &= ~(PGSTE_ACC_BITS | PGSTE_FP_BIT);
|
||||
pgste_val(pgste) |= PGSTE_GR_BIT | PGSTE_GC_BIT;
|
||||
ptev = pte_val(*ptep);
|
||||
if (!(ptev & _PAGE_INVALID) && (ptev & _PAGE_WRITE))
|
||||
page_set_storage_key(ptev & PAGE_MASK, PAGE_DEFAULT_KEY, 1);
|
||||
|
|
|
@ -24,14 +24,14 @@
|
|||
*/
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
#define _EMIT_BUG_ENTRY \
|
||||
"\t.pushsection __bug_table,\"a\"\n" \
|
||||
"\t.pushsection __bug_table,\"aw\"\n" \
|
||||
"2:\t.long 1b, %O1\n" \
|
||||
"\t.short %O2, %O3\n" \
|
||||
"\t.org 2b+%O4\n" \
|
||||
"\t.popsection\n"
|
||||
#else
|
||||
#define _EMIT_BUG_ENTRY \
|
||||
"\t.pushsection __bug_table,\"a\"\n" \
|
||||
"\t.pushsection __bug_table,\"aw\"\n" \
|
||||
"2:\t.long 1b\n" \
|
||||
"\t.short %O3\n" \
|
||||
"\t.org 2b+%O4\n" \
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
#define TIOCSERCONFIG _IO('T', 83) /* 0x5453 */
|
||||
#define TIOCSERGWILD _IOR('T', 84, int) /* 0x5454 */
|
||||
|
|
|
@ -54,6 +54,7 @@ extern struct trap_per_cpu trap_block[NR_CPUS];
|
|||
void init_cur_cpu_trap(struct thread_info *);
|
||||
void setup_tba(void);
|
||||
extern int ncpus_probed;
|
||||
extern u64 cpu_mondo_counter[NR_CPUS];
|
||||
|
||||
unsigned long real_hard_smp_processor_id(void);
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
#define TIOCGPTN _IOR('t', 134, unsigned int) /* Get Pty Number */
|
||||
#define TIOCSPTLCK _IOW('t', 135, int) /* Lock/unlock PTY */
|
||||
#define TIOCSIG _IOW('t', 136, int) /* Generate signal on Pty slave */
|
||||
#define TIOCGPTPEER _IOR('t', 137, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('t', 137) /* Safely open the slave */
|
||||
|
||||
/* Little f */
|
||||
#define FIOCLEX _IO('f', 1)
|
||||
|
|
|
@ -673,12 +673,14 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
|
|||
static int dma_4v_supported(struct device *dev, u64 device_mask)
|
||||
{
|
||||
struct iommu *iommu = dev->archdata.iommu;
|
||||
u64 dma_addr_mask;
|
||||
u64 dma_addr_mask = iommu->dma_addr_mask;
|
||||
|
||||
if (device_mask > DMA_BIT_MASK(32) && iommu->atu)
|
||||
if (device_mask > DMA_BIT_MASK(32)) {
|
||||
if (iommu->atu)
|
||||
dma_addr_mask = iommu->atu->dma_addr_mask;
|
||||
else
|
||||
dma_addr_mask = iommu->dma_addr_mask;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((device_mask & dma_addr_mask) == dma_addr_mask)
|
||||
return 1;
|
||||
|
|
|
@ -622,22 +622,48 @@ static void cheetah_xcall_deliver(struct trap_per_cpu *tb, int cnt)
|
|||
}
|
||||
}
|
||||
|
||||
/* Multi-cpu list version. */
|
||||
#define CPU_MONDO_COUNTER(cpuid) (cpu_mondo_counter[cpuid])
|
||||
#define MONDO_USEC_WAIT_MIN 2
|
||||
#define MONDO_USEC_WAIT_MAX 100
|
||||
#define MONDO_RETRY_LIMIT 500000
|
||||
|
||||
/* Multi-cpu list version.
|
||||
*
|
||||
* Deliver xcalls to 'cnt' number of cpus in 'cpu_list'.
|
||||
* Sometimes not all cpus receive the mondo, requiring us to re-send
|
||||
* the mondo until all cpus have received, or cpus are truly stuck
|
||||
* unable to receive mondo, and we timeout.
|
||||
* Occasionally a target cpu strand is borrowed briefly by hypervisor to
|
||||
* perform guest service, such as PCIe error handling. Consider the
|
||||
* service time, 1 second overall wait is reasonable for 1 cpu.
|
||||
* Here two in-between mondo check wait time are defined: 2 usec for
|
||||
* single cpu quick turn around and up to 100usec for large cpu count.
|
||||
* Deliver mondo to large number of cpus could take longer, we adjusts
|
||||
* the retry count as long as target cpus are making forward progress.
|
||||
*/
|
||||
static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)
|
||||
{
|
||||
int retries, this_cpu, prev_sent, i, saw_cpu_error;
|
||||
int this_cpu, tot_cpus, prev_sent, i, rem;
|
||||
int usec_wait, retries, tot_retries;
|
||||
u16 first_cpu = 0xffff;
|
||||
unsigned long xc_rcvd = 0;
|
||||
unsigned long status;
|
||||
int ecpuerror_id = 0;
|
||||
int enocpu_id = 0;
|
||||
u16 *cpu_list;
|
||||
u16 cpu;
|
||||
|
||||
this_cpu = smp_processor_id();
|
||||
|
||||
cpu_list = __va(tb->cpu_list_pa);
|
||||
|
||||
saw_cpu_error = 0;
|
||||
retries = 0;
|
||||
usec_wait = cnt * MONDO_USEC_WAIT_MIN;
|
||||
if (usec_wait > MONDO_USEC_WAIT_MAX)
|
||||
usec_wait = MONDO_USEC_WAIT_MAX;
|
||||
retries = tot_retries = 0;
|
||||
tot_cpus = cnt;
|
||||
prev_sent = 0;
|
||||
|
||||
do {
|
||||
int forward_progress, n_sent;
|
||||
int n_sent, mondo_delivered, target_cpu_busy;
|
||||
|
||||
status = sun4v_cpu_mondo_send(cnt,
|
||||
tb->cpu_list_pa,
|
||||
|
@ -645,94 +671,113 @@ static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)
|
|||
|
||||
/* HV_EOK means all cpus received the xcall, we're done. */
|
||||
if (likely(status == HV_EOK))
|
||||
break;
|
||||
goto xcall_done;
|
||||
|
||||
/* If not these non-fatal errors, panic */
|
||||
if (unlikely((status != HV_EWOULDBLOCK) &&
|
||||
(status != HV_ECPUERROR) &&
|
||||
(status != HV_ENOCPU)))
|
||||
goto fatal_errors;
|
||||
|
||||
/* First, see if we made any forward progress.
|
||||
*
|
||||
* Go through the cpu_list, count the target cpus that have
|
||||
* received our mondo (n_sent), and those that did not (rem).
|
||||
* Re-pack cpu_list with the cpus remain to be retried in the
|
||||
* front - this simplifies tracking the truly stalled cpus.
|
||||
*
|
||||
* The hypervisor indicates successful sends by setting
|
||||
* cpu list entries to the value 0xffff.
|
||||
*
|
||||
* EWOULDBLOCK means some target cpus did not receive the
|
||||
* mondo and retry usually helps.
|
||||
*
|
||||
* ECPUERROR means at least one target cpu is in error state,
|
||||
* it's usually safe to skip the faulty cpu and retry.
|
||||
*
|
||||
* ENOCPU means one of the target cpu doesn't belong to the
|
||||
* domain, perhaps offlined which is unexpected, but not
|
||||
* fatal and it's okay to skip the offlined cpu.
|
||||
*/
|
||||
rem = 0;
|
||||
n_sent = 0;
|
||||
for (i = 0; i < cnt; i++) {
|
||||
if (likely(cpu_list[i] == 0xffff))
|
||||
cpu = cpu_list[i];
|
||||
if (likely(cpu == 0xffff)) {
|
||||
n_sent++;
|
||||
} else if ((status == HV_ECPUERROR) &&
|
||||
(sun4v_cpu_state(cpu) == HV_CPU_STATE_ERROR)) {
|
||||
ecpuerror_id = cpu + 1;
|
||||
} else if (status == HV_ENOCPU && !cpu_online(cpu)) {
|
||||
enocpu_id = cpu + 1;
|
||||
} else {
|
||||
cpu_list[rem++] = cpu;
|
||||
}
|
||||
}
|
||||
|
||||
forward_progress = 0;
|
||||
if (n_sent > prev_sent)
|
||||
forward_progress = 1;
|
||||
/* No cpu remained, we're done. */
|
||||
if (rem == 0)
|
||||
break;
|
||||
|
||||
/* Otherwise, update the cpu count for retry. */
|
||||
cnt = rem;
|
||||
|
||||
/* Record the overall number of mondos received by the
|
||||
* first of the remaining cpus.
|
||||
*/
|
||||
if (first_cpu != cpu_list[0]) {
|
||||
first_cpu = cpu_list[0];
|
||||
xc_rcvd = CPU_MONDO_COUNTER(first_cpu);
|
||||
}
|
||||
|
||||
/* Was any mondo delivered successfully? */
|
||||
mondo_delivered = (n_sent > prev_sent);
|
||||
prev_sent = n_sent;
|
||||
|
||||
/* If we get a HV_ECPUERROR, then one or more of the cpus
|
||||
* in the list are in error state. Use the cpu_state()
|
||||
* hypervisor call to find out which cpus are in error state.
|
||||
/* or, was any target cpu busy processing other mondos? */
|
||||
target_cpu_busy = (xc_rcvd < CPU_MONDO_COUNTER(first_cpu));
|
||||
xc_rcvd = CPU_MONDO_COUNTER(first_cpu);
|
||||
|
||||
/* Retry count is for no progress. If we're making progress,
|
||||
* reset the retry count.
|
||||
*/
|
||||
if (unlikely(status == HV_ECPUERROR)) {
|
||||
for (i = 0; i < cnt; i++) {
|
||||
long err;
|
||||
u16 cpu;
|
||||
|
||||
cpu = cpu_list[i];
|
||||
if (cpu == 0xffff)
|
||||
continue;
|
||||
|
||||
err = sun4v_cpu_state(cpu);
|
||||
if (err == HV_CPU_STATE_ERROR) {
|
||||
saw_cpu_error = (cpu + 1);
|
||||
cpu_list[i] = 0xffff;
|
||||
}
|
||||
}
|
||||
} else if (unlikely(status != HV_EWOULDBLOCK))
|
||||
goto fatal_mondo_error;
|
||||
|
||||
/* Don't bother rewriting the CPU list, just leave the
|
||||
* 0xffff and non-0xffff entries in there and the
|
||||
* hypervisor will do the right thing.
|
||||
*
|
||||
* Only advance timeout state if we didn't make any
|
||||
* forward progress.
|
||||
*/
|
||||
if (unlikely(!forward_progress)) {
|
||||
if (unlikely(++retries > 10000))
|
||||
if (likely(mondo_delivered || target_cpu_busy)) {
|
||||
tot_retries += retries;
|
||||
retries = 0;
|
||||
} else if (unlikely(retries > MONDO_RETRY_LIMIT)) {
|
||||
goto fatal_mondo_timeout;
|
||||
|
||||
/* Delay a little bit to let other cpus catch up
|
||||
* on their cpu mondo queue work.
|
||||
*/
|
||||
udelay(2 * cnt);
|
||||
}
|
||||
|
||||
/* Delay a little bit to let other cpus catch up on
|
||||
* their cpu mondo queue work.
|
||||
*/
|
||||
if (!mondo_delivered)
|
||||
udelay(usec_wait);
|
||||
|
||||
retries++;
|
||||
} while (1);
|
||||
|
||||
if (unlikely(saw_cpu_error))
|
||||
goto fatal_mondo_cpu_error;
|
||||
|
||||
xcall_done:
|
||||
if (unlikely(ecpuerror_id > 0)) {
|
||||
pr_crit("CPU[%d]: SUN4V mondo cpu error, target cpu(%d) was in error state\n",
|
||||
this_cpu, ecpuerror_id - 1);
|
||||
} else if (unlikely(enocpu_id > 0)) {
|
||||
pr_crit("CPU[%d]: SUN4V mondo cpu error, target cpu(%d) does not belong to the domain\n",
|
||||
this_cpu, enocpu_id - 1);
|
||||
}
|
||||
return;
|
||||
|
||||
fatal_mondo_cpu_error:
|
||||
printk(KERN_CRIT "CPU[%d]: SUN4V mondo cpu error, some target cpus "
|
||||
"(including %d) were in error state\n",
|
||||
this_cpu, saw_cpu_error - 1);
|
||||
return;
|
||||
fatal_errors:
|
||||
/* fatal errors include bad alignment, etc */
|
||||
pr_crit("CPU[%d]: Args were cnt(%d) cpulist_pa(%lx) mondo_block_pa(%lx)\n",
|
||||
this_cpu, tot_cpus, tb->cpu_list_pa, tb->cpu_mondo_block_pa);
|
||||
panic("Unexpected SUN4V mondo error %lu\n", status);
|
||||
|
||||
fatal_mondo_timeout:
|
||||
printk(KERN_CRIT "CPU[%d]: SUN4V mondo timeout, no forward "
|
||||
" progress after %d retries.\n",
|
||||
this_cpu, retries);
|
||||
goto dump_cpu_list_and_out;
|
||||
|
||||
fatal_mondo_error:
|
||||
printk(KERN_CRIT "CPU[%d]: Unexpected SUN4V mondo error %lu\n",
|
||||
this_cpu, status);
|
||||
printk(KERN_CRIT "CPU[%d]: Args were cnt(%d) cpulist_pa(%lx) "
|
||||
"mondo_block_pa(%lx)\n",
|
||||
this_cpu, cnt, tb->cpu_list_pa, tb->cpu_mondo_block_pa);
|
||||
|
||||
dump_cpu_list_and_out:
|
||||
printk(KERN_CRIT "CPU[%d]: CPU list [ ", this_cpu);
|
||||
for (i = 0; i < cnt; i++)
|
||||
printk("%u ", cpu_list[i]);
|
||||
printk("]\n");
|
||||
/* some cpus being non-responsive to the cpu mondo */
|
||||
pr_crit("CPU[%d]: SUN4V mondo timeout, cpu(%d) made no forward progress after %d retries. Total target cpus(%d).\n",
|
||||
this_cpu, first_cpu, (tot_retries + retries), tot_cpus);
|
||||
panic("SUN4V mondo timeout panic\n");
|
||||
}
|
||||
|
||||
static void (*xcall_deliver_impl)(struct trap_per_cpu *, int);
|
||||
|
|
|
@ -26,6 +26,21 @@ sun4v_cpu_mondo:
|
|||
ldxa [%g0] ASI_SCRATCHPAD, %g4
|
||||
sub %g4, TRAP_PER_CPU_FAULT_INFO, %g4
|
||||
|
||||
/* Get smp_processor_id() into %g3 */
|
||||
sethi %hi(trap_block), %g5
|
||||
or %g5, %lo(trap_block), %g5
|
||||
sub %g4, %g5, %g3
|
||||
srlx %g3, TRAP_BLOCK_SZ_SHIFT, %g3
|
||||
|
||||
/* Increment cpu_mondo_counter[smp_processor_id()] */
|
||||
sethi %hi(cpu_mondo_counter), %g5
|
||||
or %g5, %lo(cpu_mondo_counter), %g5
|
||||
sllx %g3, 3, %g3
|
||||
add %g5, %g3, %g5
|
||||
ldx [%g5], %g3
|
||||
add %g3, 1, %g3
|
||||
stx %g3, [%g5]
|
||||
|
||||
/* Get CPU mondo queue base phys address into %g7. */
|
||||
ldx [%g4 + TRAP_PER_CPU_CPU_MONDO_PA], %g7
|
||||
|
||||
|
|
|
@ -2733,6 +2733,7 @@ void do_getpsr(struct pt_regs *regs)
|
|||
}
|
||||
}
|
||||
|
||||
u64 cpu_mondo_counter[NR_CPUS] = {0};
|
||||
struct trap_per_cpu trap_block[NR_CPUS];
|
||||
EXPORT_SYMBOL(trap_block);
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue