3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-01 07:42:18 +00:00

Massive update....

* Is there a moose on the loose?
* Yes! There is a moose on the loose !
* His name is Seany
This commit is contained in:
Scare Crowe 2021-08-12 00:35:13 +05:00
parent c7576e53f8
commit f01da3e636
521 changed files with 6008 additions and 2453 deletions

View File

@ -228,6 +228,23 @@ before posting to the mailing list. The patchwork build bot instance
gets overloaded very easily and netdev@vger really doesn't need more gets overloaded very easily and netdev@vger really doesn't need more
traffic if we can help it. traffic if we can help it.
netdevsim is great, can I extend it for my out-of-tree tests?
-------------------------------------------------------------
No, `netdevsim` is a test vehicle solely for upstream tests.
(Please add your tests under tools/testing/selftests/.)
We also give no guarantees that `netdevsim` won't change in the future
in a way which would break what would normally be considered uAPI.
Is netdevsim considered a "user" of an API?
-------------------------------------------
Linux kernel has a long standing rule that no API should be added unless
it has a real, in-tree user. Mock-ups and tests based on `netdevsim` are
strongly encouraged when adding new APIs, but `netdevsim` in itself
is **not** considered a use case/user.
Any other tips to help ensure my net/net-next patch gets OK'd? Any other tips to help ensure my net/net-next patch gets OK'd?
-------------------------------------------------------------- --------------------------------------------------------------
Attention to detail. Re-read your own work as if you were the Attention to detail. Re-read your own work as if you were the

View File

@ -73,7 +73,9 @@ IF_OPER_LOWERLAYERDOWN (3):
state (f.e. VLAN). state (f.e. VLAN).
IF_OPER_TESTING (4): IF_OPER_TESTING (4):
Unused in current kernel. Interface is in testing mode, for example executing driver self-tests
or media (cable) test. It can't be used for normal traffic until tests
complete.
IF_OPER_DORMANT (5): IF_OPER_DORMANT (5):
Interface is L1 up, but waiting for an external event, f.e. for a Interface is L1 up, but waiting for an external event, f.e. for a
@ -111,7 +113,7 @@ it as lower layer.
Note that for certain kind of soft-devices, which are not managing any Note that for certain kind of soft-devices, which are not managing any
real hardware, it is possible to set this bit from userspace. One real hardware, it is possible to set this bit from userspace. One
should use TVL IFLA_CARRIER to do so. should use TLV IFLA_CARRIER to do so.
netif_carrier_ok() can be used to query that bit. netif_carrier_ok() can be used to query that bit.

View File

@ -607,6 +607,14 @@ See also the examples in :ref:`control`.
``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or ``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
streaming is in progress since most drivers do not support changing streaming is in progress since most drivers do not support changing
the format in that case. the format in that case.
* - ``V4L2_CTRL_FLAG_DYNAMIC_ARRAY``
- 0x0800
- This control is a dynamically sized 1-dimensional array. It
behaves the same as a regular array, except that the number
of elements as reported by the ``elems`` field is between 1 and
``dims[0]``. So setting the control with a differently sized
array will change the ``elems`` field when the control is
queried afterwards.
Return Value Return Value
============ ============

View File

@ -855,7 +855,7 @@ in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
use PPIs designated for specific cpus. The irq field is interpreted use PPIs designated for specific cpus. The irq field is interpreted
like this:: like this::
 bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 | bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 |
field: | vcpu2_index | irq_type | vcpu_index | irq_id | field: | vcpu2_index | irq_type | vcpu_index | irq_id |
The irq_type field has the following values: The irq_type field has the following values:
@ -2149,10 +2149,10 @@ prior to calling the KVM_RUN ioctl.
Errors: Errors:
====== ============================================================ ====== ============================================================
 ENOENT   no such register ENOENT no such register
 EINVAL   invalid register ID, or no such register or used with VMs in EINVAL invalid register ID, or no such register or used with VMs in
protected virtualization mode on s390 protected virtualization mode on s390
 EPERM    (arm64) register access not allowed before vcpu finalization EPERM (arm64) register access not allowed before vcpu finalization
====== ============================================================ ====== ============================================================
(These error codes are indicative only: do not rely on a specific error (These error codes are indicative only: do not rely on a specific error
@ -2590,10 +2590,10 @@ following id bit patterns::
Errors include: Errors include:
======== ============================================================ ======== ============================================================
 ENOENT   no such register ENOENT no such register
 EINVAL   invalid register ID, or no such register or used with VMs in EINVAL invalid register ID, or no such register or used with VMs in
protected virtualization mode on s390 protected virtualization mode on s390
 EPERM    (arm64) register access not allowed before vcpu finalization EPERM (arm64) register access not allowed before vcpu finalization
======== ============================================================ ======== ============================================================
(These error codes are indicative only: do not rely on a specific error (These error codes are indicative only: do not rely on a specific error
@ -3112,13 +3112,13 @@ current state. "addr" is ignored.
Errors: Errors:
====== ================================================================= ====== =================================================================
 EINVAL    the target is unknown, or the combination of features is invalid. EINVAL the target is unknown, or the combination of features is invalid.
 ENOENT    a features bit specified is unknown. ENOENT a features bit specified is unknown.
====== ================================================================= ====== =================================================================
This tells KVM what type of CPU to present to the guest, and what This tells KVM what type of CPU to present to the guest, and what
optional features it should have.  This will cause a reset of the cpu optional features it should have. This will cause a reset of the cpu
registers to their initial values.  If this is not called, KVM_RUN will registers to their initial values. If this is not called, KVM_RUN will
return ENOEXEC for that vcpu. return ENOEXEC for that vcpu.
The initial values are defined as: The initial values are defined as:
@ -3239,8 +3239,8 @@ VCPU matching underlying host.
Errors: Errors:
===== ============================================================== ===== ==============================================================
 E2BIG     the reg index list is too big to fit in the array specified by E2BIG the reg index list is too big to fit in the array specified by
            the user (the number required will be written into n). the user (the number required will be written into n).
===== ============================================================== ===== ==============================================================
:: ::
@ -3288,7 +3288,7 @@ specific device.
ARM/arm64 divides the id field into two parts, a device id and an ARM/arm64 divides the id field into two parts, a device id and an
address type id specific to the individual device:: address type id specific to the individual device::
 bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 | bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
field: | 0x00000000 | device id | addr type id | field: | 0x00000000 | device id | addr type id |
ARM/arm64 currently only require this when using the in-kernel GIC ARM/arm64 currently only require this when using the in-kernel GIC
@ -7049,7 +7049,7 @@ In combination with KVM_CAP_X86_USER_SPACE_MSR, this allows user space to
trap and emulate MSRs that are outside of the scope of KVM as well as trap and emulate MSRs that are outside of the scope of KVM as well as
limit the attack surface on KVM's MSR emulation code. limit the attack surface on KVM's MSR emulation code.
8.28 KVM_CAP_ENFORCE_PV_CPUID 8.28 KVM_CAP_ENFORCE_PV_FEATURE_CPUID
----------------------------- -----------------------------
Architectures: x86 Architectures: x86

View File

@ -14,7 +14,6 @@ config ALPHA
select PCI_SYSCALL if PCI select PCI_SYSCALL if PCI
select HAVE_AOUT select HAVE_AOUT
select HAVE_ASM_MODVERSIONS select HAVE_ASM_MODVERSIONS
select HAVE_IDE
select HAVE_PCSPKR_PLATFORM select HAVE_PCSPKR_PLATFORM
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select NEED_DMA_MAP_STATE select NEED_DMA_MAP_STATE
@ -532,7 +531,7 @@ config SMP
will run faster if you say N here. will run faster if you say N here.
See also the SMP-HOWTO available at See also the SMP-HOWTO available at
<http://www.tldp.org/docs.html#howto>. <https://www.tldp.org/docs.html#howto>.
If you don't know what to do here, say N. If you don't know what to do here, say N.

View File

@ -23,7 +23,7 @@
#include "ksize.h" #include "ksize.h"
extern unsigned long switch_to_osf_pal(unsigned long nr, extern unsigned long switch_to_osf_pal(unsigned long nr,
struct pcb_struct * pcb_va, struct pcb_struct * pcb_pa, struct pcb_struct *pcb_va, struct pcb_struct *pcb_pa,
unsigned long *vptb); unsigned long *vptb);
extern void move_stack(unsigned long new_stack); extern void move_stack(unsigned long new_stack);

View File

@ -200,7 +200,7 @@ extern char _end;
START_ADDR KSEG address of the entry point of kernel code. START_ADDR KSEG address of the entry point of kernel code.
ZERO_PGE KSEG address of page full of zeroes, but ZERO_PGE KSEG address of page full of zeroes, but
upon entry to kerne cvan be expected upon entry to kernel, it can be expected
to hold the parameter list and possible to hold the parameter list and possible
INTRD information. INTRD information.

View File

@ -30,7 +30,7 @@ extern long srm_printk(const char *, ...)
__attribute__ ((format (printf, 1, 2))); __attribute__ ((format (printf, 1, 2)));
/* /*
* gzip delarations * gzip declarations
*/ */
#define OF(args) args #define OF(args) args
#define STATIC static #define STATIC static

View File

@ -70,3 +70,4 @@ CONFIG_DEBUG_INFO=y
CONFIG_ALPHA_LEGACY_START_ADDRESS=y CONFIG_ALPHA_LEGACY_START_ADDRESS=y
CONFIG_MATHEMU=y CONFIG_MATHEMU=y
CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_HMAC=y
CONFIG_DEVTMPFS=y

View File

@ -4,15 +4,4 @@
#include <uapi/asm/compiler.h> #include <uapi/asm/compiler.h>
/* Some idiots over in <linux/compiler.h> thought inline should imply
always_inline. This breaks stuff. We'll include this file whenever
we run into such problems. */
#include <linux/compiler.h>
#undef inline
#undef __inline__
#undef __inline
#undef __always_inline
#define __always_inline inline __attribute__((always_inline))
#endif /* __ALPHA_COMPILER_H */ #endif /* __ALPHA_COMPILER_H */

View File

@ -9,4 +9,10 @@ static inline int syscall_get_arch(struct task_struct *task)
return AUDIT_ARCH_ALPHA; return AUDIT_ARCH_ALPHA;
} }
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
return regs->r0;
}
#endif /* _ASM_ALPHA_SYSCALL_H */ #endif /* _ASM_ALPHA_SYSCALL_H */

View File

@ -834,7 +834,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
return -EFAULT; return -EFAULT;
state = &current_thread_info()->ieee_state; state = &current_thread_info()->ieee_state;
/* Update softare trap enable bits. */ /* Update software trap enable bits. */
*state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK); *state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK);
/* Update the real fpcr. */ /* Update the real fpcr. */
@ -854,7 +854,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
state = &current_thread_info()->ieee_state; state = &current_thread_info()->ieee_state;
exc &= IEEE_STATUS_MASK; exc &= IEEE_STATUS_MASK;
/* Update softare trap enable bits. */ /* Update software trap enable bits. */
swcr = (*state & IEEE_SW_MASK) | exc; swcr = (*state & IEEE_SW_MASK) | exc;
*state |= exc; *state |= exc;

View File

@ -574,7 +574,7 @@ static void alpha_pmu_start(struct perf_event *event, int flags)
* Check that CPU performance counters are supported. * Check that CPU performance counters are supported.
* - currently support EV67 and later CPUs. * - currently support EV67 and later CPUs.
* - actually some later revisions of the EV6 have the same PMC model as the * - actually some later revisions of the EV6 have the same PMC model as the
* EV67 but we don't do suffiently deep CPU detection to detect them. * EV67 but we don't do sufficiently deep CPU detection to detect them.
* Bad luck to the very few people who might have one, I guess. * Bad luck to the very few people who might have one, I guess.
*/ */
static int supported_cpu(void) static int supported_cpu(void)

View File

