Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
0202fe1d
Commit
0202fe1d
authored
22 years ago
by
Daniel Jacobowitz
Browse files
Options
Browse Files
Download
Plain Diff
Merge nevyn.them.org:/nevyn/big/kernel/test/linux-2.5-trace1
into nevyn.them.org:/nevyn/big/kernel/test/linux-2.5-trace2
parents
d4a1dada
27f089e8
No related merge requests found
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
23 additions
and
14 deletions
+23
-14
arch/alpha/kernel/asm-offsets.c
arch/alpha/kernel/asm-offsets.c
+1
-0
arch/alpha/kernel/entry.S
arch/alpha/kernel/entry.S
+1
-1
arch/arm/kernel/process.c
arch/arm/kernel/process.c
+1
-1
arch/cris/kernel/entry.S
arch/cris/kernel/entry.S
+1
-0
arch/cris/kernel/entryoffsets.c
arch/cris/kernel/entryoffsets.c
+1
-0
arch/i386/kernel/process.c
arch/i386/kernel/process.c
+1
-1
arch/ia64/kernel/process.c
arch/ia64/kernel/process.c
+1
-1
arch/m68k/kernel/process.c
arch/m68k/kernel/process.c
+1
-1
arch/mips/kernel/process.c
arch/mips/kernel/process.c
+1
-1
arch/mips64/kernel/process.c
arch/mips64/kernel/process.c
+1
-1
arch/parisc/kernel/entry.S
arch/parisc/kernel/entry.S
+3
-1
arch/ppc/kernel/misc.S
arch/ppc/kernel/misc.S
+1
-0
arch/ppc64/kernel/asm-offsets.c
arch/ppc64/kernel/asm-offsets.c
+1
-0
arch/ppc64/kernel/misc.S
arch/ppc64/kernel/misc.S
+1
-0
arch/s390/kernel/process.c
arch/s390/kernel/process.c
+1
-1
arch/s390x/kernel/process.c
arch/s390x/kernel/process.c
+1
-1
arch/sh/kernel/process.c
arch/sh/kernel/process.c
+1
-1
arch/sparc/kernel/process.c
arch/sparc/kernel/process.c
+1
-1
arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c
+1
-1
arch/x86_64/kernel/process.c
arch/x86_64/kernel/process.c
+1
-1
include/linux/sched.h
include/linux/sched.h
+1
-0
No files found.
arch/alpha/kernel/asm-offsets.c
View file @
0202fe1d
...
@@ -22,6 +22,7 @@ void foo(void)
...
@@ -22,6 +22,7 @@ void foo(void)
BLANK
();
BLANK
();
DEFINE
(
PT_PTRACED
,
PT_PTRACED
);
DEFINE
(
PT_PTRACED
,
PT_PTRACED
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_UNTRACED
,
CLONE_UNTRACED
);
DEFINE
(
SIGCHLD
,
SIGCHLD
);
DEFINE
(
SIGCHLD
,
SIGCHLD
);
BLANK
();
BLANK
();
DEFINE
(
HAE_CACHE
,
offsetof
(
struct
alpha_machine_vector
,
hae_cache
));
DEFINE
(
HAE_CACHE
,
offsetof
(
struct
alpha_machine_vector
,
hae_cache
));
...
...
This diff is collapsed.
Click to expand it.
arch/alpha/kernel/entry.S
View file @
0202fe1d
...
@@ -212,7 +212,7 @@ kernel_thread:
...
@@ -212,7 +212,7 @@ kernel_thread:
stq
$
2
,
152
(
$
30
)
/*
HAE
*/
stq
$
2
,
152
(
$
30
)
/*
HAE
*/
/
*
Shuffle
FLAGS
to
the
front
; add CLONE_VM. */
/
*
Shuffle
FLAGS
to
the
front
; add CLONE_VM. */
ldi
$
1
,
CLONE_VM
ldi
$
1
,
CLONE_VM
|
CLONE_UNTRACED
or
$
18
,
$
1
,
$
16
or
$
18
,
$
1
,
$
16
bsr
$
26
,
sys_clone
bsr
$
26
,
sys_clone
...
...
This diff is collapsed.
Click to expand it.
arch/arm/kernel/process.c
View file @
0202fe1d
...
@@ -403,7 +403,7 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
...
@@ -403,7 +403,7 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
b sys_exit
\n
\
b sys_exit
\n
\
1: "
1: "
:
"=r"
(
__ret
)
:
"=r"
(
__ret
)
:
"Ir"
(
flags
),
"
I"
(
CLONE_VM
),
"r"
(
fn
),
"r"
(
arg
)
:
"Ir"
(
flags
),
"
r"
(
CLONE_VM
|
CLONE_UNTRACED
),
"r"
(
fn
),
"r"
(
arg
)
:
"r0"
,
"r1"
,
"lr"
);
:
"r0"
,
"r1"
,
"lr"
);
return
__ret
;
return
__ret
;
}
}
...
...
This diff is collapsed.
Click to expand it.
arch/cris/kernel/entry.S
View file @
0202fe1d
...
@@ -748,6 +748,7 @@ kernel_thread:
...
@@ -748,6 +748,7 @@ kernel_thread:
/
*
r11
is
argument
2
to
clone
,
the
flags
*/
/
*
r11
is
argument
2
to
clone
,
the
flags
*/
move.d
$r12
,
$r11
move.d
$r12
,
$r11
or.w
LCLONE_VM
,
$r11
or.w
LCLONE_VM
,
$r11
or.w
LCLONE_UNTRACED
,
$r11
/
*
Save
FN
for
later
.
*/
/
*
Save
FN
for
later
.
*/
move.d
$r10
,
$r12
move.d
$r10
,
$r12
...
...
This diff is collapsed.
Click to expand it.
arch/cris/kernel/entryoffsets.c
View file @
0202fe1d
...
@@ -57,5 +57,6 @@ OF (LTHREAD_DCCR, struct thread_struct, dccr)
...
@@ -57,5 +57,6 @@ OF (LTHREAD_DCCR, struct thread_struct, dccr)
/* linux/sched.h values - doesn't have an #ifdef __ASSEMBLY__ for these. */
/* linux/sched.h values - doesn't have an #ifdef __ASSEMBLY__ for these. */
VAL
(
LCLONE_VM
,
CLONE_VM
)
VAL
(
LCLONE_VM
,
CLONE_VM
)
VAL
(
LCLONE_UNTRACED
,
CLONE_UNTRACED
)
__asm__
(
".endif"
);
__asm__
(
".endif"
);
This diff is collapsed.
Click to expand it.
arch/i386/kernel/process.c
View file @
0202fe1d
...
@@ -224,7 +224,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -224,7 +224,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
regs
.
eflags
=
0x286
;
regs
.
eflags
=
0x286
;
/* Ok, create the new process.. */
/* Ok, create the new process.. */
p
=
do_fork
(
flags
|
CLONE_VM
,
0
,
&
regs
,
0
,
NULL
);
p
=
do_fork
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
,
0
,
&
regs
,
0
,
NULL
);
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
}
}
...
...
This diff is collapsed.
Click to expand it.
arch/ia64/kernel/process.c
View file @
0202fe1d
...
@@ -516,7 +516,7 @@ kernel_thread (int (*fn)(void *), void *arg, unsigned long flags)
...
@@ -516,7 +516,7 @@ kernel_thread (int (*fn)(void *), void *arg, unsigned long flags)
struct
task_struct
*
parent
=
current
;
struct
task_struct
*
parent
=
current
;
int
result
,
tid
;
int
result
,
tid
;
tid
=
clone
(
flags
|
CLONE_VM
,
0
);
tid
=
clone
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
,
0
);
if
(
parent
!=
current
)
{
if
(
parent
!=
current
)
{
result
=
(
*
fn
)(
arg
);
result
=
(
*
fn
)(
arg
);
_exit
(
result
);
_exit
(
result
);
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/kernel/process.c
View file @
0202fe1d
...
@@ -152,7 +152,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -152,7 +152,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
{
register
long
retval
__asm__
(
"d0"
);
register
long
retval
__asm__
(
"d0"
);
register
long
clone_arg
__asm__
(
"d1"
)
=
flags
|
CLONE_VM
;
register
long
clone_arg
__asm__
(
"d1"
)
=
flags
|
CLONE_VM
|
CLONE_UNTRACED
;
retval
=
__NR_clone
;
retval
=
__NR_clone
;
__asm__
__volatile__
__asm__
__volatile__
...
...
This diff is collapsed.
Click to expand it.
arch/mips/kernel/process.c
View file @
0202fe1d
...
@@ -176,7 +176,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -176,7 +176,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
:
"=r"
(
retval
)
:
"=r"
(
retval
)
:
"i"
(
__NR_clone
),
"i"
(
__NR_exit
),
:
"i"
(
__NR_clone
),
"i"
(
__NR_exit
),
"r"
(
arg
),
"r"
(
fn
),
"r"
(
arg
),
"r"
(
fn
),
"r"
(
flags
|
CLONE_VM
)
"r"
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
)
/*
/*
* The called subroutine might have destroyed any of the
* The called subroutine might have destroyed any of the
* at, result, argument or temporary registers ...
* at, result, argument or temporary registers ...
...
...
This diff is collapsed.
Click to expand it.
arch/mips64/kernel/process.c
View file @
0202fe1d
...
@@ -167,7 +167,7 @@ int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
...
@@ -167,7 +167,7 @@ int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
"1:
\t
move
\t
%0, $2"
"1:
\t
move
\t
%0, $2"
:
"=r"
(
retval
)
:
"=r"
(
retval
)
:
"i"
(
__NR_clone
),
"i"
(
__NR_exit
),
"r"
(
arg
),
"r"
(
fn
),
:
"i"
(
__NR_clone
),
"i"
(
__NR_exit
),
"r"
(
arg
),
"r"
(
fn
),
"r"
(
flags
|
CLONE_VM
)
"r"
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
)
/* The called subroutine might have destroyed any of the
/* The called subroutine might have destroyed any of the
* at, result, argument or temporary registers ... */
* at, result, argument or temporary registers ... */
...
...
This diff is collapsed.
Click to expand it.
arch/parisc/kernel/entry.S
View file @
0202fe1d
...
@@ -515,6 +515,7 @@ fault_vector_11:
...
@@ -515,6 +515,7 @@ fault_vector_11:
*/
*/
#define CLONE_VM 0x100 /* Must agree with <linux/sched.h> */
#define CLONE_VM 0x100 /* Must agree with <linux/sched.h> */
#define CLONE_UNTRACED 0x00800000
.
export
__kernel_thread
,
code
.
export
__kernel_thread
,
code
.
import
do_fork
.
import
do_fork
...
@@ -531,7 +532,8 @@ __kernel_thread:
...
@@ -531,7 +532,8 @@ __kernel_thread:
#endif
#endif
STREG
%
r26
,
PT_GR26
(%
r1
)
/*
Store
function
&
argument
for
child
*/
STREG
%
r26
,
PT_GR26
(%
r1
)
/*
Store
function
&
argument
for
child
*/
STREG
%
r25
,
PT_GR25
(%
r1
)
STREG
%
r25
,
PT_GR25
(%
r1
)
ldo
CLONE_VM
(%
r0
),
%
r26
/*
Force
CLONE_VM
since
only
init_mm
*/
ldil
L
%
CLONE_UNTRACED
,
%
r26
ldo
CLONE_VM
(%
r26
),
%
r26
/*
Force
CLONE_VM
since
only
init_mm
*/
or
%
r26
,
%
r24
,
%
r26
/*
will
have
kernel
mappings
.
*/
or
%
r26
,
%
r24
,
%
r26
/*
will
have
kernel
mappings
.
*/
copy
%
r0
,
%
r25
copy
%
r0
,
%
r25
#ifdef __LP64__
#ifdef __LP64__
...
...
This diff is collapsed.
Click to expand it.
arch/ppc/kernel/misc.S
View file @
0202fe1d
...
@@ -1005,6 +1005,7 @@ _GLOBAL(kernel_thread)
...
@@ -1005,6 +1005,7 @@ _GLOBAL(kernel_thread)
mr
r30
,
r3
/*
function
*/
mr
r30
,
r3
/*
function
*/
mr
r31
,
r4
/*
argument
*/
mr
r31
,
r4
/*
argument
*/
ori
r3
,
r5
,
CLONE_VM
/*
flags
*/
ori
r3
,
r5
,
CLONE_VM
/*
flags
*/
oris
r3
,
r3
,
CLONE_UNTRACED
>>
16
li
r0
,
__NR_clone
li
r0
,
__NR_clone
sc
sc
cmpi
0
,
r3
,
0
/*
parent
or
child
?
*/
cmpi
0
,
r3
,
0
/*
parent
or
child
?
*/
...
...
This diff is collapsed.
Click to expand it.
arch/ppc64/kernel/asm-offsets.c
View file @
0202fe1d
...
@@ -157,6 +157,7 @@ int main(void)
...
@@ -157,6 +157,7 @@ int main(void)
DEFINE
(
_SRR1
,
STACK_FRAME_OVERHEAD
+
sizeof
(
struct
pt_regs
)
+
8
);
DEFINE
(
_SRR1
,
STACK_FRAME_OVERHEAD
+
sizeof
(
struct
pt_regs
)
+
8
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_UNTRACED
,
CLONE_UNTRACED
);
return
0
;
return
0
;
}
}
This diff is collapsed.
Click to expand it.
arch/ppc64/kernel/misc.S
View file @
0202fe1d
...
@@ -486,6 +486,7 @@ _GLOBAL(kernel_thread)
...
@@ -486,6 +486,7 @@ _GLOBAL(kernel_thread)
/
*
XXX
fix
this
when
we
optimise
syscall
entry
to
not
save
volatiles
*/
/
*
XXX
fix
this
when
we
optimise
syscall
entry
to
not
save
volatiles
*/
mr
r6
,
r3
/*
function
*/
mr
r6
,
r3
/*
function
*/
ori
r3
,
r5
,
CLONE_VM
/*
flags
*/
ori
r3
,
r5
,
CLONE_VM
/*
flags
*/
oris
r3
,
r3
,(
CLONE_UNTRACED
>>
16
)
li
r0
,
__NR_clone
li
r0
,
__NR_clone
sc
sc
cmpi
0
,
r3
,
0
/*
parent
or
child
?
*/
cmpi
0
,
r3
,
0
/*
parent
or
child
?
*/
...
...
This diff is collapsed.
Click to expand it.
arch/s390/kernel/process.c
View file @
0202fe1d
...
@@ -146,7 +146,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -146,7 +146,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
regs
.
orig_gpr2
=
-
1
;
regs
.
orig_gpr2
=
-
1
;
/* Ok, create the new process.. */
/* Ok, create the new process.. */
p
=
do_fork
(
flags
|
CLONE_VM
,
0
,
&
regs
,
0
,
NULL
);
p
=
do_fork
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
,
0
,
&
regs
,
0
,
NULL
);
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
}
}
...
...
This diff is collapsed.
Click to expand it.
arch/s390x/kernel/process.c
View file @
0202fe1d
...
@@ -143,7 +143,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -143,7 +143,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
regs
.
orig_gpr2
=
-
1
;
regs
.
orig_gpr2
=
-
1
;
/* Ok, create the new process.. */
/* Ok, create the new process.. */
p
=
do_fork
(
flags
|
CLONE_VM
,
0
,
&
regs
,
0
,
NULL
);
p
=
do_fork
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
,
0
,
&
regs
,
0
,
NULL
);
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
}
}
...
...
This diff is collapsed.
Click to expand it.
arch/sh/kernel/process.c
View file @
0202fe1d
...
@@ -120,7 +120,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -120,7 +120,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
/* Don't use this in BL=1(cli). Or else, CPU resets! */
{
/* Don't use this in BL=1(cli). Or else, CPU resets! */
register
unsigned
long
__sc0
__asm__
(
"r0"
);
register
unsigned
long
__sc0
__asm__
(
"r0"
);
register
unsigned
long
__sc3
__asm__
(
"r3"
)
=
__NR_clone
;
register
unsigned
long
__sc3
__asm__
(
"r3"
)
=
__NR_clone
;
register
unsigned
long
__sc4
__asm__
(
"r4"
)
=
(
long
)
flags
|
CLONE_VM
;
register
unsigned
long
__sc4
__asm__
(
"r4"
)
=
(
long
)
flags
|
CLONE_VM
|
CLONE_UNTRACED
;
register
unsigned
long
__sc5
__asm__
(
"r5"
)
=
0
;
register
unsigned
long
__sc5
__asm__
(
"r5"
)
=
0
;
register
unsigned
long
__sc8
__asm__
(
"r8"
)
=
(
long
)
arg
;
register
unsigned
long
__sc8
__asm__
(
"r8"
)
=
(
long
)
arg
;
register
unsigned
long
__sc9
__asm__
(
"r9"
)
=
(
long
)
fn
;
register
unsigned
long
__sc9
__asm__
(
"r9"
)
=
(
long
)
fn
;
...
...
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/process.c
View file @
0202fe1d
...
@@ -726,7 +726,7 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -726,7 +726,7 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
/* Notreached by child. */
/* Notreached by child. */
"1: mov %%o0, %0
\n\t
"
:
"1: mov %%o0, %0
\n\t
"
:
"=r"
(
retval
)
:
"=r"
(
retval
)
:
"i"
(
__NR_clone
),
"r"
(
flags
|
CLONE_VM
),
"i"
(
__NR_clone
),
"r"
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
),
"i"
(
__NR_exit
),
"r"
(
fn
),
"r"
(
arg
)
:
"i"
(
__NR_exit
),
"r"
(
fn
),
"r"
(
arg
)
:
"g1"
,
"g2"
,
"g3"
,
"o0"
,
"o1"
,
"memory"
,
"cc"
);
"g1"
,
"g2"
,
"g3"
,
"o0"
,
"o1"
,
"memory"
,
"cc"
);
return
retval
;
return
retval
;
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/process.c
View file @
0202fe1d
...
@@ -694,7 +694,7 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
...
@@ -694,7 +694,7 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
/* Notreached by child. */
/* Notreached by child. */
"1:"
:
"1:"
:
"=r"
(
retval
)
:
"=r"
(
retval
)
:
"i"
(
__NR_clone
),
"r"
(
flags
|
CLONE_VM
),
"i"
(
__NR_clone
),
"r"
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
),
"i"
(
__NR_exit
),
"r"
(
fn
),
"r"
(
arg
)
:
"i"
(
__NR_exit
),
"r"
(
fn
),
"r"
(
arg
)
:
"g1"
,
"g2"
,
"g3"
,
"o0"
,
"o1"
,
"memory"
,
"cc"
);
"g1"
,
"g2"
,
"g3"
,
"o0"
,
"o1"
,
"memory"
,
"cc"
);
return
retval
;
return
retval
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/kernel/process.c
View file @
0202fe1d
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
asmlinkage
extern
void
ret_from_fork
(
void
);
asmlinkage
extern
void
ret_from_fork
(
void
);
int
sys_arch_prctl
(
int
code
,
unsigned
long
addr
);
int
sys_arch_prctl
(
int
code
,
unsigned
long
addr
);
unsigned
long
kernel_thread_flags
=
CLONE_VM
;
unsigned
long
kernel_thread_flags
=
CLONE_VM
|
CLONE_UNTRACED
;
int
hlt_counter
;
int
hlt_counter
;
...
...
This diff is collapsed.
Click to expand it.
include/linux/sched.h
View file @
0202fe1d
...
@@ -51,6 +51,7 @@ struct exec_domain;
...
@@ -51,6 +51,7 @@ struct exec_domain;
#define CLONE_SETTID 0x00100000
/* write the TID back to userspace */
#define CLONE_SETTID 0x00100000
/* write the TID back to userspace */
#define CLONE_CLEARTID 0x00200000
/* clear the userspace TID */
#define CLONE_CLEARTID 0x00200000
/* clear the userspace TID */
#define CLONE_DETACHED 0x00400000
/* parent wants no child-exit signal */
#define CLONE_DETACHED 0x00400000
/* parent wants no child-exit signal */
#define CLONE_UNTRACED 0x00800000
/* set if the tracing process can't force CLONE_PTRACE on this clone */
/*
/*
* List of flags we want to share for kernel threads,
* List of flags we want to share for kernel threads,
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
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