lkml.org 
[lkml]   [2017]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] x86/fpu: move FPU state into separate cache
Hi Kees,

[auto build test ERROR on kvm/linux-next]
[also build test ERROR on v4.11-rc4 next-20170330]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Kees-Cook/x86-fpu-move-FPU-state-into-separate-cache/20170331-110507
base: https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
config: i386-randconfig-r0-201713 (attached as .config)
compiler: gcc-5 (Debian 5.4.1-2) 5.4.1 20160904
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All error/warnings (new ones prefixed by >>):

arch/x86/math-emu/fpu_entry.c: In function 'valid_prefix':
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
include/linux/compiler.h:178:40: note: in definition of macro 'likely'
# define likely(x) __builtin_expect(!!(x), 1)
^
arch/x86/include/asm/uaccess.h:100:10: note: in expansion of macro '__range_not_ok'
likely(!__range_not_ok(addr, size, user_addr_max())); \
^
arch/x86/math-emu/fpu_system.h:80:36: note: in expansion of macro 'access_ok'
#define FPU_access_ok(x,y,z) if ( !access_ok(x,y,z) ) \
^
arch/x86/math-emu/fpu_system.h:95:31: note: in expansion of macro 'FPU_access_ok'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_system.h:57:20: note: in expansion of macro 'FPU_info'
#define FPU_EIP (FPU_info->regs->ip)
^
arch/x86/math-emu/fpu_system.h:95:72: note: in expansion of macro 'FPU_EIP'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_entry.c:558:2: note: in expansion of macro 'FPU_code_access_ok'
FPU_code_access_ok(1);
^
In file included from arch/x86/math-emu/fpu_entry.c:35:0:
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
arch/x86/math-emu/fpu_system.h:81:16: note: in expansion of macro 'FPU_info'
math_abort(FPU_info,SIGSEGV)
^
arch/x86/math-emu/fpu_system.h:95:31: note: in expansion of macro 'FPU_access_ok'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_entry.c:558:2: note: in expansion of macro 'FPU_code_access_ok'
FPU_code_access_ok(1);
^
In file included from include/asm-generic/bug.h:4:0,
from arch/x86/include/asm/bug.h:35,
from include/linux/bug.h:4,
from include/linux/signal.h:4,
from arch/x86/math-emu/fpu_entry.c:27:
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
include/linux/compiler.h:178:40: note: in definition of macro 'likely'
# define likely(x) __builtin_expect(!!(x), 1)
^
arch/x86/include/asm/uaccess.h:100:10: note: in expansion of macro '__range_not_ok'
likely(!__range_not_ok(addr, size, user_addr_max())); \
^
arch/x86/math-emu/fpu_system.h:80:36: note: in expansion of macro 'access_ok'
#define FPU_access_ok(x,y,z) if ( !access_ok(x,y,z) ) \
^
arch/x86/math-emu/fpu_system.h:95:31: note: in expansion of macro 'FPU_access_ok'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_system.h:57:20: note: in expansion of macro 'FPU_info'
#define FPU_EIP (FPU_info->regs->ip)
^
arch/x86/math-emu/fpu_system.h:95:72: note: in expansion of macro 'FPU_EIP'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_entry.c:602:4: note: in expansion of macro 'FPU_code_access_ok'
FPU_code_access_ok(1);
^
In file included from arch/x86/math-emu/fpu_entry.c:35:0:
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
arch/x86/math-emu/fpu_system.h:81:16: note: in expansion of macro 'FPU_info'
math_abort(FPU_info,SIGSEGV)
^
arch/x86/math-emu/fpu_system.h:95:31: note: in expansion of macro 'FPU_access_ok'
#define FPU_code_access_ok(z) FPU_access_ok(VERIFY_READ,(void __user *)FPU_EIP,z)
^
arch/x86/math-emu/fpu_entry.c:602:4: note: in expansion of macro 'FPU_code_access_ok'
FPU_code_access_ok(1);
^
arch/x86/math-emu/fpu_entry.c: In function 'math_abort':
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
arch/x86/math-emu/fpu_system.h:57:20: note: in expansion of macro 'FPU_info'
#define FPU_EIP (FPU_info->regs->ip)
^
arch/x86/math-emu/fpu_entry.c:626:2: note: in expansion of macro 'FPU_EIP'
FPU_EIP = FPU_ORIG_EIP;
^
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
arch/x86/math-emu/fpu_system.h:58:24: note: in expansion of macro 'FPU_info'
#define FPU_ORIG_EIP (FPU_info->___orig_eip)
^
arch/x86/math-emu/fpu_entry.c:626:12: note: in expansion of macro 'FPU_ORIG_EIP'
FPU_EIP = FPU_ORIG_EIP;
^
arch/x86/math-emu/fpu_entry.c: In function 'fpregs_soft_set':
>> arch/x86/math-emu/fpu_entry.c:646:55: error: request for member 'soft' in something not a structure or union
struct swregs_state *s387 = &target->thread.fpu.state.soft;
^
arch/x86/math-emu/fpu_entry.c: In function 'fpregs_soft_get':
arch/x86/math-emu/fpu_entry.c:698:55: error: request for member 'soft' in something not a structure or union
struct swregs_state *s387 = &target->thread.fpu.state.soft;
^
--
^
arch/x86/math-emu/errors.c: In function 'set_precision_flag_down':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:553:6: note: in expansion of macro 'control_word'
if (control_word & CW_Precision) { /* The masked response */
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/errors.c:554:3: note: in expansion of macro 'partial_status'
partial_status &= ~SW_C1;
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/errors.c:555:3: note: in expansion of macro 'partial_status'
partial_status |= SW_Precision;
^
arch/x86/math-emu/errors.c: In function 'denormal_operand':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:562:6: note: in expansion of macro 'control_word'
if (control_word & CW_Denormal) { /* The masked response */
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/errors.c:563:3: note: in expansion of macro 'partial_status'
partial_status |= SW_Denorm_Op;
^
arch/x86/math-emu/errors.c: In function 'arith_overflow':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:575:6: note: in expansion of macro 'control_word'
if (control_word & CW_Overflow) {
^
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:586:6: note: in expansion of macro 'control_word'
if (control_word & CW_Overflow) {
^
arch/x86/math-emu/errors.c: In function 'arith_underflow':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:603:6: note: in expansion of macro 'control_word'
if (control_word & CW_Underflow) {
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/errors.c:607:4: note: in expansion of macro 'partial_status'
partial_status &= ~SW_C1; /* Round down. */
^
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:618:6: note: in expansion of macro 'control_word'
if (control_word & CW_Underflow) {
^
arch/x86/math-emu/errors.c: In function 'FPU_stack_overflow':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:631:6: note: in expansion of macro 'control_word'
if (control_word & CW_Invalid) {
^
arch/x86/math-emu/fpu_system.h:75:20: error: request for member 'soft' in something not a structure or union
#define top (I387->soft.ftop)
^
arch/x86/math-emu/errors.c:633:3: note: in expansion of macro 'top'
top--;
^
arch/x86/math-emu/errors.c: In function 'FPU_stack_underflow':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:646:6: note: in expansion of macro 'control_word'
if (control_word & CW_Invalid) {
^
arch/x86/math-emu/errors.c: In function 'FPU_stack_underflow_i':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:660:6: note: in expansion of macro 'control_word'
if (control_word & CW_Invalid) {
^
arch/x86/math-emu/errors.c: In function 'FPU_stack_underflow_pop':
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/errors.c:674:6: note: in expansion of macro 'control_word'
if (control_word & CW_Invalid) {
^
arch/x86/math-emu/errors.c: In function 'real_1op_NaN':
>> arch/x86/math-emu/errors.c:407:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
arch/x86/math-emu/errors.c: In function 'real_2op_NaN':
arch/x86/math-emu/errors.c:491:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
arch/x86/math-emu/errors.c: In function 'arith_invalid':
arch/x86/math-emu/errors.c:507:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
arch/x86/math-emu/errors.c: In function 'FPU_divide_by_zero':
arch/x86/math-emu/errors.c:526:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
arch/x86/math-emu/errors.c: In function 'set_precision_flag':
arch/x86/math-emu/errors.c:539:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
arch/x86/math-emu/errors.c: In function 'denormal_operand':
arch/x86/math-emu/errors.c:569:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
--
In file included from arch/x86/math-emu/fpu_aux.c:13:0:
arch/x86/math-emu/status_w.h: In function 'setcc':
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/status_w.h:53:2: note: in expansion of macro 'partial_status'
partial_status &= ~(SW_C0 | SW_C1 | SW_C2 | SW_C3);
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/status_w.h:54:2: note: in expansion of macro 'partial_status'
partial_status |= (cc) & (SW_C0 | SW_C1 | SW_C2 | SW_C3);
^
arch/x86/math-emu/fpu_aux.c: In function 'fclex':
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/fpu_aux.c:25:2: note: in expansion of macro 'partial_status'
partial_status &=
^
arch/x86/math-emu/fpu_system.h:64:41: error: request for member 'soft' in something not a structure or union
#define no_ip_update (*(u_char *)&(I387->soft.no_update))
^
arch/x86/math-emu/fpu_aux.c:29:2: note: in expansion of macro 'no_ip_update'
no_ip_update = 1;
^
arch/x86/math-emu/fpu_aux.c: In function 'finit':
>> arch/x86/math-emu/fpu_aux.c:55:46: error: request for member 'soft' in something not a structure or union
fpstate_init_soft(&current->thread.fpu.state.soft);
^
In file included from arch/x86/math-emu/fpu_aux.c:13:0:
arch/x86/math-emu/fpu_aux.c: In function 'finit_':
arch/x86/math-emu/fpu_system.h:65:36: error: request for member 'soft' in something not a structure or union
#define FPU_rm (*(u_char *)&(I387->soft.rm))
^
arch/x86/math-emu/fpu_aux.c:72:15: note: in expansion of macro 'FPU_rm'
(finit_table[FPU_rm]) ();
^
arch/x86/math-emu/fpu_aux.c: In function 'fstsw_ax':
arch/x86/math-emu/fpu_system.h:50:24: error: request for member 'soft' in something not a structure or union
#define FPU_info (I387->soft.info)
^
arch/x86/math-emu/fpu_system.h:55:20: note: in expansion of macro 'FPU_info'
#define FPU_EAX (FPU_info->regs->ax)
^
arch/x86/math-emu/fpu_aux.c:77:13: note: in expansion of macro 'FPU_EAX'
*(short *)&FPU_EAX = status_word();
^
arch/x86/math-emu/fpu_system.h:71:30: error: request for member 'soft' in something not a structure or union
#define partial_status (I387->soft.swd)
^
arch/x86/math-emu/status_w.h:50:5: note: in expansion of macro 'partial_status'
((partial_status & ~SW_Top & 0xffff) | ((top << SW_Top_Shift) & SW_Top))
^
arch/x86/math-emu/fpu_aux.c:77:23: note: in expansion of macro 'status_word'
*(short *)&FPU_EAX = status_word();
^
arch/x86/math-emu/fpu_system.h:75:20: error: request for member 'soft' in something not a structure or union
#define top (I387->soft.ftop)
^
arch/x86/math-emu/status_w.h:50:44: note: in expansion of macro 'top'
((partial_status & ~SW_Top & 0xffff) | ((top << SW_Top_Shift) & SW_Top))
^
arch/x86/math-emu/fpu_aux.c:77:23: note: in expansion of macro 'status_word'
*(short *)&FPU_EAX = status_word();
^
arch/x86/math-emu/fpu_system.h:64:41: error: request for member 'soft' in something not a structure or union
#define no_ip_update (*(u_char *)&(I387->soft.no_update))
^
arch/x86/math-emu/fpu_aux.c:78:2: note: in expansion of macro 'no_ip_update'
no_ip_update = 1;
^
arch/x86/math-emu/fpu_aux.c: In function 'fstsw_':
arch/x86/math-emu/fpu_system.h:65:36: error: request for member 'soft' in something not a structure or union
#define FPU_rm (*(u_char *)&(I387->soft.rm))
^
arch/x86/math-emu/fpu_aux.c:88:15: note: in expansion of macro 'FPU_rm'
(fstsw_table[FPU_rm]) ();
^
arch/x86/math-emu/fpu_aux.c: In function 'fp_nop':
arch/x86/math-emu/fpu_system.h:65:36: error: request for member 'soft' in something not a structure or union
#define FPU_rm (*(u_char *)&(I387->soft.rm))
^
arch/x86/math-emu/fpu_aux.c:98:16: note: in expansion of macro 'FPU_rm'
(fp_nop_table[FPU_rm]) ();
^
arch/x86/math-emu/fpu_aux.c: In function 'fld_i_':
arch/x86/math-emu/fpu_system.h:65:36: error: request for member 'soft' in something not a structure or union
#define FPU_rm (*(u_char *)&(I387->soft.rm))
^
arch/x86/math-emu/fpu_aux.c:113:6: note: in expansion of macro 'FPU_rm'
i = FPU_rm;
^
arch/x86/math-emu/fpu_system.h:74:25: error: request for member 'soft' in something not a structure or union
#define registers (I387->soft.st_space)
^
arch/x86/math-emu/fpu_emu.h:144:35: note: in expansion of macro 'registers'
#define register_base ((u_char *) registers )
^
arch/x86/math-emu/fpu_emu.h:146:38: note: in expansion of macro 'register_base'
#define st(x) ( * ((FPU_REG *)( register_base + 10 * ((top+x) & 7) )) )
^
arch/x86/math-emu/fpu_aux.c:115:13: note: in expansion of macro 'st'
reg_copy(&st(i), st_new_ptr);
^
arch/x86/math-emu/fpu_system.h:75:20: error: request for member 'soft' in something not a structure or union
#define top (I387->soft.ftop)
^
arch/x86/math-emu/fpu_emu.h:146:61: note: in expansion of macro 'top'
#define st(x) ( * ((FPU_REG *)( register_base + 10 * ((top+x) & 7) )) )
^
arch/x86/math-emu/fpu_aux.c:115:13: note: in expansion of macro 'st'
reg_copy(&st(i), st_new_ptr);
^
arch/x86/math-emu/fpu_system.h:75:20: error: request for member 'soft' in something not a structure or union
#define top (I387->soft.ftop)
^
arch/x86/math-emu/fpu_emu.h:156:18: note: in expansion of macro 'top'
#define push() { top--; }
^
arch/x86/math-emu/fpu_aux.c:117:3: note: in expansion of macro 'push'
push();
^
arch/x86/math-emu/fpu_system.h:72:28: error: request for member 'soft' in something not a structure or union
#define control_word (I387->soft.cwd)
^
arch/x86/math-emu/fpu_aux.c:120:7: note: in expansion of macro 'control_word'
if (control_word & CW_Invalid) {
..

vim +/soft +646 arch/x86/math-emu/fpu_entry.c

^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 620 }
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 621 }
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 622 }
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 623
ae6af41f arch/x86/math-emu/fpu_entry.c Tejun Heo 2009-02-09 624 void math_abort(struct math_emu_info *info, unsigned int signal)
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 625 {
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 @626 FPU_EIP = FPU_ORIG_EIP;
51e7dc70 arch/x86/math-emu/fpu_entry.c Srikar Dronamraju 2012-03-12 627 current->thread.trap_nr = X86_TRAP_MF;
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 628 current->thread.error_code = 0;
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 629 send_sig(signal, current, 1);
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 630 RE_ENTRANT_CHECK_OFF;
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 631 __asm__("movl %0,%%esp ; ret": :"g"(((long)info) - 4));
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 632 #ifdef PARANOID
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 633 printk("ERROR: wm-FPU-emu math_abort failed!\n");
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 634 #endif /* PARANOID */
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 635 }
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 636
c47ada30 arch/x86/math-emu/fpu_entry.c Ingo Molnar 2015-04-30 637 #define S387 ((struct swregs_state *)s387)
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 638 #define sstatus_word() \
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 639 ((S387->swd & ~SW_Top & 0xffff) | ((S387->ftop << SW_Top_Shift) & SW_Top))
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 640
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 641 int fpregs_soft_set(struct task_struct *target,
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 642 const struct user_regset *regset,
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 643 unsigned int pos, unsigned int count,
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 644 const void *kbuf, const void __user *ubuf)
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 645 {
c47ada30 arch/x86/math-emu/fpu_entry.c Ingo Molnar 2015-04-30 @646 struct swregs_state *s387 = &target->thread.fpu.state.soft;
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 647 void *space = s387->st_space;
ff0ebb23 arch/x86/math-emu/fpu_entry.c Roland McGrath 2008-01-30 648 int ret;
^1da177e arch/i386/math-emu/fpu_entry.c Linus Torvalds 2005-04-16 649 int offset, other, i, tags, regnr, tag, newtop;

:::::: The code at line 646 was first introduced by commit
:::::: c47ada305de3803517ae64aa50686f644c5456fa x86/fpu: Harmonize FPU register state types

:::::: TO: Ingo Molnar <mingo@kernel.org>
:::::: CC: Ingo Molnar <mingo@kernel.org>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[unhandled content-type:application/gzip]
\
 
 \ /
  Last update: 2017-03-31 06:59    [W:0.074 / U:0.092 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site