@ -319,18 +319,19 @@ setup_memory(void *kernel_end)
i, cluster->usage, cluster->start_pfn, i, cluster->usage, cluster->start_pfn,
cluster->start_pfn + cluster->numpages); cluster->start_pfn + cluster->numpages);
/* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark
this for later. */
if (cluster->usage & 3)
continue;
end = cluster->start_pfn + cluster->numpages; end = cluster->start_pfn + cluster->numpages;
if (end > max_low_pfn) if (end > max_low_pfn)
max_low_pfn = end; max_low_pfn = end;
memblock_add(PFN_PHYS(cluster->start_pfn), memblock_add(PFN_PHYS(cluster->start_pfn),
cluster->numpages << PAGE_SHIFT); cluster->numpages << PAGE_SHIFT);
/* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark
this for later. */
if (cluster->usage & 3)
memblock_reserve(PFN_PHYS(cluster->start_pfn),
cluster->numpages << PAGE_SHIFT);
} }
/* /*

View File

@ -582,7 +582,7 @@ void
smp_send_stop(void) smp_send_stop(void)
{ {
cpumask_t to_whom; cpumask_t to_whom;
cpumask_copy(&to_whom, cpu_possible_mask); cpumask_copy(&to_whom, cpu_online_mask);
cpumask_clear_cpu(smp_processor_id(), &to_whom); cpumask_clear_cpu(smp_processor_id(), &to_whom);
#ifdef DEBUG_IPI_MSG #ifdef DEBUG_IPI_MSG
if (hard_smp_processor_id() != boot_cpu_id) if (hard_smp_processor_id() != boot_cpu_id)

View File

@ -212,7 +212,7 @@ nautilus_init_pci(void)
/* Use default IO. */ /* Use default IO. */
pci_add_resource(&bridge->windows, &ioport_resource); pci_add_resource(&bridge->windows, &ioport_resource);
/* Irongate PCI memory aperture, calculate requred size before /* Irongate PCI memory aperture, calculate required size before
setting it up. */ setting it up. */
pci_add_resource(&bridge->windows, &irongate_mem); pci_add_resource(&bridge->windows, &irongate_mem);

View File

@ -730,7 +730,7 @@ do_entUnaUser(void __user * va, unsigned long opcode,
long error; long error;
/* Check the UAC bits to decide what the user wants us to do /* Check the UAC bits to decide what the user wants us to do
with the unaliged access. */ with the unaligned access. */
if (!(current_thread_info()->status & TS_UAC_NOPRINT)) { if (!(current_thread_info()->status & TS_UAC_NOPRINT)) {
if (__ratelimit(&ratelimit)) { if (__ratelimit(&ratelimit)) {

View File

@ -65,7 +65,7 @@ static long (*save_emul) (unsigned long pc);
long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long); long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long);
long do_alpha_fp_emul(unsigned long); long do_alpha_fp_emul(unsigned long);
int init_module(void) static int alpha_fp_emul_init_module(void)
{ {
save_emul_imprecise = alpha_fp_emul_imprecise; save_emul_imprecise = alpha_fp_emul_imprecise;
save_emul = alpha_fp_emul; save_emul = alpha_fp_emul;
@ -73,12 +73,14 @@ int init_module(void)
alpha_fp_emul = do_alpha_fp_emul; alpha_fp_emul = do_alpha_fp_emul;
return 0; return 0;
} }
module_init(alpha_fp_emul_init_module);
void cleanup_module(void) static void alpha_fp_emul_cleanup_module(void)
{ {
alpha_fp_emul_imprecise = save_emul_imprecise; alpha_fp_emul_imprecise = save_emul_imprecise;
alpha_fp_emul = save_emul; alpha_fp_emul = save_emul;
} }
module_exit(alpha_fp_emul_cleanup_module);
#undef alpha_fp_emul_imprecise #undef alpha_fp_emul_imprecise
#define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise #define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise
@ -401,3 +403,5 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
egress: egress:
return si_code; return si_code;
} }
EXPORT_SYMBOL(__udiv_qrnnd);

View File

@ -95,7 +95,6 @@ config ARM
select HAVE_FUNCTION_TRACER if !XIP_KERNEL select HAVE_FUNCTION_TRACER if !XIP_KERNEL
select HAVE_GCC_PLUGINS select HAVE_GCC_PLUGINS
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7) select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
select HAVE_IDE if PCI || ISA || PCMCIA
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING
select HAVE_KERNEL_GZIP select HAVE_KERNEL_GZIP
select HAVE_KERNEL_LZ4 select HAVE_KERNEL_LZ4
@ -218,9 +217,6 @@ config GENERIC_CALIBRATE_DELAY
config ARCH_MAY_HAVE_PC_FDC config ARCH_MAY_HAVE_PC_FDC
bool bool
config ZONE_DMA
bool
config ARCH_SUPPORTS_UPROBES config ARCH_SUPPORTS_UPROBES
def_bool y def_bool y
@ -353,7 +349,6 @@ config ARCH_EP93XX
select ARM_VIC select ARM_VIC
select GENERIC_IRQ_MULTI_HANDLER select GENERIC_IRQ_MULTI_HANDLER
select AUTO_ZRELADDR select AUTO_ZRELADDR
select CLKDEV_LOOKUP
select CLKSRC_MMIO select CLKSRC_MMIO
select CPU_ARM920T select CPU_ARM920T
select GPIOLIB select GPIOLIB
@ -365,7 +360,6 @@ config ARCH_FOOTBRIDGE
bool "FootBridge" bool "FootBridge"
select CPU_SA110 select CPU_SA110
select FOOTBRIDGE select FOOTBRIDGE
select HAVE_IDE
select NEED_MACH_IO_H if !MMU select NEED_MACH_IO_H if !MMU
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
help help
@ -398,7 +392,8 @@ config ARCH_IXP4XX
select HAVE_PCI select HAVE_PCI
select IXP4XX_IRQ select IXP4XX_IRQ
select IXP4XX_TIMER select IXP4XX_TIMER
select NEED_MACH_IO_H # With the new PCI driver this is not needed
select NEED_MACH_IO_H if IXP4XX_PCI_LEGACY
select USB_EHCI_BIG_ENDIAN_DESC select USB_EHCI_BIG_ENDIAN_DESC
select USB_EHCI_BIG_ENDIAN_MMIO select USB_EHCI_BIG_ENDIAN_MMIO
help help
@ -433,7 +428,6 @@ config ARCH_PXA
select GENERIC_IRQ_MULTI_HANDLER select GENERIC_IRQ_MULTI_HANDLER
select GPIO_PXA select GPIO_PXA
select GPIOLIB select GPIOLIB
select HAVE_IDE
select IRQ_DOMAIN select IRQ_DOMAIN
select PLAT_PXA select PLAT_PXA
select SPARSE_IRQ select SPARSE_IRQ
@ -449,7 +443,6 @@ config ARCH_RPC
select ARM_HAS_SG_CHAIN select ARM_HAS_SG_CHAIN
select CPU_SA110 select CPU_SA110
select FIQ select FIQ
select HAVE_IDE
select HAVE_PATA_PLATFORM select HAVE_PATA_PLATFORM
select ISA_DMA_API select ISA_DMA_API
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
@ -472,7 +465,6 @@ config ARCH_SA1100
select CPU_SA1100 select CPU_SA1100
select GENERIC_IRQ_MULTI_HANDLER select GENERIC_IRQ_MULTI_HANDLER
select GPIOLIB select GPIOLIB
select HAVE_IDE
select IRQ_DOMAIN select IRQ_DOMAIN
select ISA select ISA
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
@ -504,12 +496,10 @@ config ARCH_OMAP1
bool "TI OMAP1" bool "TI OMAP1"
depends on MMU depends on MMU
select ARCH_OMAP select ARCH_OMAP
select CLKDEV_LOOKUP
select CLKSRC_MMIO select CLKSRC_MMIO
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select GENERIC_IRQ_MULTI_HANDLER select GENERIC_IRQ_MULTI_HANDLER
select GPIOLIB select GPIOLIB
select HAVE_IDE
select HAVE_LEGACY_CLK select HAVE_LEGACY_CLK
select IRQ_DOMAIN select IRQ_DOMAIN
select NEED_MACH_IO_H if PCCARD select NEED_MACH_IO_H if PCCARD

View File

@ -1595,7 +1595,7 @@ dcan1: can@0 {
compatible = "ti,am4372-d_can", "ti,am3352-d_can"; compatible = "ti,am4372-d_can", "ti,am3352-d_can";
reg = <0x0 0x2000>; reg = <0x0 0x2000>;
clocks = <&dcan1_fck>; clocks = <&dcan1_fck>;
clock-name = "fck"; clock-names = "fck";
syscon-raminit = <&scm_conf 0x644 1>; syscon-raminit = <&scm_conf 0x644 1>;
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled"; status = "disabled";

View File

@ -54,7 +54,13 @@ &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_microsom_enet_ar8035>; pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-id";
phy-reset-duration = <2>;
/*
* The PHY seems to require a long-enough reset duration to avoid
* some rare issues where the PHY gets stuck in an inconsistent and
* non-functional state at boot-up. 10ms proved to be fine .
*/
phy-reset-duration = <10>;
phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";

View File

@ -43,6 +43,7 @@ &usdhc2 {
assigned-clock-rates = <0>, <198000000>; assigned-clock-rates = <0>, <198000000>;
cap-power-off-card; cap-power-off-card;
keep-power-in-suspend; keep-power-in-suspend;
max-frequency = <25000000>;
mmc-pwrseq = <&wifi_pwrseq>; mmc-pwrseq = <&wifi_pwrseq>;
no-1-8-v; no-1-8-v;
non-removable; non-removable;

View File

@ -30,14 +30,6 @@ vsys_cobra: fixedregulator-vsys_cobra {
regulator-max-microvolt = <5000000>; regulator-max-microvolt = <5000000>;
}; };
vdds_1v8_main: fixedregulator-vdds_1v8_main {
compatible = "regulator-fixed";
regulator-name = "vdds_1v8_main";
vin-supply = <&smps7_reg>;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
vmmcsd_fixed: fixedregulator-mmcsd { vmmcsd_fixed: fixedregulator-mmcsd {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vmmcsd_fixed"; regulator-name = "vmmcsd_fixed";
@ -487,6 +479,7 @@ smps6_reg: smps6 {
regulator-boot-on; regulator-boot-on;
}; };
vdds_1v8_main:
smps7_reg: smps7 { smps7_reg: smps7 {
/* VDDS_1v8_OMAP over VDDS_1v8_MAIN */ /* VDDS_1v8_OMAP over VDDS_1v8_MAIN */
regulator-name = "smps7"; regulator-name = "smps7";

View File

@ -1424,6 +1424,8 @@ Params: abx80x Select one of the ABx80x family:
sd3078 Select the ZXW Shenzhen whwave SD3078 device sd3078 Select the ZXW Shenzhen whwave SD3078 device
s35390a Select the ABLIC S35390A device
i2c0 Choose the I2C0 bus on GPIOs 0&1 i2c0 Choose the I2C0 bus on GPIOs 0&1
i2c_csi_dsi Choose the I2C0 bus on GPIOs 44&45 i2c_csi_dsi Choose the I2C0 bus on GPIOs 44&45
@ -1487,6 +1489,8 @@ Params: abx80x Select one of the ABx80x family:
sd3078 Select the ZXW Shenzhen whwave SD3078 device sd3078 Select the ZXW Shenzhen whwave SD3078 device
s35390a Select the ABLIC S35390A device
addr Sets the address for the RTC. Note that the addr Sets the address for the RTC. Note that the
device must be configured to use the specified device must be configured to use the specified
address. address.
@ -1678,6 +1682,8 @@ Info: Sony IMX219 camera module.
Load: dtoverlay=imx219,<param>=<val> Load: dtoverlay=imx219,<param>=<val>
Params: rotation Mounting rotation of the camera sensor (0 or Params: rotation Mounting rotation of the camera sensor (0 or
180, default 180) 180, default 180)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: imx290 Name: imx290
@ -1694,6 +1700,10 @@ Params: 4lane Enable 4 CSI2 lanes. This requires a Compute
(the default), whilst those from Innomaker use (the default), whilst those from Innomaker use
74.25MHz. 74.25MHz.
mono Denote that the module is a mono sensor. mono Denote that the module is a mono sensor.
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
rotation Mounting rotation of the camera sensor (0 or
180, default 0)
Name: imx378 Name: imx378
@ -1703,6 +1713,8 @@ Info: Sony IMX378 camera module.
Load: dtoverlay=imx378,<param>=<val> Load: dtoverlay=imx378,<param>=<val>
Params: rotation Mounting rotation of the camera sensor (0 or Params: rotation Mounting rotation of the camera sensor (0 or
180, default 180) 180, default 180)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: imx477 Name: imx477
@ -1712,6 +1724,8 @@ Info: Sony IMX477 camera module.
Load: dtoverlay=imx477,<param>=<val> Load: dtoverlay=imx477,<param>=<val>
Params: rotation Mounting rotation of the camera sensor (0 or Params: rotation Mounting rotation of the camera sensor (0 or
180, default 180) 180, default 180)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: iqaudio-codec Name: iqaudio-codec
@ -2137,22 +2151,30 @@ Info: Omnivision OV5647 camera module.
Load: dtoverlay=ov5647,<param>=<val> Load: dtoverlay=ov5647,<param>=<val>
Params: rotation Mounting rotation of the camera sensor (0 or Params: rotation Mounting rotation of the camera sensor (0 or
180, default 0) 180, default 0)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: ov7251 Name: ov7251
Info: Omnivision OV7251 camera module. Info: Omnivision OV7251 camera module.
Uses Unicam 1, which is the standard camera connector on most Pi Uses Unicam 1, which is the standard camera connector on most Pi
variants. variants.
Load: dtoverlay=ov7251 Load: dtoverlay=ov7251,<param>=<val>
Params: <None> Params: rotation Mounting rotation of the camera sensor (0 or
180, default 0)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: ov9281 Name: ov9281
Info: Omnivision OV9281 camera module. Info: Omnivision OV9281 camera module.
Uses Unicam 1, which is the standard camera connector on most Pi Uses Unicam 1, which is the standard camera connector on most Pi
variants. variants.
Load: dtoverlay=ov9281 Load: dtoverlay=ov9281,<param>=<val>
Params: <None> Params: rotation Mounting rotation of the camera sensor (0 or
180, default 0)
orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
Name: papirus Name: papirus

View File

@ -243,6 +243,19 @@ ds1340: ds1340@68 {
}; };
}; };
fragment@18 {
target = <&i2cbus>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
s35390a: s35390a@30 {
compatible = "ablic,s35390a";
reg = <0x30>;
};
};
};
__overrides__ { __overrides__ {
abx80x = <0>,"+0"; abx80x = <0>,"+0";
ds1307 = <0>,"+1"; ds1307 = <0>,"+1";
@ -262,6 +275,7 @@ __overrides__ {
sd3078 = <0>,"+14"; sd3078 = <0>,"+14";
pcf85063 = <0>,"+15"; pcf85063 = <0>,"+15";
pcf85063a = <0>,"+16"; pcf85063a = <0>,"+16";
s35390a = <0>,"+18";
addr = <&abx80x>, "reg:0", addr = <&abx80x>, "reg:0",
<&ds1307>, "reg:0", <&ds1307>, "reg:0",
@ -272,7 +286,8 @@ __overrides__ {
<&pcf8523>, "reg:0", <&pcf8523>, "reg:0",
<&pcf8563>, "reg:0", <&pcf8563>, "reg:0",
<&m41t62>, "reg:0", <&m41t62>, "reg:0",
<&rv1805>, "reg:0"; <&rv1805>, "reg:0",
<&s35390a>, "reg:0";
trickle-diode-type = <&abx80x>,"abracon,tc-diode", trickle-diode-type = <&abx80x>,"abracon,tc-diode",
<&rv1805>,"abracon,tc-diode"; <&rv1805>,"abracon,tc-diode";
trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0", trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",

View File

@ -28,6 +28,7 @@ imx219: imx219@10 {
VDDL-supply = <&imx219_vddl>; /* 1.2v */ VDDL-supply = <&imx219_vddl>; /* 1.2v */
rotation = <180>; rotation = <180>;
orientation = <2>;
port { port {
imx219_0: endpoint { imx219_0: endpoint {
@ -109,5 +110,6 @@ __overlay__ {
__overrides__ { __overrides__ {
rotation = <&imx219>,"rotation:0"; rotation = <&imx219>,"rotation:0";
orientation = <&imx219>,"orientation:0";
}; };
}; };

View File

@ -24,6 +24,9 @@ imx290: imx290@1a {
clock-names = "xclk"; clock-names = "xclk";
clock-frequency = <37125000>; clock-frequency = <37125000>;
rotation = <0>;
orientation = <2>;
vdda-supply = <&cam1_reg>; /* 2.8v */ vdda-supply = <&cam1_reg>; /* 2.8v */
vdddo-supply = <&imx290_vdddo>; /* 1.8v */ vdddo-supply = <&imx290_vdddo>; /* 1.8v */
vddd-supply = <&imx290_vddd>; /* 1.5v */ vddd-supply = <&imx290_vddd>; /* 1.5v */
@ -135,5 +138,7 @@ __overrides__ {
4lane = <0>, "-6+7-8+9"; 4lane = <0>, "-6+7-8+9";
clock-frequency = <&imx290_clk>,"clock-frequency:0", clock-frequency = <&imx290_clk>,"clock-frequency:0",
<&imx290>,"clock-frequency:0"; <&imx290>,"clock-frequency:0";
rotation = <&imx290>,"rotation:0";
orientation = <&imx290>,"orientation:0";
}; };
}; };

View File

@ -23,6 +23,7 @@ imx477: imx477@1a {
VDDL-supply = <&imx477_vddl>; /* 1.8v */ VDDL-supply = <&imx477_vddl>; /* 1.8v */
rotation = <180>; rotation = <180>;
orientation = <2>;
port { port {
imx477_0: endpoint { imx477_0: endpoint {
@ -104,5 +105,6 @@ __overlay__ {
__overrides__ { __overrides__ {
rotation = <&imx477>,"rotation:0"; rotation = <&imx477>,"rotation:0";
orientation = <&imx477>,"orientation:0";
}; };
}; };

View File

@ -22,6 +22,7 @@ ov5647: ov5647@36 {
clocks = <&ov5647_clk>; clocks = <&ov5647_clk>;
rotation = <0>; rotation = <0>;
orientation = <2>;
port { port {
ov5647_0: endpoint { ov5647_0: endpoint {
@ -88,5 +89,6 @@ ov5647_clk: camera-clk {
__overrides__ { __overrides__ {
rotation = <&ov5647>,"rotation:0"; rotation = <&ov5647>,"rotation:0";
orientation = <&ov5647>,"orientation:0";
}; };
}; };

View File

@ -28,6 +28,9 @@ ov7251: ov7251@60 {
vdda-supply = <&cam1_reg>; vdda-supply = <&cam1_reg>;
vddd-supply = <&ov7251_dvdd>; vddd-supply = <&ov7251_dvdd>;
rotation = <0>;
orientation = <2>;
port { port {
ov7251_0: endpoint { ov7251_0: endpoint {
remote-endpoint = <&csi1_ep>; remote-endpoint = <&csi1_ep>;
@ -102,4 +105,9 @@ __overlay__ {
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };
}; };
__overrides__ {
rotation = <&ov7251>,"rotation:0";
orientation = <&ov7251>,"orientation:0";
};
}; };

View File

@ -27,6 +27,9 @@ ov9281: ov9281@60 {
dovdd-supply = <&ov9281_dovdd>; dovdd-supply = <&ov9281_dovdd>;
dvdd-supply = <&ov9281_dvdd>; dvdd-supply = <&ov9281_dvdd>;
rotation = <0>;
orientation = <2>;
port { port {
ov9281_0: endpoint { ov9281_0: endpoint {
remote-endpoint = <&csi1_ep>; remote-endpoint = <&csi1_ep>;
@ -103,4 +106,8 @@ __overlay__ {
}; };
}; };
__overrides__ {
rotation = <&ov9281>,"rotation:0";
orientation = <&ov9281>,"orientation:0";
};
}; };

View File

@ -8,7 +8,7 @@
#include "cma-overlay.dts" #include "cma-overlay.dts"
&frag0 { &frag0 {
size = <(512*1024*1024)>; size = <((320-4)*1024*1024)>;
}; };
/ { / {

View File

@ -10,7 +10,7 @@
#include "cma-overlay.dts" #include "cma-overlay.dts"
&frag0 { &frag0 {
size = <(512*1024*1024)>; size = <((320-4)*1024*1024)>;
}; };
/ { / {

View File

@ -755,14 +755,14 @@ clcd@10120000 {
status = "disabled"; status = "disabled";
}; };
vica: intc@10140000 { vica: interrupt-controller@10140000 {
compatible = "arm,versatile-vic"; compatible = "arm,versatile-vic";
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
reg = <0x10140000 0x20>; reg = <0x10140000 0x20>;
}; };
vicb: intc@10140020 { vicb: interrupt-controller@10140020 {
compatible = "arm,versatile-vic"; compatible = "arm,versatile-vic";
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;

View File

@ -37,7 +37,7 @@ gpio-keys-polled {
poll-interval = <20>; poll-interval = <20>;
/* /*
* The EXTi IRQ line 3 is shared with touchscreen and ethernet, * The EXTi IRQ line 3 is shared with ethernet,
* so mark this as polled GPIO key. * so mark this as polled GPIO key.
*/ */
button-0 { button-0 {
@ -46,6 +46,16 @@ button-0 {
gpios = <&gpiof 3 GPIO_ACTIVE_LOW>; gpios = <&gpiof 3 GPIO_ACTIVE_LOW>;
}; };
/*
* The EXTi IRQ line 6 is shared with touchscreen,
* so mark this as polled GPIO key.
*/
button-1 {
label = "TA2-GPIO-B";
linux,code = <KEY_B>;
gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
};
/* /*
* The EXTi IRQ line 0 is shared with PMIC, * The EXTi IRQ line 0 is shared with PMIC,
* so mark this as polled GPIO key. * so mark this as polled GPIO key.
@ -60,13 +70,6 @@ button-2 {
gpio-keys { gpio-keys {
compatible = "gpio-keys"; compatible = "gpio-keys";
button-1 {
label = "TA2-GPIO-B";
linux,code = <KEY_B>;
gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
wakeup-source;
};
button-3 { button-3 {
label = "TA4-GPIO-D"; label = "TA4-GPIO-D";
linux,code = <KEY_D>; linux,code = <KEY_D>;
@ -82,6 +85,7 @@ led-0 {
label = "green:led5"; label = "green:led5";
gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>; gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>;
default-state = "off"; default-state = "off";
status = "disabled";
}; };
led-1 { led-1 {
@ -185,8 +189,8 @@ sgtl5000_rx_endpoint: endpoint@1 {
touchscreen@38 { touchscreen@38 {
compatible = "edt,edt-ft5406"; compatible = "edt,edt-ft5406";
reg = <0x38>; reg = <0x38>;
interrupt-parent = <&gpiog>; interrupt-parent = <&gpioc>;
interrupts = <2 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */ interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */
}; };
}; };

View File

@ -12,6 +12,8 @@ / {
aliases { aliases {
ethernet0 = &ethernet0; ethernet0 = &ethernet0;
ethernet1 = &ksz8851; ethernet1 = &ksz8851;
rtc0 = &hwrtc;
rtc1 = &rtc;
}; };
memory@c0000000 { memory@c0000000 {
@ -138,6 +140,7 @@ phy0: ethernet-phy@1 {
reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>; reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>;
reset-assert-us = <500>; reset-assert-us = <500>;
reset-deassert-us = <500>; reset-deassert-us = <500>;
smsc,disable-energy-detect;
interrupt-parent = <&gpioi>; interrupt-parent = <&gpioi>;
interrupts = <11 IRQ_TYPE_LEVEL_LOW>; interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
}; };
@ -248,7 +251,7 @@ &i2c4 {
/delete-property/dmas; /delete-property/dmas;
/delete-property/dma-names; /delete-property/dma-names;
rtc@32 { hwrtc: rtc@32 {
compatible = "microcrystal,rv8803"; compatible = "microcrystal,rv8803";
reg = <0x32>; reg = <0x32>;
}; };

View File

@ -674,6 +674,7 @@ CONFIG_SERIAL_SC16IS7XX_SPI=y
CONFIG_SERIAL_DEV_BUS=y CONFIG_SERIAL_DEV_BUS=y
CONFIG_TTY_PRINTK=y CONFIG_TTY_PRINTK=y
CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM=y
CONFIG_RAW_DRIVER=y
CONFIG_TCG_TPM=m CONFIG_TCG_TPM=m
CONFIG_TCG_TIS_SPI=m CONFIG_TCG_TIS_SPI=m
CONFIG_RANDOM_TRUST_BOOTLOADER=y CONFIG_RANDOM_TRUST_BOOTLOADER=y
@ -1316,6 +1317,7 @@ CONFIG_R8712U=m
CONFIG_R8188EU=m CONFIG_R8188EU=m
CONFIG_VT6656=m CONFIG_VT6656=m
CONFIG_STAGING_MEDIA=y CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_RPIVID=m
CONFIG_FB_TFT=m CONFIG_FB_TFT=m
CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_AGM1264K_FL=m
CONFIG_FB_TFT_BD663474=m CONFIG_FB_TFT_BD663474=m

View File

@ -9,7 +9,6 @@ menuconfig ARCH_DAVINCI
select PM_GENERIC_DOMAINS_OF if PM && OF select PM_GENERIC_DOMAINS_OF if PM && OF
select REGMAP_MMIO select REGMAP_MMIO
select RESET_CONTROLLER select RESET_CONTROLLER
select HAVE_IDE
select PINCTRL_SINGLE select PINCTRL_SINGLE
if ARCH_DAVINCI if ARCH_DAVINCI

View File

@ -103,6 +103,7 @@ struct mmdc_pmu {
struct perf_event *mmdc_events[MMDC_NUM_COUNTERS]; struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
struct hlist_node node; struct hlist_node node;
struct fsl_mmdc_devtype_data *devtype_data; struct fsl_mmdc_devtype_data *devtype_data;
struct clk *mmdc_ipg_clk;
}; };
/* /*
@ -462,11 +463,14 @@ static int imx_mmdc_remove(struct platform_device *pdev)
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node); cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
perf_pmu_unregister(&pmu_mmdc->pmu); perf_pmu_unregister(&pmu_mmdc->pmu);
iounmap(pmu_mmdc->mmdc_base);
clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk);
kfree(pmu_mmdc); kfree(pmu_mmdc);
return 0; return 0;
} }
static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base) static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base,
struct clk *mmdc_ipg_clk)
{ {
struct mmdc_pmu *pmu_mmdc; struct mmdc_pmu *pmu_mmdc;
char *name; char *name;
@ -494,6 +498,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
} }
mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev); mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;
if (mmdc_num == 0) if (mmdc_num == 0)
name = "mmdc"; name = "mmdc";
else else
@ -529,7 +534,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
#else #else
#define imx_mmdc_remove NULL #define imx_mmdc_remove NULL
#define imx_mmdc_perf_init(pdev, mmdc_base) 0 #define imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk) 0
#endif #endif
static int imx_mmdc_probe(struct platform_device *pdev) static int imx_mmdc_probe(struct platform_device *pdev)
@ -567,7 +572,13 @@ static int imx_mmdc_probe(struct platform_device *pdev)
val &= ~(1 << BP_MMDC_MAPSR_PSD); val &= ~(1 << BP_MMDC_MAPSR_PSD);
writel_relaxed(val, reg); writel_relaxed(val, reg);
return imx_mmdc_perf_init(pdev, mmdc_base); err = imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk);
if (err) {
iounmap(mmdc_base);
clk_disable_unprepare(mmdc_ipg_clk);
}
return err;
} }
int imx_mmdc_get_ddr_type(void) int imx_mmdc_get_ddr_type(void)

View File

@ -91,6 +91,7 @@ config MACH_IXDP465
config MACH_GORAMO_MLR config MACH_GORAMO_MLR
bool "GORAMO Multi Link Router" bool "GORAMO Multi Link Router"
depends on IXP4XX_PCI_LEGACY
help help
Say 'Y' here if you want your kernel to support GORAMO Say 'Y' here if you want your kernel to support GORAMO
MultiLink router. MultiLink router.

View File

@ -3776,6 +3776,7 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)
struct omap_hwmod_ocp_if *oi; struct omap_hwmod_ocp_if *oi;
struct clockdomain *clkdm; struct clockdomain *clkdm;
struct clk_hw_omap *clk; struct clk_hw_omap *clk;
struct clk_hw *hw;
if (!oh) if (!oh)
return NULL; return NULL;
@ -3792,7 +3793,14 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)
c = oi->_clk; c = oi->_clk;
} }
clk = to_clk_hw_omap(__clk_get_hw(c)); hw = __clk_get_hw(c);
if (!hw)
return NULL;
clk = to_clk_hw_omap(hw);
if (!clk)
return NULL;
clkdm = clk->clkdm; clkdm = clk->clkdm;
if (!clkdm) if (!clkdm)
return NULL; return NULL;

View File

@ -49,6 +49,7 @@ static int __init parse_tag_acorn(const struct tag *tag)
fallthrough; /* ??? */ fallthrough; /* ??? */
case 256: case 256:
vram_size += PAGE_SIZE * 256; vram_size += PAGE_SIZE * 256;
break;
default: default:
break; break;
} }

View File

@ -1602,6 +1602,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
rn = arm_bpf_get_reg32(src_lo, tmp2[1], ctx); rn = arm_bpf_get_reg32(src_lo, tmp2[1], ctx);
emit_ldx_r(dst, rn, off, ctx, BPF_SIZE(code)); emit_ldx_r(dst, rn, off, ctx, BPF_SIZE(code));
break; break;
/* speculation barrier */
case BPF_ST | BPF_NOSPEC:
break;
/* ST: *(size *)(dst + off) = imm */ /* ST: *(size *)(dst + off) = imm */
case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_W:
case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_H:

View File

@ -1800,11 +1800,11 @@ config RANDOMIZE_BASE
If unsure, say N. If unsure, say N.
config RANDOMIZE_MODULE_REGION_FULL config RANDOMIZE_MODULE_REGION_FULL
bool "Randomize the module region over a 4 GB range" bool "Randomize the module region over a 2 GB range"
depends on RANDOMIZE_BASE depends on RANDOMIZE_BASE
default y default y
help help
Randomizes the location of the module region inside a 4 GB window Randomizes the location of the module region inside a 2 GB window
covering the core kernel. This way, it is less likely for modules covering the core kernel. This way, it is less likely for modules
to leak information about the location of core kernel data structures to leak information about the location of core kernel data structures
but it does imply that function calls between modules and the core but it does imply that function calls between modules and the core
@ -1812,7 +1812,10 @@ config RANDOMIZE_MODULE_REGION_FULL
When this option is not set, the module region will be randomized over When this option is not set, the module region will be randomized over
a limited range that contains the [_stext, _etext] interval of the a limited range that contains the [_stext, _etext] interval of the
core kernel, so branch relocations are always in range. core kernel, so branch relocations are almost always in range unless
ARM64_MODULE_PLTS is enabled and the region is exhausted. In this
particular case of region exhaustion, modules might be able to fall
back to a larger 2GB area.
config CC_HAVE_STACKPROTECTOR_SYSREG config CC_HAVE_STACKPROTECTOR_SYSREG
def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0) def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0)

View File

@ -21,19 +21,11 @@ LDFLAGS_vmlinux += -shared -Bsymbolic -z notext \
endif endif
ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y) ifeq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
$(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum)
else
LDFLAGS_vmlinux += --fix-cortex-a53-843419 LDFLAGS_vmlinux += --fix-cortex-a53-843419
endif endif
endif endif
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y)
ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y)
$(warning LSE atomics not supported by binutils)
endif
endif
cc_has_k_constraint := $(call try-run,echo \ cc_has_k_constraint := $(call try-run,echo \
'int main(void) { \ 'int main(void) { \
asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \ asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \
@ -176,6 +168,17 @@ vdso_install:
archprepare: archprepare:
$(Q)$(MAKE) $(build)=arch/arm64/tools kapi $(Q)$(MAKE) $(build)=arch/arm64/tools kapi
ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
@echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2
endif
endif
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y)
@echo "warning: LSE atomics not supported by binutils" >&2
endif
endif
# We use MRPROPER_FILES and CLEAN_FILES now # We use MRPROPER_FILES and CLEAN_FILES now
archclean: archclean:

View File

@ -54,6 +54,7 @@ &mscc_felix {
&mscc_felix_port0 { &mscc_felix_port0 {
label = "swp0"; label = "swp0";
managed = "in-band-status";
phy-handle = <&phy0>; phy-handle = <&phy0>;
phy-mode = "sgmii"; phy-mode = "sgmii";
status = "okay"; status = "okay";
@ -61,6 +62,7 @@ &mscc_felix_port0 {
&mscc_felix_port1 { &mscc_felix_port1 {
label = "swp1"; label = "swp1";
managed = "in-band-status";
phy-handle = <&phy1>; phy-handle = <&phy1>;
phy-mode = "sgmii"; phy-mode = "sgmii";
status = "okay"; status = "okay";

View File

@ -66,7 +66,7 @@ CPU_PW20: cpu-pw20 {
}; };
}; };
sysclk: clock-sysclk { sysclk: sysclk {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0>; #clock-cells = <0>;
clock-frequency = <100000000>; clock-frequency = <100000000>;

View File

@ -579,7 +579,7 @@ uart2: serial@30890000 {
}; };
flexcan1: can@308c0000 { flexcan1: can@308c0000 {
compatible = "fsl,imx8mp-flexcan", "fsl,imx6q-flexcan"; compatible = "fsl,imx8mp-flexcan";
reg = <0x308c0000 0x10000>; reg = <0x308c0000 0x10000>;
interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk IMX8MP_CLK_IPG_ROOT>, clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
@ -594,7 +594,7 @@ flexcan1: can@308c0000 {
}; };
flexcan2: can@308d0000 { flexcan2: can@308d0000 {
compatible = "fsl,imx8mp-flexcan", "fsl,imx6q-flexcan"; compatible = "fsl,imx8mp-flexcan";
reg = <0x308d0000 0x10000>; reg = <0x308d0000 0x10000>;
interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk IMX8MP_CLK_IPG_ROOT>, clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
@ -821,9 +821,9 @@ fec: ethernet@30be0000 {
eqos: ethernet@30bf0000 { eqos: ethernet@30bf0000 {
compatible = "nxp,imx8mp-dwmac-eqos", "snps,dwmac-5.10a"; compatible = "nxp,imx8mp-dwmac-eqos", "snps,dwmac-5.10a";
reg = <0x30bf0000 0x10000>; reg = <0x30bf0000 0x10000>;
interrupts = <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>, interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>; <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "eth_wake_irq", "macirq"; interrupt-names = "macirq", "eth_wake_irq";
clocks = <&clk IMX8MP_CLK_ENET_QOS_ROOT>, clocks = <&clk IMX8MP_CLK_ENET_QOS_ROOT>,
<&clk IMX8MP_CLK_QOS_ENET_ROOT>, <&clk IMX8MP_CLK_QOS_ENET_ROOT>,
<&clk IMX8MP_CLK_ENET_QOS_TIMER>, <&clk IMX8MP_CLK_ENET_QOS_TIMER>,

View File

@ -19,6 +19,8 @@ / {
aliases { aliases {
spi0 = &spi0; spi0 = &spi0;
ethernet1 = &eth1; ethernet1 = &eth1;
mmc0 = &sdhci0;
mmc1 = &sdhci1;
}; };
chosen { chosen {
@ -119,6 +121,7 @@ &i2c0 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>; pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>; clock-frequency = <100000>;
/delete-property/ mrvl,i2c-fast-mode;
status = "okay"; status = "okay";
rtc@6f { rtc@6f {

View File

@ -1840,7 +1840,11 @@ pcie@14100000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE1R &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE1R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE1W &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE1W &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE1>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE1 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie@14120000 { pcie@14120000 {
@ -1890,7 +1894,11 @@ pcie@14120000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE2AR &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE2AR &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE2AW &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE2AW &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE2>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE2 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie@14140000 { pcie@14140000 {
@ -1940,7 +1948,11 @@ pcie@14140000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE3R &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE3R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE3W &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE3W &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE3>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE3 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie@14160000 { pcie@14160000 {
@ -1990,7 +2002,11 @@ pcie@14160000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE4>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE4 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie@14180000 { pcie@14180000 {
@ -2040,7 +2056,11 @@ pcie@14180000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE0>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE0 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie@141a0000 { pcie@141a0000 {
@ -2094,7 +2114,11 @@ pcie@141a0000 {
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>, interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>; <&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
interconnect-names = "read", "write"; interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE5>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE5 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie_ep@14160000 { pcie_ep@14160000 {
@ -2127,6 +2151,14 @@ pcie_ep@14160000 {
nvidia,aspm-cmrt-us = <60>; nvidia,aspm-cmrt-us = <60>;
nvidia,aspm-pwr-on-t-us = <20>; nvidia,aspm-pwr-on-t-us = <20>;
nvidia,aspm-l0s-entrance-latency-us = <3>; nvidia,aspm-l0s-entrance-latency-us = <3>;
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE4>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE4 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie_ep@14180000 { pcie_ep@14180000 {
@ -2159,6 +2191,14 @@ pcie_ep@14180000 {
nvidia,aspm-cmrt-us = <60>; nvidia,aspm-cmrt-us = <60>;
nvidia,aspm-pwr-on-t-us = <20>; nvidia,aspm-pwr-on-t-us = <20>;
nvidia,aspm-l0s-entrance-latency-us = <3>; nvidia,aspm-l0s-entrance-latency-us = <3>;
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE0>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE0 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
pcie_ep@141a0000 { pcie_ep@141a0000 {
@ -2194,6 +2234,14 @@ pcie_ep@141a0000 {
nvidia,aspm-cmrt-us = <60>; nvidia,aspm-cmrt-us = <60>;
nvidia,aspm-pwr-on-t-us = <20>; nvidia,aspm-pwr-on-t-us = <20>;
nvidia,aspm-l0s-entrance-latency-us = <3>; nvidia,aspm-l0s-entrance-latency-us = <3>;
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
<&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
interconnect-names = "dma-mem", "write";
iommus = <&smmu TEGRA194_SID_PCIE5>;
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE5 0x1000>;
iommu-map-mask = <0x0>;
dma-coherent;
}; };
sram@40000000 { sram@40000000 {

View File

@ -1321,6 +1321,7 @@ CONFIG_R8712U=m
CONFIG_R8188EU=m CONFIG_R8188EU=m
CONFIG_VT6656=m CONFIG_VT6656=m
CONFIG_STAGING_MEDIA=y CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_RPIVID=m
CONFIG_ASHMEM=y CONFIG_ASHMEM=y
CONFIG_FB_TFT=m CONFIG_FB_TFT=m
CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_AGM1264K_FL=m

View File

@ -320,7 +320,17 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
static inline unsigned long regs_return_value(struct pt_regs *regs) static inline unsigned long regs_return_value(struct pt_regs *regs)
{ {
return regs->regs[0]; unsigned long val = regs->regs[0];
/*
* Audit currently uses regs_return_value() instead of
* syscall_get_return_value(). Apply the same sign-extension here until
* audit is updated to use syscall_get_return_value().
*/
if (compat_user_mode(regs))
val = sign_extend64(val, 31);
return val;
} }
static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc) static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)

View File

@ -29,24 +29,25 @@ static inline void syscall_rollback(struct task_struct *task,
regs->regs[0] = regs->orig_x0; regs->regs[0] = regs->orig_x0;
} }
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
unsigned long val = regs->regs[0];
if (is_compat_thread(task_thread_info(task)))
val = sign_extend64(val, 31);
return val;
}
static inline long syscall_get_error(struct task_struct *task, static inline long syscall_get_error(struct task_struct *task,
struct pt_regs *regs) struct pt_regs *regs)
{ {
unsigned long error = regs->regs[0]; unsigned long error = syscall_get_return_value(task, regs);
if (is_compat_thread(task_thread_info(task)))
error = sign_extend64(error, 31);
return IS_ERR_VALUE(error) ? error : 0; return IS_ERR_VALUE(error) ? error : 0;
} }
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
return regs->regs[0];
}
static inline void syscall_set_return_value(struct task_struct *task, static inline void syscall_set_return_value(struct task_struct *task,
struct pt_regs *regs, struct pt_regs *regs,
int error, long val) int error, long val)

View File

@ -162,7 +162,9 @@ u64 __init kaslr_early_init(void)
* a PAGE_SIZE multiple in the range [_etext - MODULES_VSIZE, * a PAGE_SIZE multiple in the range [_etext - MODULES_VSIZE,
* _stext) . This guarantees that the resulting region still * _stext) . This guarantees that the resulting region still
* covers [_stext, _etext], and that all relative branches can * covers [_stext, _etext], and that all relative branches can
* be resolved without veneers. * be resolved without veneers unless this region is exhausted
* and we fall back to a larger 2GB window in module_alloc()
* when ARM64_MODULE_PLTS is enabled.
*/ */
module_range = MODULES_VSIZE - (u64)(_etext - _stext); module_range = MODULES_VSIZE - (u64)(_etext - _stext);
module_alloc_base = (u64)_etext + offset - MODULES_VSIZE; module_alloc_base = (u64)_etext + offset - MODULES_VSIZE;

View File

@ -1862,7 +1862,7 @@ void syscall_trace_exit(struct pt_regs *regs)
audit_syscall_exit(regs); audit_syscall_exit(regs);
if (flags & _TIF_SYSCALL_TRACEPOINT) if (flags & _TIF_SYSCALL_TRACEPOINT)
trace_sys_exit(regs, regs_return_value(regs)); trace_sys_exit(regs, syscall_get_return_value(current, regs));
if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP)) if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT); tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);

View File

@ -29,6 +29,7 @@
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/fpsimd.h> #include <asm/fpsimd.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/syscall.h>
#include <asm/signal32.h> #include <asm/signal32.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/vdso.h> #include <asm/vdso.h>
@ -890,7 +891,7 @@ static void do_signal(struct pt_regs *regs)
retval == -ERESTART_RESTARTBLOCK || retval == -ERESTART_RESTARTBLOCK ||
(retval == -ERESTARTSYS && (retval == -ERESTARTSYS &&
!(ksig.ka.sa.sa_flags & SA_RESTART)))) { !(ksig.ka.sa.sa_flags & SA_RESTART)))) {
regs->regs[0] = -EINTR; syscall_set_return_value(current, regs, -EINTR, 0);
regs->pc = continue_addr; regs->pc = continue_addr;
} }

View File

@ -218,7 +218,7 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)
#ifdef CONFIG_STACKTRACE #ifdef CONFIG_STACKTRACE
noinline void arch_stack_walk(stack_trace_consume_fn consume_entry, noinline notrace void arch_stack_walk(stack_trace_consume_fn consume_entry,
void *cookie, struct task_struct *task, void *cookie, struct task_struct *task,
struct pt_regs *regs) struct pt_regs *regs)
{ {

View File

@ -54,10 +54,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
ret = do_ni_syscall(regs, scno); ret = do_ni_syscall(regs, scno);
} }
if (is_compat_task()) syscall_set_return_value(current, regs, 0, ret);
ret = lower_32_bits(ret);
regs->regs[0] = ret;
/* /*
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(), * Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
@ -115,7 +112,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
* syscall. do_notify_resume() will send a signal to userspace * syscall. do_notify_resume() will send a signal to userspace
* before the syscall is restarted. * before the syscall is restarted.
*/ */
regs->regs[0] = -ERESTARTNOINTR; syscall_set_return_value(current, regs, -ERESTARTNOINTR, 0);
return; return;
} }
@ -136,7 +133,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
* anyway. * anyway.
*/ */
if (scno == NO_SYSCALL) if (scno == NO_SYSCALL)
regs->regs[0] = -ENOSYS; syscall_set_return_value(current, regs, -ENOSYS, 0);
scno = syscall_trace_enter(regs); scno = syscall_trace_enter(regs);
if (scno == NO_SYSCALL) if (scno == NO_SYSCALL)
goto trace_exit; goto trace_exit;

View File

@ -823,6 +823,19 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,
return ret; return ret;
break; break;
/* speculation barrier */
case BPF_ST | BPF_NOSPEC:
/*
* Nothing required here.
*
* In case of arm64, we rely on the firmware mitigation of
* Speculative Store Bypass as controlled via the ssbd kernel
* parameter. Whenever the mitigation is enabled, it works
* for all of the kernel code with no need to provide any
* additional instructions.
*/
break;
/* ST: *(size *)(dst + off) = imm */ /* ST: *(size *)(dst + off) = imm */
case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_W:
case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_H:

View File

@ -44,7 +44,6 @@ config H8300_H8MAX
bool "H8MAX" bool "H8MAX"
select H83069 select H83069
select RAMKERNEL select RAMKERNEL
select HAVE_IDE
help help
H8MAX Evaluation Board Support H8MAX Evaluation Board Support
More Information. (Japanese Only) More Information. (Japanese Only)

View File

@ -25,7 +25,6 @@ config IA64
select HAVE_ASM_MODVERSIONS select HAVE_ASM_MODVERSIONS
select HAVE_UNSTABLE_SCHED_CLOCK select HAVE_UNSTABLE_SCHED_CLOCK
select HAVE_EXIT_THREAD select HAVE_EXIT_THREAD
select HAVE_IDE
select HAVE_KPROBES select HAVE_KPROBES
select HAVE_KRETPROBES select HAVE_KRETPROBES
select HAVE_FTRACE_MCOUNT_RECORD select HAVE_FTRACE_MCOUNT_RECORD

View File

@ -23,7 +23,6 @@ config M68K
select HAVE_DEBUG_BUGVERBOSE select HAVE_DEBUG_BUGVERBOSE
select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_HAS_NO_UNALIGNED select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_HAS_NO_UNALIGNED
select HAVE_FUTEX_CMPXCHG if MMU && FUTEX select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
select HAVE_IDE
select HAVE_MOD_ARCH_SPECIFIC select HAVE_MOD_ARCH_SPECIFIC
select HAVE_UID16 select HAVE_UID16
select MMU_GATHER_NO_RANGE if MMU select MMU_GATHER_NO_RANGE if MMU

View File

@ -26,7 +26,7 @@ DEFINE_CLK(pll, "pll.0", MCF_CLK);
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK); DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
static struct clk_lookup m525x_clk_lookup[] = { static struct clk_lookup m525x_clk_lookup[] = {
CLKDEV_INIT(NULL, "pll.0", &pll), CLKDEV_INIT(NULL, "pll.0", &clk_pll),
CLKDEV_INIT(NULL, "sys.0", &clk_sys), CLKDEV_INIT(NULL, "sys.0", &clk_sys),
CLKDEV_INIT("mcftmr.0", NULL, &clk_sys), CLKDEV_INIT("mcftmr.0", NULL, &clk_sys),
CLKDEV_INIT("mcftmr.1", NULL, &clk_sys), CLKDEV_INIT("mcftmr.1", NULL, &clk_sys),

View File

@ -71,7 +71,6 @@ config MIPS
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_GCC_PLUGINS select HAVE_GCC_PLUGINS
select HAVE_GENERIC_VDSO select HAVE_GENERIC_VDSO
select HAVE_IDE
select HAVE_IOREMAP_PROT select HAVE_IOREMAP_PROT
select HAVE_IRQ_EXIT_ON_IRQ_STACK select HAVE_IRQ_EXIT_ON_IRQ_STACK
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING

View File

@ -58,15 +58,20 @@ do { \
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
pmd_t *pmd = NULL; pmd_t *pmd;
struct page *pg; struct page *pg;
pg = alloc_pages(GFP_KERNEL | __GFP_ACCOUNT, PMD_ORDER); pg = alloc_pages(GFP_KERNEL_ACCOUNT, PMD_ORDER);
if (pg) { if (!pg)
pgtable_pmd_page_ctor(pg); return NULL;
pmd = (pmd_t *)page_address(pg);
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table); if (!pgtable_pmd_page_ctor(pg)) {
__free_pages(pg, PMD_ORDER);
return NULL;
} }
pmd = (pmd_t *)page_address(pg);
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
return pmd; return pmd;
} }

View File

@ -48,7 +48,8 @@ static struct plat_serial8250_port uart8250_data[] = {
.mapbase = 0x1f000900, /* The CBUS UART */ .mapbase = 0x1f000900, /* The CBUS UART */
.irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2, .irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
.uartclk = 3686400, /* Twice the usual clk! */ .uartclk = 3686400, /* Twice the usual clk! */
.iotype = UPIO_MEM32, .iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
UPIO_MEM32BE : UPIO_MEM32,
.flags = CBUS_UART_FLAGS, .flags = CBUS_UART_FLAGS,
.regshift = 3, .regshift = 3,
}, },

View File

@ -1355,6 +1355,9 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,
} }
break; break;
case BPF_ST | BPF_NOSPEC: /* speculation barrier */
break;
case BPF_ST | BPF_B | BPF_MEM: case BPF_ST | BPF_B | BPF_MEM:
case BPF_ST | BPF_H | BPF_MEM: case BPF_ST | BPF_H | BPF_MEM:
case BPF_ST | BPF_W | BPF_MEM: case BPF_ST | BPF_W | BPF_MEM:

View File

@ -3,7 +3,6 @@ config PARISC
def_bool y def_bool y
select ARCH_32BIT_OFF_T if !64BIT select ARCH_32BIT_OFF_T if !64BIT
select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_PARPORT
select HAVE_IDE
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_GRAPH_TRACER
select HAVE_SYSCALL_TRACEPOINTS select HAVE_SYSCALL_TRACEPOINTS

View File

@ -220,7 +220,6 @@ config PPC
select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP
select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !HAVE_HARDLOCKUP_DETECTOR_ARCH select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !HAVE_HARDLOCKUP_DETECTOR_ARCH
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx) select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
select HAVE_IDE
select HAVE_IOREMAP_PROT select HAVE_IOREMAP_PROT
select HAVE_IRQ_EXIT_ON_IRQ_STACK select HAVE_IRQ_EXIT_ON_IRQ_STACK
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING

View File

@ -27,6 +27,13 @@ KASAN_SANITIZE := n
ccflags-y := -shared -fno-common -fno-builtin -nostdlib \ ccflags-y := -shared -fno-common -fno-builtin -nostdlib \
-Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both -Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both
# Go prior to 1.16.x assumes r30 is not clobbered by any VDSO code. That used to be true
# by accident when the VDSO was hand-written asm code, but may not be now that the VDSO is
# compiler generated. To avoid breaking Go tell GCC not to use r30. Impact on code
# generation is minimal, it will just use r29 instead.
ccflags-y += $(call cc-option, -ffixed-r30)
asflags-y := -D__VDSO64__ -s asflags-y := -D__VDSO64__ -s
targets += vdso64.lds targets += vdso64.lds

View File

@ -737,6 +737,12 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
} }
break; break;
/*
* BPF_ST NOSPEC (speculation barrier)
*/
case BPF_ST | BPF_NOSPEC:
break;
/* /*
* BPF_ST(X) * BPF_ST(X)
*/ */

View File

@ -627,6 +627,12 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
} }
break; break;
/*
* BPF_ST NOSPEC (speculation barrier)
*/
case BPF_ST | BPF_NOSPEC:
break;
/* /*
* BPF_ST(X) * BPF_ST(X)
*/ */

View File

@ -77,7 +77,7 @@
#include "../../../../drivers/pci/pci.h" #include "../../../../drivers/pci/pci.h"
DEFINE_STATIC_KEY_FALSE(shared_processor); DEFINE_STATIC_KEY_FALSE(shared_processor);
EXPORT_SYMBOL_GPL(shared_processor); EXPORT_SYMBOL(shared_processor);
int CMO_PrPSP = -1; int CMO_PrPSP = -1;
int CMO_SecPSP = -1; int CMO_SecPSP = -1;

View File

@ -492,10 +492,16 @@ config CC_HAVE_STACKPROTECTOR_TLS
config STACKPROTECTOR_PER_TASK config STACKPROTECTOR_PER_TASK
def_bool y def_bool y
depends on !GCC_PLUGIN_RANDSTRUCT
depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
config PHYS_RAM_BASE_FIXED
bool "Explicitly specified physical RAM address"
default n
config PHYS_RAM_BASE config PHYS_RAM_BASE
hex "Platform Physical RAM address" hex "Platform Physical RAM address"
depends on PHYS_RAM_BASE_FIXED
default "0x80000000" default "0x80000000"
help help
This is the physical address of RAM in the system. It has to be This is the physical address of RAM in the system. It has to be
@ -508,6 +514,7 @@ config XIP_KERNEL
# This prevents XIP from being enabled by all{yes,mod}config, which # This prevents XIP from being enabled by all{yes,mod}config, which
# fail to build since XIP doesn't support large kernels. # fail to build since XIP doesn't support large kernels.
depends on !COMPILE_TEST depends on !COMPILE_TEST
select PHYS_RAM_BASE_FIXED
help help
Execute-In-Place allows the kernel to run from non-volatile storage Execute-In-Place allows the kernel to run from non-volatile storage
directly addressable by the CPU, such as NOR flash. This saves RAM directly addressable by the CPU, such as NOR flash. This saves RAM

View File

@ -103,6 +103,7 @@ struct kernel_mapping {
}; };
extern struct kernel_mapping kernel_map; extern struct kernel_mapping kernel_map;
extern phys_addr_t phys_ram_base;
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
#define is_kernel_mapping(x) \ #define is_kernel_mapping(x) \
@ -113,9 +114,9 @@ extern struct kernel_mapping kernel_map;
#define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset)) #define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
#define kernel_mapping_pa_to_va(y) ({ \ #define kernel_mapping_pa_to_va(y) ({ \
unsigned long _y = y; \ unsigned long _y = y; \
(_y >= CONFIG_PHYS_RAM_BASE) ? \ (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
(void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET) : \ (void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset) : \
(void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset); \ (void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
}) })
#define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x) #define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)

View File

@ -27,7 +27,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
fp = frame_pointer(regs); fp = frame_pointer(regs);
sp = user_stack_pointer(regs); sp = user_stack_pointer(regs);
pc = instruction_pointer(regs); pc = instruction_pointer(regs);
} else if (task == current) { } else if (task == NULL || task == current) {
fp = (unsigned long)__builtin_frame_address(1); fp = (unsigned long)__builtin_frame_address(1);
sp = (unsigned long)__builtin_frame_address(0); sp = (unsigned long)__builtin_frame_address(0);
pc = (unsigned long)__builtin_return_address(0); pc = (unsigned long)__builtin_return_address(0);

View File

@ -36,6 +36,9 @@ EXPORT_SYMBOL(kernel_map);
#define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map)) #define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
#endif #endif
phys_addr_t phys_ram_base __ro_after_init;
EXPORT_SYMBOL(phys_ram_base);
#ifdef CONFIG_XIP_KERNEL #ifdef CONFIG_XIP_KERNEL
extern char _xiprom[], _exiprom[]; extern char _xiprom[], _exiprom[];
#endif #endif
@ -160,7 +163,7 @@ static void __init setup_bootmem(void)
phys_addr_t vmlinux_end = __pa_symbol(&_end); phys_addr_t vmlinux_end = __pa_symbol(&_end);
phys_addr_t vmlinux_start = __pa_symbol(&_start); phys_addr_t vmlinux_start = __pa_symbol(&_start);
phys_addr_t __maybe_unused max_mapped_addr; phys_addr_t __maybe_unused max_mapped_addr;
phys_addr_t dram_end; phys_addr_t phys_ram_end;
#ifdef CONFIG_XIP_KERNEL #ifdef CONFIG_XIP_KERNEL
vmlinux_start = __pa_symbol(&_sdata); vmlinux_start = __pa_symbol(&_sdata);
@ -181,9 +184,12 @@ static void __init setup_bootmem(void)
#endif #endif
memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start); memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
dram_end = memblock_end_of_DRAM();
phys_ram_end = memblock_end_of_DRAM();
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
#ifndef CONFIG_XIP_KERNEL
phys_ram_base = memblock_start_of_DRAM();
#endif
/* /*
* memblock allocator is not aware of the fact that last 4K bytes of * memblock allocator is not aware of the fact that last 4K bytes of
* the addressable memory can not be mapped because of IS_ERR_VALUE * the addressable memory can not be mapped because of IS_ERR_VALUE
@ -194,12 +200,12 @@ static void __init setup_bootmem(void)
* be done in create_kernel_page_table. * be done in create_kernel_page_table.
*/ */
max_mapped_addr = __pa(~(ulong)0); max_mapped_addr = __pa(~(ulong)0);
if (max_mapped_addr == (dram_end - 1)) if (max_mapped_addr == (phys_ram_end - 1))
memblock_set_current_limit(max_mapped_addr - 4096); memblock_set_current_limit(max_mapped_addr - 4096);
#endif #endif
min_low_pfn = PFN_UP(memblock_start_of_DRAM()); min_low_pfn = PFN_UP(phys_ram_base);
max_low_pfn = max_pfn = PFN_DOWN(dram_end); max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn)); dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET); set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
@ -558,6 +564,7 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR; kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom); kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
phys_ram_base = CONFIG_PHYS_RAM_BASE;
kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE; kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata); kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata);

View File

@ -1251,6 +1251,10 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
return -1; return -1;
break; break;
/* speculation barrier */
case BPF_ST | BPF_NOSPEC:
break;
case BPF_ST | BPF_MEM | BPF_B: case BPF_ST | BPF_MEM | BPF_B:
case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_H:
case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_W:

View File

@ -939,6 +939,10 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
emit_ld(rd, 0, RV_REG_T1, ctx); emit_ld(rd, 0, RV_REG_T1, ctx);
break; break;
/* speculation barrier */
case BPF_ST | BPF_NOSPEC:
break;
/* ST: *(size *)(dst + off) = imm */ /* ST: *(size *)(dst + off) = imm */
case BPF_ST | BPF_MEM | BPF_B: case BPF_ST | BPF_MEM | BPF_B:
emit_imm(RV_REG_T1, imm, ctx); emit_imm(RV_REG_T1, imm, ctx);

View File

@ -11,6 +11,7 @@ UBSAN_SANITIZE := n
KASAN_SANITIZE := n KASAN_SANITIZE := n
obj-y := $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o obj-y := $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o
obj-all := $(obj-y) piggy.o syms.o obj-all := $(obj-y) piggy.o syms.o
targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4 targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4

View File

@ -0,0 +1,2 @@
// SPDX-License-Identifier: GPL-2.0
#include "../../../../lib/clz_ctz.c"

View File

@ -445,15 +445,15 @@ struct kvm_vcpu_stat {
u64 instruction_sigp_init_cpu_reset; u64 instruction_sigp_init_cpu_reset;
u64 instruction_sigp_cpu_reset; u64 instruction_sigp_cpu_reset;
u64 instruction_sigp_unknown; u64 instruction_sigp_unknown;
u64 diagnose_10; u64 instruction_diagnose_10;
u64 diagnose_44; u64 instruction_diagnose_44;
u64 diagnose_9c; u64 instruction_diagnose_9c;
u64 diagnose_9c_ignored; u64 diag_9c_ignored;
u64 diagnose_9c_forward; u64 diag_9c_forward;
u64 diagnose_258; u64 instruction_diagnose_258;
u64 diagnose_308; u64 instruction_diagnose_308;
u64 diagnose_500; u64 instruction_diagnose_500;
u64 diagnose_other; u64 instruction_diagnose_other;
u64 pfault_sync; u64 pfault_sync;
}; };

View File

@ -51,6 +51,7 @@ SECTIONS
.rela.dyn ALIGN(8) : { *(.rela.dyn) } .rela.dyn ALIGN(8) : { *(.rela.dyn) }
.got ALIGN(8) : { *(.got .toc) } .got ALIGN(8) : { *(.got .toc) }
.got.plt ALIGN(8) : { *(.got.plt) }
_end = .; _end = .;
PROVIDE(end = .); PROVIDE(end = .);

View File

@ -51,6 +51,7 @@ SECTIONS
.rela.dyn ALIGN(8) : { *(.rela.dyn) } .rela.dyn ALIGN(8) : { *(.rela.dyn) }
.got ALIGN(8) : { *(.got .toc) } .got ALIGN(8) : { *(.got .toc) }
.got.plt ALIGN(8) : { *(.got.plt) }
_end = .; _end = .;
PROVIDE(end = .); PROVIDE(end = .);

View File

@ -24,7 +24,7 @@ static int diag_release_pages(struct kvm_vcpu *vcpu)
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4]; start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + PAGE_SIZE; end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + PAGE_SIZE;
vcpu->stat.diagnose_10++; vcpu->stat.instruction_diagnose_10++;
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
|| start < 2 * PAGE_SIZE) || start < 2 * PAGE_SIZE)
@ -74,7 +74,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
VCPU_EVENT(vcpu, 3, "diag page reference parameter block at 0x%llx", VCPU_EVENT(vcpu, 3, "diag page reference parameter block at 0x%llx",
vcpu->run->s.regs.gprs[rx]); vcpu->run->s.regs.gprs[rx]);
vcpu->stat.diagnose_258++; vcpu->stat.instruction_diagnose_258++;
if (vcpu->run->s.regs.gprs[rx] & 7) if (vcpu->run->s.regs.gprs[rx] & 7)
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm)); rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
@ -145,7 +145,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
static int __diag_time_slice_end(struct kvm_vcpu *vcpu) static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
{ {
VCPU_EVENT(vcpu, 5, "%s", "diag time slice end"); VCPU_EVENT(vcpu, 5, "%s", "diag time slice end");
vcpu->stat.diagnose_44++; vcpu->stat.instruction_diagnose_44++;
kvm_vcpu_on_spin(vcpu, true); kvm_vcpu_on_spin(vcpu, true);
return 0; return 0;
} }
@ -169,7 +169,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
int tid; int tid;
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4]; tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
vcpu->stat.diagnose_9c++; vcpu->stat.instruction_diagnose_9c++;
/* yield to self */ /* yield to self */
if (tid == vcpu->vcpu_id) if (tid == vcpu->vcpu_id)
@ -192,7 +192,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
VCPU_EVENT(vcpu, 5, VCPU_EVENT(vcpu, 5,
"diag time slice end directed to %d: yield forwarded", "diag time slice end directed to %d: yield forwarded",
tid); tid);
vcpu->stat.diagnose_9c_forward++; vcpu->stat.diag_9c_forward++;
return 0; return 0;
} }
@ -203,7 +203,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
return 0; return 0;
no_yield: no_yield:
VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid); VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid);
vcpu->stat.diagnose_9c_ignored++; vcpu->stat.diag_9c_ignored++;
return 0; return 0;
} }
@ -213,7 +213,7 @@ static int __diag_ipl_functions(struct kvm_vcpu *vcpu)
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff; unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
VCPU_EVENT(vcpu, 3, "diag ipl functions, subcode %lx", subcode); VCPU_EVENT(vcpu, 3, "diag ipl functions, subcode %lx", subcode);
vcpu->stat.diagnose_308++; vcpu->stat.instruction_diagnose_308++;
switch (subcode) { switch (subcode) {
case 3: case 3:
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR; vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
@ -245,7 +245,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
{ {
int ret; int ret;
vcpu->stat.diagnose_500++; vcpu->stat.instruction_diagnose_500++;
/* No virtio-ccw notification? Get out quickly. */ /* No virtio-ccw notification? Get out quickly. */
if (!vcpu->kvm->arch.css_support || if (!vcpu->kvm->arch.css_support ||
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY)) (vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
@ -299,7 +299,7 @@ int kvm_s390_handle_diag(struct kvm_vcpu *vcpu)
case 0x500: case 0x500:
return __diag_virtio_hypercall(vcpu); return __diag_virtio_hypercall(vcpu);
default: default:
vcpu->stat.diagnose_other++; vcpu->stat.instruction_diagnose_other++;
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
} }

View File

@ -163,15 +163,15 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset), STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset), STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown), STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
STATS_DESC_COUNTER(VCPU, diagnose_10), STATS_DESC_COUNTER(VCPU, instruction_diagnose_10),
STATS_DESC_COUNTER(VCPU, diagnose_44), STATS_DESC_COUNTER(VCPU, instruction_diagnose_44),
STATS_DESC_COUNTER(VCPU, diagnose_9c), STATS_DESC_COUNTER(VCPU, instruction_diagnose_9c),
STATS_DESC_COUNTER(VCPU, diagnose_9c_ignored), STATS_DESC_COUNTER(VCPU, diag_9c_ignored),
STATS_DESC_COUNTER(VCPU, diagnose_9c_forward), STATS_DESC_COUNTER(VCPU, diag_9c_forward),
STATS_DESC_COUNTER(VCPU, diagnose_258), STATS_DESC_COUNTER(VCPU, instruction_diagnose_258),
STATS_DESC_COUNTER(VCPU, diagnose_308), STATS_DESC_COUNTER(VCPU, instruction_diagnose_308),
STATS_DESC_COUNTER(VCPU, diagnose_500), STATS_DESC_COUNTER(VCPU, instruction_diagnose_500),
STATS_DESC_COUNTER(VCPU, diagnose_other), STATS_DESC_COUNTER(VCPU, instruction_diagnose_other),
STATS_DESC_COUNTER(VCPU, pfault_sync) STATS_DESC_COUNTER(VCPU, pfault_sync)
}; };
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) == static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==

