Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
packages
kernel
linux
Commits
be93c8bb
Commit
be93c8bb
authored
Mar 09, 2019
by
Lorenzo "Palinuro" Faletra
Browse files
Import Upstream version 4.19.20
parent
06bac60e
Changes
1000
Hide whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
20 of 1000+
files are displayed.
Plain diff
Email patch
Documentation/admin-guide/kernel-parameters.txt
View file @
be93c8bb
...
...
@@ -2073,6 +2073,9 @@
off
Disables hypervisor mitigations and doesn't
emit any warnings.
It also drops the swap size and available
RAM limit restriction on both hypervisor and
bare metal.
Default is 'flush'.
...
...
Documentation/admin-guide/l1tf.rst
View file @
be93c8bb
...
...
@@ -405,6 +405,9 @@ time with the option "l1tf=". The valid arguments for this option are:
off Disables hypervisor mitigations and doesn't emit any
warnings.
It also drops the swap size and available RAM limit restrictions
on both hypervisor and bare metal.
============ =============================================================
The default is 'flush'. For details about L1D flushing see :ref:`l1d_flush`.
...
...
@@ -576,7 +579,8 @@ Default mitigations
The kernel default mitigations for vulnerable processors are:
- PTE inversion to protect against malicious user space. This is done
unconditionally and cannot be controlled.
unconditionally and cannot be controlled. The swap storage is limited
to ~16TB.
- L1D conditional flushing on VMENTER when EPT is enabled for
a guest.
...
...
Documentation/filesystems/proc.txt
View file @
be93c8bb
...
...
@@ -496,7 +496,9 @@ manner. The codes are the following:
Note that there is no guarantee that every flag and associated mnemonic will
be present in all further kernel releases. Things get changed, the flags may
be vanished or the reverse -- new added.
be vanished or the reverse -- new added. Interpretation of their meaning
might change in future as well. So each consumer of these flags has to
follow each specific kernel version for the exact semantic.
This file is only present if the CONFIG_MMU kernel configuration option is
enabled.
...
...
Makefile
View file @
be93c8bb
# SPDX-License-Identifier: GPL-2.0
VERSION
=
4
PATCHLEVEL
=
19
SUBLEVEL
=
13
SUBLEVEL
=
20
EXTRAVERSION
=
NAME
=
"People's Front"
...
...
@@ -482,18 +482,18 @@ endif
ifeq
($(cc-name),clang)
ifneq
($(CROSS_COMPILE),)
CLANG_
TARGET
:=
--target
=
$(
notdir
$
(
CROSS_COMPILE:%-
=
%
))
CLANG_
FLAGS
:=
--target
=
$(
notdir
$
(
CROSS_COMPILE:%-
=
%
))
GCC_TOOLCHAIN_DIR
:=
$(
dir
$(
shell
which
$(LD)
))
CLANG_
PREFIX
:
=
--prefix
=
$(GCC_TOOLCHAIN_DIR)
CLANG_
FLAGS
+
=
--prefix
=
$(GCC_TOOLCHAIN_DIR)
GCC_TOOLCHAIN
:=
$(
realpath
$(GCC_TOOLCHAIN_DIR)
/..
)
endif
ifneq
($(GCC_TOOLCHAIN),)
CLANG_
GCC_TC
:
=
--gcc-toolchain
=
$(GCC_TOOLCHAIN)
CLANG_
FLAGS
+
=
--gcc-toolchain
=
$(GCC_TOOLCHAIN)
endif
KBUILD_CFLAGS
+=
$(CLANG_TARGET)
$(CLANG_GCC_TC)
$(CLANG_PREFIX)
KBUILD_
A
FLAGS
+=
$(CLANG_
TARGET)
$(CLANG_GCC_TC)
$(CLANG_PREFIX
)
KBUILD_
C
FLAGS
+=
$(
call
cc-option,
-no-integrated-as
)
KBUILD_AFLAGS
+=
$(
call
cc-option,
-no-integrated-as
)
CLANG_FLAGS
+=
-no-integrated-as
KBUILD_
C
FLAGS
+=
$(CLANG_
FLAGS
)
KBUILD_
A
FLAGS
+=
$(
CLANG_FLAGS
)
export
CLANG_FLAGS
endif
RETPOLINE_CFLAGS_GCC
:=
-mindirect-branch
=
thunk-extern
-mindirect-branch-register
...
...
@@ -954,11 +954,6 @@ ifdef CONFIG_STACK_VALIDATION
ifeq
($(has_libelf),1)
objtool_target
:=
tools/objtool FORCE
else
ifdef
CONFIG_UNWINDER_ORC
$(error
"Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
)
else
$(warning
"Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
)
endif
SKIP_STACK_VALIDATION
:=
1
export
SKIP_STACK_VALIDATION
endif
...
...
@@ -1115,6 +1110,14 @@ uapi-asm-generic:
PHONY
+=
prepare-objtool
prepare-objtool
:
$(objtool_target)
ifeq
($(SKIP_STACK_VALIDATION),1)
ifdef
CONFIG_UNWINDER_ORC
@
echo
"error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
>
&2
@
false
else
@
echo
"warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
>
&2
endif
endif
# Generate some files
# ---------------------------------------------------------------------------
...
...
arch/arc/Kconfig
View file @
be93c8bb
...
...
@@ -26,6 +26,7 @@ config ARC
select GENERIC_IRQ_SHOW
select GENERIC_PCI_IOMAP
select GENERIC_PENDING_IRQ if SMP
select GENERIC_SCHED_CLOCK
select GENERIC_SMP_IDLE_THREAD
select HAVE_ARCH_KGDB
select HAVE_ARCH_TRACEHOOK
...
...
arch/arc/include/asm/perf_event.h
View file @
be93c8bb
...
...
@@ -103,7 +103,8 @@ static const char * const arc_pmu_ev_hw_map[] = {
/* counts condition */
[
PERF_COUNT_HW_INSTRUCTIONS
]
=
"iall"
,
[
PERF_COUNT_HW_BRANCH_INSTRUCTIONS
]
=
"ijmp"
,
/* Excludes ZOL jumps */
/* All jump instructions that are taken */
[
PERF_COUNT_HW_BRANCH_INSTRUCTIONS
]
=
"ijmptak"
,
[
PERF_COUNT_ARC_BPOK
]
=
"bpok"
,
/* NP-NT, PT-T, PNT-NT */
#ifdef CONFIG_ISA_ARCV2
[
PERF_COUNT_HW_BRANCH_MISSES
]
=
"bpmp"
,
...
...
arch/arc/lib/memset-archs.S
View file @
be93c8bb
...
...
@@ -7,11 +7,39 @@
*/
#include <linux/linkage.h>
#include <asm/cache.h>
#undef PREALLOC_NOT_AVAIL
/*
*
The
memset
implementation
below
is
optimized
to
use
prefetchw
and
prealloc
*
instruction
in
case
of
CPU
with
64
B
L1
data
cache
line
(
L1_CACHE_SHIFT
==
6
)
*
If
you
want
to
implement
optimized
memset
for
other
possible
L1
data
cache
*
line
lengths
(
32
B
and
128
B
)
you
should
rewrite
code
carefully
checking
*
we
don
't call any prefetchw/prealloc instruction for L1 cache lines which
*
don
't belongs to memset area.
*/
#if L1_CACHE_SHIFT == 6
.
macro
PREALLOC_INSTR
reg
,
off
prealloc
[
\
reg
,
\
off
]
.
endm
.
macro
PREFETCHW_INSTR
reg
,
off
prefetchw
[
\
reg
,
\
off
]
.
endm
#else
.
macro
PREALLOC_INSTR
.
endm
.
macro
PREFETCHW_INSTR
.
endm
#endif
ENTRY_CFI
(
memset
)
prefetchw
[
r0
]
; Prefetch the write location
PREFETCHW_INSTR
r0
,
0
; Prefetch the
first
write location
mov.f
0
,
r2
;;; if size is zero
jz.d
[
blink
]
...
...
@@ -48,11 +76,8 @@ ENTRY_CFI(memset)
lpnz
@
.
Lset64bytes
;; LOOP START
#ifdef PREALLOC_NOT_AVAIL
prefetchw
[
r3
,
64
]
;Prefetch the next write location
#else
prealloc
[
r3
,
64
]
#endif
PREALLOC_INSTR
r3
,
64
; alloc next line w/o fetching
#ifdef CONFIG_ARC_HAS_LL64
std.ab
r4
,
[
r3
,
8
]
std.ab
r4
,
[
r3
,
8
]
...
...
@@ -85,7 +110,6 @@ ENTRY_CFI(memset)
lsr.f
lp_count
,
r2
,
5
;Last remaining max 124 bytes
lpnz
.
Lset32bytes
;; LOOP START
prefetchw
[
r3
,
32
]
;Prefetch the next write location
#ifdef CONFIG_ARC_HAS_LL64
std.ab
r4
,
[
r3
,
8
]
std.ab
r4
,
[
r3
,
8
]
...
...
arch/arc/mm/init.c
View file @
be93c8bb
...
...
@@ -138,7 +138,8 @@ void __init setup_arch_memory(void)
*/
memblock_add_node
(
low_mem_start
,
low_mem_sz
,
0
);
memblock_reserve
(
low_mem_start
,
__pa
(
_end
)
-
low_mem_start
);
memblock_reserve
(
CONFIG_LINUX_LINK_BASE
,
__pa
(
_end
)
-
CONFIG_LINUX_LINK_BASE
);
#ifdef CONFIG_BLK_DEV_INITRD
if
(
initrd_start
)
...
...
arch/arm/boot/dts/exynos5422-odroidxu3-audio.dtsi
View file @
be93c8bb
...
...
@@ -26,8 +26,7 @@ sound: sound {
"Speakers"
,
"SPKL"
,
"Speakers"
,
"SPKR"
;
assigned
-
clocks
=
<&
i2s0
CLK_I2S_RCLK_SRC
>,
<&
clock
CLK_MOUT_EPLL
>,
assigned
-
clocks
=
<&
clock
CLK_MOUT_EPLL
>,
<&
clock
CLK_MOUT_MAU_EPLL
>,
<&
clock
CLK_MOUT_USER_MAU_EPLL
>,
<&
clock_audss
EXYNOS_MOUT_AUDSS
>,
...
...
@@ -36,8 +35,7 @@ sound: sound {
<&
clock_audss
EXYNOS_DOUT_AUD_BUS
>,
<&
clock_audss
EXYNOS_DOUT_I2S
>;
assigned
-
clock
-
parents
=
<&
clock_audss
EXYNOS_SCLK_I2S
>,
<&
clock
CLK_FOUT_EPLL
>,
assigned
-
clock
-
parents
=
<&
clock
CLK_FOUT_EPLL
>,
<&
clock
CLK_MOUT_EPLL
>,
<&
clock
CLK_MOUT_MAU_EPLL
>,
<&
clock
CLK_MAU_EPLL
>,
...
...
@@ -48,7 +46,6 @@ sound: sound {
<
0
>,
<
0
>,
<
0
>,
<
0
>,
<
196608001
>,
<(
196608002
/
2
)>,
<
196608000
>;
...
...
@@ -84,4 +81,6 @@ max98090: max98090@10 {
&
i2s0
{
status
=
"okay"
;
assigned
-
clocks
=
<&
i2s0
CLK_I2S_RCLK_SRC
>;
assigned
-
clock
-
parents
=
<&
clock_audss
EXYNOS_SCLK_I2S
>;
};
arch/arm/boot/dts/exynos5422-odroidxu4.dts
View file @
be93c8bb
...
...
@@ -33,8 +33,7 @@ sound: sound {
compatible
=
"samsung,odroid-xu3-audio"
;
model
=
"Odroid-XU4"
;
assigned
-
clocks
=
<&
i2s0
CLK_I2S_RCLK_SRC
>,
<&
clock
CLK_MOUT_EPLL
>,
assigned
-
clocks
=
<&
clock
CLK_MOUT_EPLL
>,
<&
clock
CLK_MOUT_MAU_EPLL
>,
<&
clock
CLK_MOUT_USER_MAU_EPLL
>,
<&
clock_audss
EXYNOS_MOUT_AUDSS
>,
...
...
@@ -43,8 +42,7 @@ sound: sound {
<&
clock_audss
EXYNOS_DOUT_AUD_BUS
>,
<&
clock_audss
EXYNOS_DOUT_I2S
>;
assigned
-
clock
-
parents
=
<&
clock_audss
EXYNOS_SCLK_I2S
>,
<&
clock
CLK_FOUT_EPLL
>,
assigned
-
clock
-
parents
=
<&
clock
CLK_FOUT_EPLL
>,
<&
clock
CLK_MOUT_EPLL
>,
<&
clock
CLK_MOUT_MAU_EPLL
>,
<&
clock
CLK_MAU_EPLL
>,
...
...
@@ -55,7 +53,6 @@ sound: sound {
<
0
>,
<
0
>,
<
0
>,
<
0
>,
<
196608001
>,
<(
196608002
/
2
)>,
<
196608000
>;
...
...
@@ -79,6 +76,8 @@ &clock_audss {
&
i2s0
{
status
=
"okay"
;
assigned
-
clocks
=
<&
i2s0
CLK_I2S_RCLK_SRC
>;
assigned
-
clock
-
parents
=
<&
clock_audss
EXYNOS_SCLK_I2S
>;
};
&
pwm
{
...
...
arch/arm/boot/dts/imx7d-nitrogen7.dts
View file @
be93c8bb
...
...
@@ -86,13 +86,17 @@ reg_wlan: regulator-wlan {
compatible
=
"regulator-fixed"
;
regulator
-
min
-
microvolt
=
<
3300000
>;
regulator
-
max
-
microvolt
=
<
3300000
>;
clocks
=
<&
clks
IMX7D_CLKO2_ROOT_DIV
>;
clock
-
names
=
"slow"
;
regulator
-
name
=
"reg_wlan"
;
startup
-
delay
-
us
=
<
70000
>;
gpio
=
<&
gpio4
21
GPIO_ACTIVE_HIGH
>;
enable
-
active
-
high
;
};
usdhc2_pwrseq
:
usdhc2_pwrseq
{
compatible
=
"mmc-pwrseq-simple"
;
clocks
=
<&
clks
IMX7D_CLKO2_ROOT_DIV
>;
clock
-
names
=
"ext_clock"
;
};
};
&
adc1
{
...
...
@@ -375,6 +379,7 @@ &usdhc2 {
bus
-
width
=
<
4
>;
non
-
removable
;
vmmc
-
supply
=
<&
reg_wlan
>;
mmc
-
pwrseq
=
<&
usdhc2_pwrseq
>;
cap
-
power
-
off
-
card
;
keep
-
power
-
in
-
suspend
;
status
=
"okay"
;
...
...
arch/arm/boot/dts/imx7d-pico.dtsi
View file @
be93c8bb
...
...
@@ -100,6 +100,19 @@ reg_vref_1v8: regulator-vref-1v8 {
regulator
-
min
-
microvolt
=
<
1800000
>;
regulator
-
max
-
microvolt
=
<
1800000
>;
};
usdhc2_pwrseq
:
usdhc2_pwrseq
{
compatible
=
"mmc-pwrseq-simple"
;
clocks
=
<&
clks
IMX7D_CLKO2_ROOT_DIV
>;
clock
-
names
=
"ext_clock"
;
};
};
&
clks
{
assigned
-
clocks
=
<&
clks
IMX7D_CLKO2_ROOT_SRC
>,
<&
clks
IMX7D_CLKO2_ROOT_DIV
>;
assigned
-
clock
-
parents
=
<&
clks
IMX7D_CKIL
>;
assigned
-
clock
-
rates
=
<
0
>,
<
32768
>;
};
&
i2c4
{
...
...
@@ -199,12 +212,13 @@ vgen6_reg: vldo4 {
&
usdhc2
{
/*
Wifi
SDIO
*/
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
pinctrl_usdhc2
>;
pinctrl
-
0
=
<&
pinctrl_usdhc2
&
pinctrl_wifi_clk
>;
no
-
1
-
8
-
v
;
non
-
removable
;
keep
-
power
-
in
-
suspend
;
wakeup
-
source
;
vmmc
-
supply
=
<&
reg_ap6212
>;
mmc
-
pwrseq
=
<&
usdhc2_pwrseq
>;
status
=
"okay"
;
};
...
...
@@ -301,6 +315,12 @@ MX7D_PAD_SD3_DATA7__SD3_DATA7 0x5b
};
&
iomuxc_lpsr
{
pinctrl_wifi_clk
:
wificlkgrp
{
fsl
,
pins
=
<
MX7D_PAD_LPSR_GPIO1_IO03__CCM_CLKO2
0x7d
>;
};
pinctrl_wdog
:
wdoggrp
{
fsl
,
pins
=
<
MX7D_PAD_LPSR_GPIO1_IO00__WDOG1_WDOG_B
0x74
...
...
arch/arm/boot/dts/sun8i-a83t-bananapi-m3.dts
View file @
be93c8bb
...
...
@@ -309,8 +309,8 @@ ®_dldo1 {
®_dldo3 {
regulator-always-on;
regulator-min-microvolt = <
25
00000>;
regulator-max-microvolt = <
25
00000>;
regulator-min-microvolt = <
33
00000>;
regulator-max-microvolt = <
33
00000>;
regulator-name = "vcc-pd";
};
...
...
arch/arm/mach-cns3xxx/pcie.c
View file @
be93c8bb
...
...
@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus(struct pci_bus *bus,
}
else
/* remote PCI bus */
base
=
cnspci
->
cfg1_regs
+
((
busno
&
0xf
)
<<
20
);
return
base
+
(
where
&
0xffc
)
+
(
devfn
<<
12
);
return
base
+
where
+
(
devfn
<<
12
);
}
static
int
cns3xxx_pci_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
...
...
arch/arm/mach-imx/cpuidle-imx6sx.c
View file @
be93c8bb
...
...
@@ -110,7 +110,7 @@ int __init imx6sx_cpuidle_init(void)
* except for power up sw2iso which need to be
* larger than LDO ramp up time.
*/
imx_gpc_set_arm_power_up_timing
(
2
,
1
);
imx_gpc_set_arm_power_up_timing
(
0xf
,
1
);
imx_gpc_set_arm_power_down_timing
(
1
,
1
);
return
cpuidle_register
(
&
imx6sx_cpuidle_driver
,
NULL
);
...
...
arch/arm64/Makefile
View file @
be93c8bb
...
...
@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
# for relative relocs, since this leads to better Image compression
# with the relocation offsets always being zero.
LDFLAGS_vmlinux
+=
-pie
-shared
-Bsymbolic
\
LDFLAGS_vmlinux
+=
-shared
-Bsymbolic
-z
notext
-z
norelro
\
$(
call
ld-option,
--no-apply-dynamic-relocs
)
endif
...
...
arch/arm64/boot/dts/marvell/armada-ap806.dtsi
View file @
be93c8bb
...
...
@@ -27,6 +27,23 @@ psci {
method
=
"smc"
;
};
reserved
-
memory
{
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
2
>;
ranges
;
/*
*
This
area
matches
the
mapping
done
with
a
*
mainline
U
-
Boot
,
and
should
be
updated
by
the
*
bootloader
.
*/
psci
-
area
@
4000000
{
reg
=
<
0x0
0x4000000
0x0
0x200000
>;
no
-
map
;
};
};
ap806
{
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
2
>;
...
...
arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts
View file @
be93c8bb
...
...
@@ -17,8 +17,13 @@ / {
model
=
"MediaTek MT7622 RFB1 board"
;
compatible
=
"mediatek,mt7622-rfb1"
,
"mediatek,mt7622"
;
aliases
{
serial0
=
&
uart0
;
};
chosen
{
bootargs
=
"earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n1 swiotlb=512"
;
stdout
-
path
=
"serial0:115200n8"
;
bootargs
=
"earlycon=uart8250,mmio32,0x11002000 swiotlb=512"
;
};
cpus
{
...
...
arch/arm64/include/asm/assembler.h
View file @
be93c8bb
...
...
@@ -378,27 +378,33 @@ alternative_endif
* size: size of the region
* Corrupts: kaddr, size, tmp1, tmp2
*/
.
macro
__dcache_op_workaround_clean_cache
,
op
,
kaddr
alternative_if_not
ARM64_WORKAROUND_CLEAN_CACHE
dc
\
op
,
\
kaddr
alternative_else
dc
civac
,
\
kaddr
alternative_endif
.
endm
.
macro
dcache_by_line_op
op
,
domain
,
kaddr
,
size
,
tmp1
,
tmp2
dcache_line_size
\
tmp1
,
\
tmp2
add
\
size
,
\
kaddr
,
\
size
sub
\
tmp2
,
\
tmp1
,
#
1
bic
\
kaddr
,
\
kaddr
,
\
tmp2
9998
:
.
if
(
\
op
==
cvau
||
\
op
==
cvac
)
alternative_if_not
ARM64_WORKAROUND_CLEAN_CACHE
dc
\
op
,
\
kaddr
alternative_else
dc
civac
,
\
kaddr
alternative_endif
.
elseif
(
\
op
==
cvap
)
alternative_if
ARM64_HAS_DCPOP
sys
3
,
c7
,
c12
,
1
,
\
kaddr
// dc cvap
alternative_else
dc
cvac
,
\
kaddr
alternative_endif
.
ifc
\
op
,
cvau
__dcache_op_workaround_clean_cache
\
op
,
\
kaddr
.
else
.
ifc
\
op
,
cvac
__dcache_op_workaround_clean_cache
\
op
,
\
kaddr
.
else
.
ifc
\
op
,
cvap
sys
3
,
c7
,
c12
,
1
,
\
kaddr
// dc cvap
.
else
dc
\
op
,
\
kaddr
.
endif
.
endif
.
endif
add
\
kaddr
,
\
kaddr
,
\
tmp1
cmp
\
kaddr
,
\
size
b
.
lo
9998
b
...
...
arch/arm64/include/asm/kvm_arm.h
View file @
be93c8bb
...
...
@@ -24,6 +24,8 @@
/* Hyp Configuration Register (HCR) bits */
#define HCR_FWB (UL(1) << 46)
#define HCR_API (UL(1) << 41)
#define HCR_APK (UL(1) << 40)
#define HCR_TEA (UL(1) << 37)
#define HCR_TERR (UL(1) << 36)
#define HCR_TLOR (UL(1) << 35)
...
...
@@ -87,6 +89,7 @@
HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \
HCR_FMO | HCR_IMO)
#define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF)
#define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK)
#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
/* TCR_EL2 Registers bits */
...
...
@@ -104,7 +107,7 @@
TCR_EL2_ORGN0_MASK | TCR_EL2_IRGN0_MASK | TCR_EL2_T0SZ_MASK)
/* VTCR_EL2 Registers bits */
#define VTCR_EL2_RES1 (1 << 31)
#define VTCR_EL2_RES1 (1
U
<< 31)
#define VTCR_EL2_HD (1 << 22)
#define VTCR_EL2_HA (1 << 21)
#define VTCR_EL2_PS_MASK TCR_EL2_PS_MASK
...
...
Prev
1
2
3
4
5
…
50
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment