Skip to content
GitLab
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
9941e245
Commit
9941e245
authored
Apr 13, 2021
by
Lorenzo "Palinuro" Faletra
Browse files
Import Upstream version 5.10.28
parent
4e026225
Pipeline
#2889
failed with stages
Changes
545
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Documentation/scsi/libsas.rst
View file @
9941e245
...
...
@@ -189,12 +189,10 @@ num_phys
The event interface::
/* LLDD calls these to notify the class of an event. */
void (*notify_port_event)(struct sas_phy *, enum port_event);
void (*notify_phy_event)(struct sas_phy *, enum phy_event);
When sas_register_ha() returns, those are set and can be
called by the LLDD to notify the SAS layer of such events
the SAS layer.
void sas_notify_port_event(struct sas_phy *, enum port_event);
void sas_notify_phy_event(struct sas_phy *, enum phy_event);
void sas_notify_port_event_gfp(struct sas_phy *, enum port_event, gfp_t);
void sas_notify_phy_event_gfp(struct sas_phy *, enum phy_event, gfp_t);
The port notification::
...
...
Documentation/virt/kvm/api.rst
View file @
9941e245
...
...
@@ -4810,8 +4810,10 @@ If an MSR access is not permitted through the filtering, it generates a
allows user space to deflect and potentially handle various MSR accesses
into user space.
If a vCPU is in running state while this ioctl is invoked, the vCPU may
experience inconsistent filtering behavior on MSR accesses.
Note, invoking this ioctl with a vCPU is running is inherently racy. However,
KVM does guarantee that vCPUs will see either the previous filter or the new
filter, e.g. MSRs with identical settings in both the old and new filter will
have deterministic behavior.
5. The kvm_run structure
...
...
MAINTAINERS
View file @
9941e245
...
...
@@ -1155,7 +1155,7 @@ M: Joel Fernandes <joel@joelfernandes.org>
M: Christian Brauner <christian@brauner.io>
M: Hridya Valsaraju <hridya@google.com>
M: Suren Baghdasaryan <surenb@google.com>
L:
devel@driverdev.osuos
l.org
L:
linux-kernel@vger.kerne
l.org
S: Supported
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
F: drivers/android/
...
...
@@ -8001,7 +8001,6 @@ F: drivers/crypto/hisilicon/sec2/sec_main.c
HISILICON STAGING DRIVERS FOR HIKEY 960/970
M: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
L: devel@driverdev.osuosl.org
S: Maintained
F: drivers/staging/hikey9xx/
...
...
@@ -16665,7 +16664,7 @@ F: drivers/staging/vt665?/
STAGING SUBSYSTEM
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
L:
devel@driverdev.osuosl.org
L:
linux-staging@lists.linux.dev
S: Supported
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
F: drivers/staging/
...
...
@@ -18705,7 +18704,7 @@ VME SUBSYSTEM
M: Martyn Welch <martyn@welchs.me.uk>
M: Manohar Vanga <manohar.vanga@gmail.com>
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
L:
devel@driverdev.osuos
l.org
L:
linux-kernel@vger.kerne
l.org
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
F: Documentation/driver-api/vme.rst
...
...
Makefile
View file @
9941e245
# SPDX-License-Identifier: GPL-2.0
VERSION
=
5
PATCHLEVEL
=
10
SUBLEVEL
=
2
4
SUBLEVEL
=
2
8
EXTRAVERSION
=
NAME
=
Dare mighty things
...
...
@@ -265,7 +265,8 @@ no-dot-config-targets := $(clean-targets) \
$(version_h)
headers headers_% archheaders archscripts
\
%asm-generic kernelversion %src-pkg dt_binding_check
\
outputmakefile
no-sync-config-targets
:=
$
(
no-dot-config-targets
)
%install kernelrelease
no-sync-config-targets
:=
$
(
no-dot-config-targets
)
%install kernelrelease
\
image_name
single-targets
:=
%.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
config-build
:=
...
...
@@ -1249,15 +1250,17 @@ endef
define
filechk_version.h
if
[
$(SUBLEVEL)
-gt
255
];
then
\
echo
\
#define LINUX_VERSION_CODE $(shell \
expr
$(VERSION)
\*
65536
+
0
$(PATCHLEVEL)
\*
256
+
255);
\
expr
$(VERSION)
\*
65536
+
$(PATCHLEVEL)
\*
256
+
255);
\
else
\
echo
\
#define LINUX_VERSION_CODE $(shell \
expr
$(VERSION)
\*
65536
+
0
$(PATCHLEVEL)
\*
256
+
$(SUBLEVEL));
\
expr
$(VERSION)
\*
65536
+
$(PATCHLEVEL)
\*
256
+
$(SUBLEVEL));
\
fi;
\
echo
'
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \
((c) > 255 ? 255
:
(c)))'
endef
$(version_h)
:
PATCHLEVEL := $(if $(PATCHLEVEL)
,
$(PATCHLEVEL)
,
0)
$(version_h)
:
SUBLEVEL := $(if $(SUBLEVEL)
,
$(SUBLEVEL)
,
0)
$(version_h)
:
FORCE
$(
call
filechk,version.h
)
$(Q)
rm
-f
$(old_version_h)
...
...
arch/arm/boot/dts/at91-sam9x60ek.dts
View file @
9941e245
...
...
@@ -334,14 +334,6 @@ ethernet-phy@0 {
};
&
pinctrl
{
atmel
,
mux
-
mask
=
<
/*
A
B
C
*/
0xFFFFFE7F
0xC0E0397F
0xEF00019D
/*
pioA
*/
0x03FFFFFF
0x02FC7E68
0x00780000
/*
pioB
*/
0xffffffff
0xF83FFFFF
0xB800F3FC
/*
pioC
*/
0x003FFFFF
0x003F8000
0x00000000
/*
pioD
*/
>;
adc
{
pinctrl_adc_default
:
adc_default
{
atmel
,
pins
=
<
AT91_PIOB
15
AT91_PERIPH_A
AT91_PINCTRL_NONE
>;
...
...
arch/arm/boot/dts/at91-sama5d27_som1.dtsi
View file @
9941e245
...
...
@@ -84,8 +84,8 @@ macb0: ethernet@f8008000 {
pinctrl
-
0
=
<&
pinctrl_macb0_default
>;
phy
-
mode
=
"rmii"
;
ethernet
-
phy
@
0
{
reg
=
<
0x
0
>;
ethernet
-
phy
@
7
{
reg
=
<
0x
7
>;
interrupt
-
parent
=
<&
pioA
>;
interrupts
=
<
PIN_PD31
IRQ_TYPE_LEVEL_LOW
>;
pinctrl
-
names
=
"default"
;
...
...
arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts
View file @
9941e245
...
...
@@ -14,5 +14,6 @@ / {
};
&
gpmi
{
fsl
,
use
-
minimum
-
ecc
;
status
=
"okay"
;
};
arch/arm/boot/dts/sam9x60.dtsi
View file @
9941e245
...
...
@@ -606,6 +606,15 @@ pinctrl: pinctrl@fffff400 {
compatible
=
"microchip,sam9x60-pinctrl"
,
"atmel,at91sam9x5-pinctrl"
,
"atmel,at91rm9200-pinctrl"
,
"simple-bus"
;
ranges
=
<
0xfffff400
0xfffff400
0x800
>;
/*
mux
-
mask
corresponding
to
sam9x60
SoC
in
TFBGA228L
package
*/
atmel
,
mux
-
mask
=
<
/*
A
B
C
*/
0xffffffff
0xffe03fff
0xef00019d
/*
pioA
*/
0x03ffffff
0x02fc7e7f
0x00780000
/*
pioB
*/
0xffffffff
0xffffffff
0xf83fffff
/*
pioC
*/
0x003fffff
0x003f8000
0x00000000
/*
pioD
*/
>;
pioA
:
gpio
@
fffff400
{
compatible
=
"microchip,sam9x60-gpio"
,
"atmel,at91sam9x5-gpio"
,
"atmel,at91rm9200-gpio"
;
reg
=
<
0xfffff400
0x200
>;
...
...
arch/arm/mach-omap2/sr_device.c
View file @
9941e245
...
...
@@ -88,34 +88,26 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
extern
struct
omap_sr_data
omap_sr_pdata
[];
static
int
__init
sr_
dev_init
(
struct
omap_hwmod
*
oh
,
void
*
user
)
static
int
__init
sr_
init_by_name
(
const
char
*
name
,
const
char
*
voltdm
)
{
struct
omap_sr_data
*
sr_data
=
NULL
;
struct
omap_volt_data
*
volt_data
;
struct
omap_smartreflex_dev_attr
*
sr_dev_attr
;
static
int
i
;
if
(
!
strncmp
(
oh
->
name
,
"smartreflex_mpu_iva"
,
20
)
||
!
strncmp
(
oh
->
name
,
"smartreflex_mpu"
,
16
))
if
(
!
strncmp
(
name
,
"smartreflex_mpu_iva"
,
20
)
||
!
strncmp
(
name
,
"smartreflex_mpu"
,
16
))
sr_data
=
&
omap_sr_pdata
[
OMAP_SR_MPU
];
else
if
(
!
strncmp
(
oh
->
name
,
"smartreflex_core"
,
17
))
else
if
(
!
strncmp
(
name
,
"smartreflex_core"
,
17
))
sr_data
=
&
omap_sr_pdata
[
OMAP_SR_CORE
];
else
if
(
!
strncmp
(
oh
->
name
,
"smartreflex_iva"
,
16
))
else
if
(
!
strncmp
(
name
,
"smartreflex_iva"
,
16
))
sr_data
=
&
omap_sr_pdata
[
OMAP_SR_IVA
];
if
(
!
sr_data
)
{
pr_err
(
"%s: Unknown instance %s
\n
"
,
__func__
,
oh
->
name
);
pr_err
(
"%s: Unknown instance %s
\n
"
,
__func__
,
name
);
return
-
EINVAL
;
}
sr_dev_attr
=
(
struct
omap_smartreflex_dev_attr
*
)
oh
->
dev_attr
;
if
(
!
sr_dev_attr
||
!
sr_dev_attr
->
sensor_voltdm_name
)
{
pr_err
(
"%s: No voltage domain specified for %s. Cannot initialize
\n
"
,
__func__
,
oh
->
name
);
goto
exit
;
}
sr_data
->
name
=
oh
->
name
;
sr_data
->
name
=
name
;
if
(
cpu_is_omap343x
())
sr_data
->
ip_type
=
1
;
else
...
...
@@ -136,10 +128,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
}
}
sr_data
->
voltdm
=
voltdm_lookup
(
sr_dev_attr
->
sensor_
voltdm
_name
);
sr_data
->
voltdm
=
voltdm_lookup
(
voltdm
);
if
(
!
sr_data
->
voltdm
)
{
pr_err
(
"%s: Unable to get voltage domain pointer for VDD %s
\n
"
,
__func__
,
sr_dev_attr
->
sensor_
voltdm
_name
);
__func__
,
voltdm
);
goto
exit
;
}
...
...
@@ -160,6 +152,20 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
return
0
;
}
static
int
__init
sr_dev_init
(
struct
omap_hwmod
*
oh
,
void
*
user
)
{
struct
omap_smartreflex_dev_attr
*
sr_dev_attr
;
sr_dev_attr
=
(
struct
omap_smartreflex_dev_attr
*
)
oh
->
dev_attr
;
if
(
!
sr_dev_attr
||
!
sr_dev_attr
->
sensor_voltdm_name
)
{
pr_err
(
"%s: No voltage domain specified for %s. Cannot initialize
\n
"
,
__func__
,
oh
->
name
);
return
0
;
}
return
sr_init_by_name
(
oh
->
name
,
sr_dev_attr
->
sensor_voltdm_name
);
}
/*
* API to be called from board files to enable smartreflex
* autocompensation at init.
...
...
@@ -169,7 +175,42 @@ void __init omap_enable_smartreflex_on_init(void)
sr_enable_on_init
=
true
;
}
static
const
char
*
const
omap4_sr_instances
[]
=
{
"mpu"
,
"iva"
,
"core"
,
};
static
const
char
*
const
dra7_sr_instances
[]
=
{
"mpu"
,
"core"
,
};
int
__init
omap_devinit_smartreflex
(
void
)
{
const
char
*
const
*
sr_inst
;
int
i
,
nr_sr
=
0
;
if
(
soc_is_omap44xx
())
{
sr_inst
=
omap4_sr_instances
;
nr_sr
=
ARRAY_SIZE
(
omap4_sr_instances
);
}
else
if
(
soc_is_dra7xx
())
{
sr_inst
=
dra7_sr_instances
;
nr_sr
=
ARRAY_SIZE
(
dra7_sr_instances
);
}
if
(
nr_sr
)
{
const
char
*
name
,
*
voltdm
;
for
(
i
=
0
;
i
<
nr_sr
;
i
++
)
{
name
=
kasprintf
(
GFP_KERNEL
,
"smartreflex_%s"
,
sr_inst
[
i
]);
voltdm
=
sr_inst
[
i
];
sr_init_by_name
(
name
,
voltdm
);
}
return
0
;
}
return
omap_hwmod_for_each_by_class
(
"smartreflex"
,
sr_dev_init
,
NULL
);
}
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
View file @
9941e245
...
...
@@ -192,6 +192,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
dma-coherent;
sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring",
...
...
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi
View file @
9941e245
...
...
@@ -322,6 +322,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <0 75 0x4>;
dma-coherent;
sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring",
...
...
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
View file @
9941e245
...
...
@@ -325,6 +325,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
dma-coherent;
sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring",
...
...
arch/arm64/kernel/crash_dump.c
View file @
9941e245
...
...
@@ -64,5 +64,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
ssize_t
elfcorehdr_read
(
char
*
buf
,
size_t
count
,
u64
*
ppos
)
{
memcpy
(
buf
,
phys_to_virt
((
phys_addr_t
)
*
ppos
),
count
);
*
ppos
+=
count
;
return
count
;
}
arch/arm64/kernel/stacktrace.c
View file @
9941e245
...
...
@@ -199,8 +199,9 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)
#ifdef CONFIG_STACKTRACE
void
arch_stack_walk
(
stack_trace_consume_fn
consume_entry
,
void
*
cookie
,
struct
task_struct
*
task
,
struct
pt_regs
*
regs
)
noinline
void
arch_stack_walk
(
stack_trace_consume_fn
consume_entry
,
void
*
cookie
,
struct
task_struct
*
task
,
struct
pt_regs
*
regs
)
{
struct
stackframe
frame
;
...
...
@@ -208,8 +209,8 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
start_backtrace
(
&
frame
,
regs
->
regs
[
29
],
regs
->
pc
);
else
if
(
task
==
current
)
start_backtrace
(
&
frame
,
(
unsigned
long
)
__builtin_frame_address
(
0
),
(
unsigned
long
)
arch_stack_walk
);
(
unsigned
long
)
__builtin_frame_address
(
1
),
(
unsigned
long
)
__builtin_return_address
(
0
)
);
else
start_backtrace
(
&
frame
,
thread_saved_fp
(
task
),
thread_saved_pc
(
task
));
...
...
arch/arm64/mm/mmu.c
View file @
9941e245
...
...
@@ -1447,14 +1447,30 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
static
bool
inside_linear_region
(
u64
start
,
u64
size
)
{
u64
start_linear_pa
=
__pa
(
_PAGE_OFFSET
(
vabits_actual
));
u64
end_linear_pa
=
__pa
(
PAGE_END
-
1
);
if
(
IS_ENABLED
(
CONFIG_RANDOMIZE_BASE
))
{
/*
* Check for a wrap, it is possible because of randomized linear
* mapping the start physical address is actually bigger than
* the end physical address. In this case set start to zero
* because [0, end_linear_pa] range must still be able to cover
* all addressable physical addresses.
*/
if
(
start_linear_pa
>
end_linear_pa
)
start_linear_pa
=
0
;
}
WARN_ON
(
start_linear_pa
>
end_linear_pa
);
/*
* Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
* accommodating both its ends but excluding PAGE_END. Max physical
* range which can be mapped inside this linear mapping range, must
* also be derived from its end points.
*/
return
start
>=
__pa
(
_PAGE_OFFSET
(
vabits_actual
))
&&
(
start
+
size
-
1
)
<=
__pa
(
PAGE_END
-
1
);
return
start
>=
start_linear_pa
&&
(
start
+
size
-
1
)
<=
end_linear_pa
;
}
int
arch_add_memory
(
int
nid
,
u64
start
,
u64
size
,
...
...
arch/ia64/include/asm/syscall.h
View file @
9941e245
...
...
@@ -32,7 +32,7 @@ static inline void syscall_rollback(struct task_struct *task,
static
inline
long
syscall_get_error
(
struct
task_struct
*
task
,
struct
pt_regs
*
regs
)
{
return
regs
->
r10
==
-
1
?
regs
->
r8
:
0
;
return
regs
->
r10
==
-
1
?
-
regs
->
r8
:
0
;
}
static
inline
long
syscall_get_return_value
(
struct
task_struct
*
task
,
...
...
arch/ia64/kernel/ptrace.c
View file @
9941e245
...
...
@@ -2010,27 +2010,39 @@ static void syscall_get_set_args_cb(struct unw_frame_info *info, void *data)
{
struct
syscall_get_set_args
*
args
=
data
;
struct
pt_regs
*
pt
=
args
->
regs
;
unsigned
long
*
krbs
,
cfm
,
ndirty
;
unsigned
long
*
krbs
,
cfm
,
ndirty
,
nlocals
,
nouts
;
int
i
,
count
;
if
(
unw_unwind_to_user
(
info
)
<
0
)
return
;
/*
* We get here via a few paths:
* - break instruction: cfm is shared with caller.
* syscall args are in out= regs, locals are non-empty.
* - epsinstruction: cfm is set by br.call
* locals don't exist.
*
* For both cases argguments are reachable in cfm.sof - cfm.sol.
* CFM: [ ... | sor: 17..14 | sol : 13..7 | sof : 6..0 ]
*/
cfm
=
pt
->
cr_ifs
;
nlocals
=
(
cfm
>>
7
)
&
0x7f
;
/* aka sol */
nouts
=
(
cfm
&
0x7f
)
-
nlocals
;
/* aka sof - sol */
krbs
=
(
unsigned
long
*
)
info
->
task
+
IA64_RBS_OFFSET
/
8
;
ndirty
=
ia64_rse_num_regs
(
krbs
,
krbs
+
(
pt
->
loadrs
>>
19
));
count
=
0
;
if
(
in_syscall
(
pt
))
count
=
min_t
(
int
,
args
->
n
,
cfm
&
0x7f
);
count
=
min_t
(
int
,
args
->
n
,
nouts
);
/* Iterate over outs. */
for
(
i
=
0
;
i
<
count
;
i
++
)
{
int
j
=
ndirty
+
nlocals
+
i
+
args
->
i
;
if
(
args
->
rw
)
*
ia64_rse_skip_regs
(
krbs
,
ndirty
+
i
+
args
->
i
)
=
args
->
args
[
i
];
*
ia64_rse_skip_regs
(
krbs
,
j
)
=
args
->
args
[
i
];
else
args
->
args
[
i
]
=
*
ia64_rse_skip_regs
(
krbs
,
ndirty
+
i
+
args
->
i
);
args
->
args
[
i
]
=
*
ia64_rse_skip_regs
(
krbs
,
j
);
}
if
(
!
args
->
rw
)
{
...
...
arch/mips/boot/compressed/Makefile
View file @
9941e245
...
...
@@ -36,6 +36,7 @@ KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
KCOV_INSTRUMENT
:=
n
UBSAN_SANITIZE
:=
n
# decompressor objects (linked with vmlinuz)
vmlinuzobjs-y
:=
$(obj)
/head.o
$(obj)
/decompress.o
$(obj)
/string.o
...
...
arch/powerpc/include/asm/cpu_has_feature.h
View file @
9941e245
...
...
@@ -7,7 +7,7 @@
#include
<linux/bug.h>
#include
<asm/cputable.h>
static
inline
bool
early_cpu_has_feature
(
unsigned
long
feature
)
static
__always_
inline
bool
early_cpu_has_feature
(
unsigned
long
feature
)
{
return
!!
((
CPU_FTRS_ALWAYS
&
feature
)
||
(
CPU_FTRS_POSSIBLE
&
cur_cpu_spec
->
cpu_features
&
feature
));
...
...
@@ -46,7 +46,7 @@ static __always_inline bool cpu_has_feature(unsigned long feature)
return
static_branch_likely
(
&
cpu_feature_keys
[
i
]);
}
#else
static
inline
bool
cpu_has_feature
(
unsigned
long
feature
)
static
__always_
inline
bool
cpu_has_feature
(
unsigned
long
feature
)
{
return
early_cpu_has_feature
(
feature
);
}
...
...
arch/powerpc/include/asm/dcr-native.h
View file @
9941e245
...
...
@@ -53,8 +53,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)
#define mfdcr(rn) \
({unsigned int rval; \
if (__builtin_constant_p(rn) && rn < 1024) \
asm volatile("mfdcr %0,
" __stringify(rn
) \
: "
=r
" (r
val
)); \
asm volatile("mfdcr %0,
%1" : "=r" (rval
) \
: "
n
" (r
n
)); \
else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \
rval = mfdcrx(rn); \
else \
...
...
@@ -64,8 +64,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)
#define mtdcr(rn, v) \
do { \
if (__builtin_constant_p(rn) && rn < 1024) \
asm volatile("mtdcr
" __stringify(rn) ",%0"
\
: : "r" (v));
\
asm volatile("mtdcr
%0, %1"
\
: :
"n" (rn),
"r" (v)); \
else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \
mtdcrx(rn, v); \
else \
...
...
Prev
1
2
3
4
5
…
28
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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