View File

@ -112,7 +112,7 @@ static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
{ {
u32 r1 = reg2hex[b1]; u32 r1 = reg2hex[b1];
if (!jit->seen_reg[r1] && r1 >= 6 && r1 <= 15) if (r1 >= 6 && r1 <= 15 && !jit->seen_reg[r1])
jit->seen_reg[r1] = 1; jit->seen_reg[r1] = 1;
} }
@ -1153,6 +1153,11 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
break; break;
} }
break; break;
/*
* BPF_NOSPEC (speculation barrier)
*/
case BPF_ST | BPF_NOSPEC:
break;
/* /*
* BPF_ST(X) * BPF_ST(X)
*/ */

View File

@ -39,7 +39,6 @@ config SUPERH
select HAVE_FUTEX_CMPXCHG if FUTEX select HAVE_FUTEX_CMPXCHG if FUTEX
select HAVE_FTRACE_MCOUNT_RECORD select HAVE_FTRACE_MCOUNT_RECORD
select HAVE_HW_BREAKPOINT select HAVE_HW_BREAKPOINT
select HAVE_IDE if HAS_IOPORT_MAP
select HAVE_IOREMAP_PROT if MMU && !X2TLB select HAVE_IOREMAP_PROT if MMU && !X2TLB
select HAVE_KERNEL_BZIP2 select HAVE_KERNEL_BZIP2
select HAVE_KERNEL_GZIP select HAVE_KERNEL_GZIP

View File

@ -19,7 +19,6 @@ config SPARC
select OF select OF
select OF_PROMTREE select OF_PROMTREE
select HAVE_ASM_MODVERSIONS select HAVE_ASM_MODVERSIONS
select HAVE_IDE
select HAVE_ARCH_KGDB if !SMP || SPARC64 select HAVE_ARCH_KGDB if !SMP || SPARC64
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
select HAVE_ARCH_SECCOMP if SPARC64 select HAVE_ARCH_SECCOMP if SPARC64

View File

@ -1287,6 +1287,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
return 1; return 1;
break; break;
} }
/* speculation barrier */
case BPF_ST | BPF_NOSPEC:
break;
/* ST: *(size *)(dst + off) = imm */ /* ST: *(size *)(dst + off) = imm */
case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_W:
case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_H:

View File

@ -202,7 +202,6 @@ config X86
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_GCC_PLUGINS select HAVE_GCC_PLUGINS
select HAVE_HW_BREAKPOINT select HAVE_HW_BREAKPOINT
select HAVE_IDE
select HAVE_IOREMAP_PROT select HAVE_IOREMAP_PROT
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64 select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING

View File

@ -2489,13 +2489,15 @@ void perf_clear_dirty_counters(void)
return; return;
for_each_set_bit(i, cpuc->dirty, X86_PMC_IDX_MAX) { for_each_set_bit(i, cpuc->dirty, X86_PMC_IDX_MAX) {
/* Metrics and fake events don't have corresponding HW counters. */ if (i >= INTEL_PMC_IDX_FIXED) {
if (is_metric_idx(i) || (i == INTEL_PMC_IDX_FIXED_VLBR)) /* Metrics and fake events don't have corresponding HW counters. */
continue; if ((i - INTEL_PMC_IDX_FIXED) >= hybrid(cpuc->pmu, num_counters_fixed))
else if (i >= INTEL_PMC_IDX_FIXED) continue;
wrmsrl(MSR_ARCH_PERFMON_FIXED_CTR0 + (i - INTEL_PMC_IDX_FIXED), 0); wrmsrl(MSR_ARCH_PERFMON_FIXED_CTR0 + (i - INTEL_PMC_IDX_FIXED), 0);
else } else {
wrmsrl(x86_pmu_event_addr(i), 0); wrmsrl(x86_pmu_event_addr(i), 0);
}
} }
bitmap_zero(cpuc->dirty, X86_PMC_IDX_MAX); bitmap_zero(cpuc->dirty, X86_PMC_IDX_MAX);

View File

@ -2904,24 +2904,28 @@ static int handle_pmi_common(struct pt_regs *regs, u64 status)
*/ */
static int intel_pmu_handle_irq(struct pt_regs *regs) static int intel_pmu_handle_irq(struct pt_regs *regs)
{ {
struct cpu_hw_events *cpuc; struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
bool late_ack = hybrid_bit(cpuc->pmu, late_ack);
bool mid_ack = hybrid_bit(cpuc->pmu, mid_ack);
int loops; int loops;
u64 status; u64 status;
int handled; int handled;
int pmu_enabled; int pmu_enabled;
cpuc = this_cpu_ptr(&cpu_hw_events);
/* /*
* Save the PMU state. * Save the PMU state.
* It needs to be restored when leaving the handler. * It needs to be restored when leaving the handler.
*/ */
pmu_enabled = cpuc->enabled; pmu_enabled = cpuc->enabled;
/* /*
* No known reason to not always do late ACK, * In general, the early ACK is only applied for old platforms.
* but just in case do it opt-in. * For the big core starts from Haswell, the late ACK should be
* applied.
* For the small core after Tremont, we have to do the ACK right
* before re-enabling counters, which is in the middle of the
* NMI handler.
*/ */
if (!x86_pmu.late_ack) if (!late_ack && !mid_ack)
apic_write(APIC_LVTPC, APIC_DM_NMI); apic_write(APIC_LVTPC, APIC_DM_NMI);
intel_bts_disable_local(); intel_bts_disable_local();
cpuc->enabled = 0; cpuc->enabled = 0;
@ -2958,6 +2962,8 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
goto again; goto again;
done: done:
if (mid_ack)
apic_write(APIC_LVTPC, APIC_DM_NMI);
/* Only restore PMU state when it's active. See x86_pmu_disable(). */ /* Only restore PMU state when it's active. See x86_pmu_disable(). */
cpuc->enabled = pmu_enabled; cpuc->enabled = pmu_enabled;
if (pmu_enabled) if (pmu_enabled)
@ -2969,7 +2975,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
* have been reset. This avoids spurious NMIs on * have been reset. This avoids spurious NMIs on
* Haswell CPUs. * Haswell CPUs.
*/ */
if (x86_pmu.late_ack) if (late_ack)
apic_write(APIC_LVTPC, APIC_DM_NMI); apic_write(APIC_LVTPC, APIC_DM_NMI);
return handled; return handled;
} }
@ -6129,7 +6135,6 @@ __init int intel_pmu_init(void)
static_branch_enable(&perf_is_hybrid); static_branch_enable(&perf_is_hybrid);
x86_pmu.num_hybrid_pmus = X86_HYBRID_NUM_PMUS; x86_pmu.num_hybrid_pmus = X86_HYBRID_NUM_PMUS;
x86_pmu.late_ack = true;
x86_pmu.pebs_aliases = NULL; x86_pmu.pebs_aliases = NULL;
x86_pmu.pebs_prec_dist = true; x86_pmu.pebs_prec_dist = true;
x86_pmu.pebs_block = true; x86_pmu.pebs_block = true;
@ -6167,6 +6172,7 @@ __init int intel_pmu_init(void)
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_CORE_IDX]; pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_CORE_IDX];
pmu->name = "cpu_core"; pmu->name = "cpu_core";
pmu->cpu_type = hybrid_big; pmu->cpu_type = hybrid_big;
pmu->late_ack = true;
if (cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) { if (cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) {
pmu->num_counters = x86_pmu.num_counters + 2; pmu->num_counters = x86_pmu.num_counters + 2;
pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1; pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1;
@ -6192,6 +6198,7 @@ __init int intel_pmu_init(void)
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX]; pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX];
pmu->name = "cpu_atom"; pmu->name = "cpu_atom";
pmu->cpu_type = hybrid_small; pmu->cpu_type = hybrid_small;
pmu->mid_ack = true;
pmu->num_counters = x86_pmu.num_counters; pmu->num_counters = x86_pmu.num_counters;
pmu->num_counters_fixed = x86_pmu.num_counters_fixed; pmu->num_counters_fixed = x86_pmu.num_counters_fixed;
pmu->max_pebs_events = x86_pmu.max_pebs_events; pmu->max_pebs_events = x86_pmu.max_pebs_events;

View File

@ -656,6 +656,10 @@ struct x86_hybrid_pmu {
struct event_constraint *event_constraints; struct event_constraint *event_constraints;
struct event_constraint *pebs_constraints; struct event_constraint *pebs_constraints;
struct extra_reg *extra_regs; struct extra_reg *extra_regs;
unsigned int late_ack :1,
mid_ack :1,
enabled_ack :1;
}; };
static __always_inline struct x86_hybrid_pmu *hybrid_pmu(struct pmu *pmu) static __always_inline struct x86_hybrid_pmu *hybrid_pmu(struct pmu *pmu)
@ -686,6 +690,16 @@ extern struct static_key_false perf_is_hybrid;
__Fp; \ __Fp; \
})) }))
#define hybrid_bit(_pmu, _field) \
({ \
bool __Fp = x86_pmu._field; \
\
if (is_hybrid() && (_pmu)) \
__Fp = hybrid_pmu(_pmu)->_field; \
\
__Fp; \
})
enum hybrid_pmu_type { enum hybrid_pmu_type {
hybrid_big = 0x40, hybrid_big = 0x40,
hybrid_small = 0x20, hybrid_small = 0x20,
@ -755,6 +769,7 @@ struct x86_pmu {
/* PMI handler bits */ /* PMI handler bits */
unsigned int late_ack :1, unsigned int late_ack :1,
mid_ack :1,
enabled_ack :1; enabled_ack :1;
/* /*
* sysfs attrs * sysfs attrs
@ -1115,9 +1130,10 @@ void x86_pmu_stop(struct perf_event *event, int flags);
static inline void x86_pmu_disable_event(struct perf_event *event) static inline void x86_pmu_disable_event(struct perf_event *event)
{ {
u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
struct hw_perf_event *hwc = &event->hw; struct hw_perf_event *hwc = &event->hw;
wrmsrl(hwc->config_base, hwc->config); wrmsrl(hwc->config_base, hwc->config & ~disable_mask);
if (is_counter_pair(hwc)) if (is_counter_pair(hwc))
wrmsrl(x86_pmu_config_addr(hwc->idx + 1), 0); wrmsrl(x86_pmu_config_addr(hwc->idx + 1), 0);

View File

@ -2016,6 +2016,7 @@ static void kvm_hv_hypercall_set_result(struct kvm_vcpu *vcpu, u64 result)
static int kvm_hv_hypercall_complete(struct kvm_vcpu *vcpu, u64 result) static int kvm_hv_hypercall_complete(struct kvm_vcpu *vcpu, u64 result)
{ {
trace_kvm_hv_hypercall_done(result);
kvm_hv_hypercall_set_result(vcpu, result); kvm_hv_hypercall_set_result(vcpu, result);
++vcpu->stat.hypercalls; ++vcpu->stat.hypercalls;
return kvm_skip_emulated_instruction(vcpu); return kvm_skip_emulated_instruction(vcpu);
@ -2139,6 +2140,7 @@ static bool hv_check_hypercall_access(struct kvm_vcpu_hv *hv_vcpu, u16 code)
int kvm_hv_hypercall(struct kvm_vcpu *vcpu) int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
{ {
struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu);
struct kvm_hv_hcall hc; struct kvm_hv_hcall hc;
u64 ret = HV_STATUS_SUCCESS; u64 ret = HV_STATUS_SUCCESS;
@ -2173,17 +2175,25 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
hc.rep_idx = (hc.param >> HV_HYPERCALL_REP_START_OFFSET) & 0xfff; hc.rep_idx = (hc.param >> HV_HYPERCALL_REP_START_OFFSET) & 0xfff;
hc.rep = !!(hc.rep_cnt || hc.rep_idx); hc.rep = !!(hc.rep_cnt || hc.rep_idx);
if (hc.fast && is_xmm_fast_hypercall(&hc))
kvm_hv_hypercall_read_xmm(&hc);
trace_kvm_hv_hypercall(hc.code, hc.fast, hc.rep_cnt, hc.rep_idx, trace_kvm_hv_hypercall(hc.code, hc.fast, hc.rep_cnt, hc.rep_idx,
hc.ingpa, hc.outgpa); hc.ingpa, hc.outgpa);
if (unlikely(!hv_check_hypercall_access(to_hv_vcpu(vcpu), hc.code))) { if (unlikely(!hv_check_hypercall_access(hv_vcpu, hc.code))) {
ret = HV_STATUS_ACCESS_DENIED; ret = HV_STATUS_ACCESS_DENIED;
goto hypercall_complete; goto hypercall_complete;
} }
if (hc.fast && is_xmm_fast_hypercall(&hc)) {
if (unlikely(hv_vcpu->enforce_cpuid &&
!(hv_vcpu->cpuid_cache.features_edx &
HV_X64_HYPERCALL_XMM_INPUT_AVAILABLE))) {
kvm_queue_exception(vcpu, UD_VECTOR);
return 1;
}
kvm_hv_hypercall_read_xmm(&hc);
}
switch (hc.code) { switch (hc.code) {
case HVCALL_NOTIFY_LONG_SPIN_WAIT: case HVCALL_NOTIFY_LONG_SPIN_WAIT:
if (unlikely(hc.rep)) { if (unlikely(hc.rep)) {

View File

@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic) static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
{ {
ioapic->rtc_status.pending_eoi = 0; ioapic->rtc_status.pending_eoi = 0;
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID); bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
} }
static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic); static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);

View File

@ -43,13 +43,13 @@ struct kvm_vcpu;
struct dest_map { struct dest_map {
/* vcpu bitmap where IRQ has been sent */ /* vcpu bitmap where IRQ has been sent */
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID); DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
/* /*
* Vector sent to a given vcpu, only valid when * Vector sent to a given vcpu, only valid when
* the vcpu's bit in map is set * the vcpu's bit in map is set
*/ */
u8 vectors[KVM_MAX_VCPU_ID]; u8 vectors[KVM_MAX_VCPU_ID + 1];
}; };

View File

@ -1644,7 +1644,7 @@ static int is_empty_shadow_page(u64 *spt)
* aggregate version in order to make the slab shrinker * aggregate version in order to make the slab shrinker
* faster * faster
*/ */
static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, unsigned long nr) static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, long nr)
{ {
kvm->arch.n_used_mmu_pages += nr; kvm->arch.n_used_mmu_pages += nr;
percpu_counter_add(&kvm_total_used_mmu_pages, nr); percpu_counter_add(&kvm_total_used_mmu_pages, nr);

View File

@ -646,7 +646,7 @@ static int svm_set_pi_irte_mode(struct kvm_vcpu *vcpu, bool activate)
void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu) void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
{ {
struct vcpu_svm *svm = to_svm(vcpu); struct vcpu_svm *svm = to_svm(vcpu);
struct vmcb *vmcb = svm->vmcb; struct vmcb *vmcb = svm->vmcb01.ptr;
bool activated = kvm_vcpu_apicv_active(vcpu); bool activated = kvm_vcpu_apicv_active(vcpu);
if (!enable_apicv) if (!enable_apicv)

View File

@ -515,7 +515,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm)
* Also covers avic_vapic_bar, avic_backing_page, avic_logical_id, * Also covers avic_vapic_bar, avic_backing_page, avic_logical_id,
* avic_physical_id. * avic_physical_id.
*/ */
WARN_ON(svm->vmcb01.ptr->control.int_ctl & AVIC_ENABLE_MASK); WARN_ON(kvm_apicv_activated(svm->vcpu.kvm));
/* Copied from vmcb01. msrpm_base can be overwritten later. */ /* Copied from vmcb01. msrpm_base can be overwritten later. */
svm->vmcb->control.nested_ctl = svm->vmcb01.ptr->control.nested_ctl; svm->vmcb->control.nested_ctl = svm->vmcb01.ptr->control.nested_ctl;
@ -702,8 +702,8 @@ int nested_svm_vmrun(struct kvm_vcpu *vcpu)
} }
/* Copy state save area fields which are handled by VMRUN */ /* Copy state save area fields which are handled by VMRUN */
void svm_copy_vmrun_state(struct vmcb_save_area *from_save, void svm_copy_vmrun_state(struct vmcb_save_area *to_save,
struct vmcb_save_area *to_save) struct vmcb_save_area *from_save)
{ {
to_save->es = from_save->es; to_save->es = from_save->es;
to_save->cs = from_save->cs; to_save->cs = from_save->cs;
@ -722,7 +722,7 @@ void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
to_save->cpl = 0; to_save->cpl = 0;
} }
void nested_svm_vmloadsave(struct vmcb *from_vmcb, struct vmcb *to_vmcb) void svm_copy_vmloadsave_state(struct vmcb *to_vmcb, struct vmcb *from_vmcb)
{ {
to_vmcb->save.fs = from_vmcb->save.fs; to_vmcb->save.fs = from_vmcb->save.fs;
to_vmcb->save.gs = from_vmcb->save.gs; to_vmcb->save.gs = from_vmcb->save.gs;
@ -1385,7 +1385,7 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa; svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa;
svm_copy_vmrun_state(save, &svm->vmcb01.ptr->save); svm_copy_vmrun_state(&svm->vmcb01.ptr->save, save);
nested_load_control_from_vmcb12(svm, ctl); nested_load_control_from_vmcb12(svm, ctl);
svm_switch_vmcb(svm, &svm->nested.vmcb02); svm_switch_vmcb(svm, &svm->nested.vmcb02);

Some files were not shown because too many files have changed in this diff Show More