lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20181023000834.GA20335@guoren-Inspiron-7460>
Date:   Tue, 23 Oct 2018 08:08:34 +0800
From:   Guo Ren <ren_guo@...ky.com>
To:     arnd@...db.de
Cc:     linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org
Subject: Re: [PATCH V9 01/21] csky: Build infrastructure

Hi Arnd,

Could you help me review the patch, seems the patch is skipped.
ref: https://lkml.org/lkml/2018/10/16/224

Thx

On Tue, Oct 16, 2018 at 10:58:20AM +0800, Guo Ren wrote:
> This patch adds Makefile, Kconfig for build infrastructure.
> 
> Signed-off-by: Guo Ren <ren_guo@...ky.com>
> Cc: Arnd Bergmann <arnd@...db.de>
> ---
> Changelog:
>  - make allmodconfig is OK.
>  - Use BUILTIN_DTB as string, remove bool define for compile.
>  - Add xor.h in asm/Kbuild
>  - Add compat.h in asm/Kbuild.
>  - Add select DMA_DIRECT_OPS in Kconfig.
>  - remove kernel/platform.c in Makefile.
> ---
> ---
>  arch/csky/Kconfig                      | 205 +++++++++++++++++++++++++++++++++
>  arch/csky/Kconfig.debug                |   9 ++
>  arch/csky/Makefile                     |  93 +++++++++++++++
>  arch/csky/abiv1/Makefile               |   8 ++
>  arch/csky/abiv2/Makefile               |  10 ++
>  arch/csky/boot/Makefile                |  24 ++++
>  arch/csky/boot/dts/Makefile            |  13 +++
>  arch/csky/boot/dts/include/dt-bindings |   1 +
>  arch/csky/include/asm/Kbuild           |  72 ++++++++++++
>  arch/csky/include/uapi/asm/Kbuild      |  33 ++++++
>  arch/csky/kernel/Makefile              |   8 ++
>  arch/csky/lib/Makefile                 |   1 +
>  arch/csky/mm/Makefile                  |  13 +++
>  13 files changed, 490 insertions(+)
>  create mode 100644 arch/csky/Kconfig
>  create mode 100644 arch/csky/Kconfig.debug
>  create mode 100644 arch/csky/Makefile
>  create mode 100644 arch/csky/abiv1/Makefile
>  create mode 100644 arch/csky/abiv2/Makefile
>  create mode 100644 arch/csky/boot/Makefile
>  create mode 100644 arch/csky/boot/dts/Makefile
>  create mode 120000 arch/csky/boot/dts/include/dt-bindings
>  create mode 100644 arch/csky/include/asm/Kbuild
>  create mode 100644 arch/csky/include/uapi/asm/Kbuild
>  create mode 100644 arch/csky/kernel/Makefile
>  create mode 100644 arch/csky/lib/Makefile
>  create mode 100644 arch/csky/mm/Makefile
> 
> diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig
> new file mode 100644
> index 0000000..0a05585
> --- /dev/null
> +++ b/arch/csky/Kconfig
> @@ -0,0 +1,205 @@
> +config CSKY
> +	def_bool y
> +	select ARCH_HAS_SYNC_DMA_FOR_CPU
> +	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
> +	select ARCH_USE_BUILTIN_BSWAP
> +	select ARCH_USE_QUEUED_RWLOCKS if NR_CPUS>2
> +	select COMMON_CLK
> +	select CLKSRC_MMIO
> +	select CLKSRC_OF
> +	select DMA_DIRECT_OPS
> +	select DMA_NONCOHERENT_OPS
> +	select IRQ_DOMAIN
> +	select HANDLE_DOMAIN_IRQ
> +	select DW_APB_TIMER_OF
> +	select GENERIC_LIB_ASHLDI3
> +	select GENERIC_LIB_ASHRDI3
> +	select GENERIC_LIB_LSHRDI3
> +	select GENERIC_LIB_MULDI3
> +	select GENERIC_LIB_CMPDI2
> +	select GENERIC_LIB_UCMPDI2
> +	select GENERIC_ALLOCATOR
> +	select GENERIC_ATOMIC64
> +	select GENERIC_CLOCKEVENTS
> +	select GENERIC_CPU_DEVICES
> +	select GENERIC_IRQ_CHIP
> +	select GENERIC_IRQ_PROBE
> +	select GENERIC_IRQ_SHOW
> +	select GENERIC_IRQ_MULTI_HANDLER
> +	select GENERIC_SCHED_CLOCK
> +	select GENERIC_SMP_IDLE_THREAD
> +	select HAVE_ARCH_TRACEHOOK
> +	select HAVE_GENERIC_DMA_COHERENT
> +	select HAVE_KERNEL_GZIP
> +	select HAVE_KERNEL_LZO
> +	select HAVE_KERNEL_LZMA
> +	select HAVE_C_RECORDMCOUNT
> +	select HAVE_DMA_API_DEBUG
> +	select HAVE_DMA_CONTIGUOUS
> +	select HAVE_MEMBLOCK
> +	select MAY_HAVE_SPARSE_IRQ
> +	select MODULES_USE_ELF_RELA if MODULES
> +	select NO_BOOTMEM
> +	select OF
> +	select OF_EARLY_FLATTREE
> +	select OF_RESERVED_MEM
> +	select PERF_USE_VMALLOC
> +	select RTC_LIB
> +	select TIMER_OF
> +	select USB_ARCH_HAS_EHCI
> +	select USB_ARCH_HAS_OHCI
> +
> +config CPU_HAS_CACHEV2
> +	bool
> +
> +config CPU_HAS_FPUV2
> +	bool
> +
> +config CPU_HAS_HILO
> +	bool
> +
> +config CPU_HAS_TLBI
> +	bool
> +
> +config CPU_HAS_LDSTEX
> +	bool
> +	help
> +	  For SMP, CPU needs "ldex&stex" instrcutions to atomic operations.
> +
> +config CPU_NEED_TLBSYNC
> +	bool
> +
> +config CPU_NEED_SOFTALIGN
> +	bool
> +
> +config CPU_NO_USER_BKPT
> +	bool
> +	help
> +	  For abiv2 we couldn't use "trap 1" as user space bkpt in gdbserver, because
> +	  abiv2 is 16/32bit instruction set and "trap 1" is 32bit.
> +	  So we need a 16bit instruction as user space bkpt, and it will cause an illegal
> +	  instruction exception.
> +	  In kernel we parse the *regs->pc to determine whether to send SIGTRAP or not.
> +
> +config GENERIC_CALIBRATE_DELAY
> +	def_bool y
> +
> +config GENERIC_CSUM
> +	def_bool y
> +
> +config GENERIC_HWEIGHT
> +	def_bool y
> +
> +config MMU
> +	def_bool y
> +
> +config RWSEM_GENERIC_SPINLOCK
> +	def_bool y
> +
> +config TIME_LOW_RES
> +	def_bool y
> +
> +config TRACE_IRQFLAGS_SUPPORT
> +	def_bool y
> +
> +config CPU_TLB_SIZE
> +	int
> +	default "128"	if (CPU_CK610 || CPU_CK807 || CPU_CK810)
> +	default "1024"	if (CPU_CK860)
> +
> +config CPU_ASID_BITS
> +	int
> +	default "8"	if (CPU_CK610 || CPU_CK807 || CPU_CK810)
> +	default "12"	if (CPU_CK860)
> +
> +config L1_CACHE_SHIFT
> +	int
> +	default "4"	if (CPU_CK610)
> +	default "5"	if (CPU_CK807 || CPU_CK810)
> +	default "6"	if (CPU_CK860)
> +
> +menu "Processor type and features"
> +
> +choice
> +	prompt "CPU MODEL"
> +	default CPU_CK807
> +
> +config CPU_CK610
> +	bool "CSKY CPU ck610"
> +	select CPU_NEED_TLBSYNC
> +	select CPU_NEED_SOFTALIGN
> +	select CPU_NO_USER_BKPT
> +
> +config CPU_CK810
> +	bool "CSKY CPU ck810"
> +	select CPU_HAS_HILO
> +	select CPU_NEED_TLBSYNC
> +
> +config CPU_CK807
> +	bool "CSKY CPU ck807"
> +	select CPU_HAS_HILO
> +
> +config CPU_CK860
> +	bool "CSKY CPU ck860"
> +	select CPU_HAS_TLBI
> +	select CPU_HAS_CACHEV2
> +	select CPU_HAS_LDSTEX
> +	select CPU_HAS_FPUV2
> +endchoice
> +
> +choice
> +	prompt "Power Manager Instruction (wait/doze/stop)"
> +	default CPU_PM_NONE
> +
> +config CPU_PM_NONE
> +	bool "None"
> +
> +config CPU_PM_WAIT
> +	bool "wait"
> +
> +config CPU_PM_DOZE
> +	bool "doze"
> +
> +config CPU_PM_STOP
> +	bool "stop"
> +endchoice
> +
> +config CPU_HAS_VDSP
> +	bool "CPU has VDSP coprocessor"
> +	depends on CPU_HAS_FPU && CPU_HAS_FPUV2
> +
> +config CPU_HAS_FPU
> +	bool "CPU has FPU coprocessor"
> +	depends on CPU_CK807 || CPU_CK810 || CPU_CK860
> +
> +config CPU_HAS_TEE
> +	bool "CPU has Trusted Execution Environment"
> +	depends on CPU_CK810
> +
> +config SMP
> +	bool "Symmetric Multi-Processing (SMP) support for C-SKY"
> +	depends on CPU_CK860
> +	default n
> +
> +config NR_CPUS
> +	int "Maximum number of CPUs (2-32)"
> +	range 2 32
> +	depends on SMP
> +	default "2"
> +
> +config HIGHMEM
> +	bool "High Memory Support"
> +	depends on !CPU_CK610
> +	default y
> +
> +config FORCE_MAX_ZONEORDER
> +	int "Maximum zone order"
> +	default "11"
> +
> +config RAM_BASE
> +	hex "DRAM start addr (the same with memory-section in dts)"
> +	default 0x0
> +
> +endmenu
> +
> +source "kernel/Kconfig.hz"
> diff --git a/arch/csky/Kconfig.debug b/arch/csky/Kconfig.debug
> new file mode 100644
> index 0000000..48cf6ff
> --- /dev/null
> +++ b/arch/csky/Kconfig.debug
> @@ -0,0 +1,9 @@
> +menu "C-SKY Debug Options"
> +config CSKY_BUILTIN_DTB
> +	string "Use kernel builtin dtb"
> +	help
> +	  User could define the dtb instead of the one which is passed from
> +	  bootloader.
> +	  Sometimes for debug, we want to use a built-in dtb and then we needn't
> +	  modify bootloader at all.
> +endmenu
> diff --git a/arch/csky/Makefile b/arch/csky/Makefile
> new file mode 100644
> index 0000000..67a4ae1
> --- /dev/null
> +++ b/arch/csky/Makefile
> @@ -0,0 +1,93 @@
> +OBJCOPYFLAGS		:=-O binary
> +GZFLAGS			:=-9
> +KBUILD_DEFCONFIG	:= defconfig
> +
> +ifdef CONFIG_CPU_HAS_FPU
> +FPUEXT = f
> +endif
> +
> +ifdef CONFIG_CPU_HAS_VDSP
> +VDSPEXT = v
> +endif
> +
> +ifdef CONFIG_CPU_HAS_TEE
> +TEEEXT = t
> +endif
> +
> +ifdef CONFIG_CPU_CK610
> +CPUTYPE	= ck610
> +CSKYABI	= abiv1
> +endif
> +
> +ifdef CONFIG_CPU_CK810
> +CPUTYPE = ck810
> +CSKYABI	= abiv2
> +endif
> +
> +ifdef CONFIG_CPU_CK807
> +CPUTYPE = ck807
> +CSKYABI	= abiv2
> +endif
> +
> +ifdef CONFIG_CPU_CK860
> +CPUTYPE = ck860
> +CSKYABI	= abiv2
> +endif
> +
> +ifneq ($(CSKYABI),)
> +MCPU_STR = $(CPUTYPE)$(FPUEXT)$(VDSPEXT)$(TEEEXT)
> +KBUILD_CFLAGS += -mcpu=$(MCPU_STR)
> +KBUILD_CFLAGS += -DCSKYCPU_DEF_NAME=\"$(MCPU_STR)\"
> +KBUILD_CFLAGS += -msoft-float -mdiv
> +KBUILD_CFLAGS += -fno-tree-vectorize
> +endif
> +
> +KBUILD_CFLAGS += -pipe
> +ifeq ($(CSKYABI),abiv2)
> +KBUILD_CFLAGS += -mno-stack-size
> +endif
> +
> +abidirs := $(patsubst %,arch/csky/%/,$(CSKYABI))
> +KBUILD_CFLAGS += $(patsubst %,-I$(srctree)/%inc,$(abidirs))
> +
> +KBUILD_CPPFLAGS += -mlittle-endian
> +LDFLAGS += -EL
> +
> +KBUILD_AFLAGS += $(KBUILD_CFLAGS)
> +
> +head-y := arch/csky/kernel/head.o
> +
> +core-y += arch/csky/kernel/
> +core-y += arch/csky/mm/
> +core-y += arch/csky/$(CSKYABI)/
> +
> +libs-y += arch/csky/lib/ \
> +	$(shell $(CC) $(KBUILD_CFLAGS) $(KCFLAGS) -print-libgcc-file-name)
> +
> +boot := arch/csky/boot
> +ifneq '$(CONFIG_CSKY_BUILTIN_DTB)' '""'
> +core-y += $(boot)/dts/
> +endif
> +
> +all: zImage
> +
> +
> +dtbs: scripts
> +	$(Q)$(MAKE) $(build)=$(boot)/dts
> +
> +%.dtb %.dtb.S %.dtb.o: scripts
> +	$(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@
> +
> +zImage Image uImage: vmlinux dtbs
> +	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
> +
> +archclean:
> +	$(Q)$(MAKE) $(clean)=$(boot)
> +	$(Q)$(MAKE) $(clean)=$(boot)/dts
> +	rm -rf arch/csky/include/generated
> +
> +define archhelp
> +  echo  '* zImage       - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
> +  echo  '  Image        - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
> +  echo  '  uImage       - U-Boot wrapped zImage'
> +endef
> diff --git a/arch/csky/abiv1/Makefile b/arch/csky/abiv1/Makefile
> new file mode 100644
> index 0000000..7c06276
> --- /dev/null
> +++ b/arch/csky/abiv1/Makefile
> @@ -0,0 +1,8 @@
> +obj-$(CONFIG_CPU_NEED_SOFTALIGN)	+= alignment.o
> +obj-y					+= bswapdi.o
> +obj-y					+= bswapsi.o
> +obj-y					+= cacheflush.o
> +obj-y					+= mmap.o
> +obj-y					+= memcpy.o
> +obj-y					+= memset.o
> +obj-y					+= strksyms.o
> diff --git a/arch/csky/abiv2/Makefile b/arch/csky/abiv2/Makefile
> new file mode 100644
> index 0000000..069ca72
> --- /dev/null
> +++ b/arch/csky/abiv2/Makefile
> @@ -0,0 +1,10 @@
> +obj-y				+= cacheflush.o
> +obj-$(CONFIG_CPU_HAS_FPU)	+= fpu.o
> +obj-y				+= memcmp.o
> +obj-y				+= memcpy.o
> +obj-y				+= memmove.o
> +obj-y				+= memset.o
> +obj-y				+= strcmp.o
> +obj-y				+= strcpy.o
> +obj-y				+= strlen.o
> +obj-y				+= strksyms.o
> diff --git a/arch/csky/boot/Makefile b/arch/csky/boot/Makefile
> new file mode 100644
> index 0000000..47d3d72
> --- /dev/null
> +++ b/arch/csky/boot/Makefile
> @@ -0,0 +1,24 @@
> +targets := Image zImage uImage
> +targets += $(dtb-y)
> +
> +$(obj)/Image: vmlinux FORCE
> +	$(call if_changed,objcopy)
> +	@echo '  Kernel: $@ is ready'
> +
> +compress-$(CONFIG_KERNEL_GZIP) = gzip
> +compress-$(CONFIG_KERNEL_LZO)  = lzo
> +compress-$(CONFIG_KERNEL_LZMA) = lzma
> +compress-$(CONFIG_KERNEL_XZ)   = xzkern
> +compress-$(CONFIG_KERNEL_LZ4)  = lz4
> +
> +$(obj)/zImage:  $(obj)/Image FORCE
> +	$(call if_changed,$(compress-y))
> +	@echo '  Kernel: $@ is ready'
> +
> +UIMAGE_ARCH		= sandbox
> +UIMAGE_COMPRESSION	= $(compress-y)
> +UIMAGE_LOADADDR		= $(shell $(NM) vmlinux | awk '$$NF == "_start" {print $$1}')
> +
> +$(obj)/uImage: $(obj)/zImage
> +	$(call if_changed,uimage)
> +	@echo 'Image: $@ is ready'
> diff --git a/arch/csky/boot/dts/Makefile b/arch/csky/boot/dts/Makefile
> new file mode 100644
> index 0000000..305e81a
> --- /dev/null
> +++ b/arch/csky/boot/dts/Makefile
> @@ -0,0 +1,13 @@
> +dtstree	:= $(srctree)/$(src)
> +
> +ifneq '$(CONFIG_CSKY_BUILTIN_DTB)' '""'
> +builtindtb-y := $(patsubst "%",%,$(CONFIG_CSKY_BUILTIN_DTB))
> +dtb-y += $(builtindtb-y).dtb
> +obj-y += $(builtindtb-y).dtb.o
> +.SECONDARY: $(obj)/$(builtindtb-y).dtb.S
> +else
> +dtb-y := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
> +endif
> +
> +always += $(dtb-y)
> +clean-files += *.dtb *.dtb.S
> diff --git a/arch/csky/boot/dts/include/dt-bindings b/arch/csky/boot/dts/include/dt-bindings
> new file mode 120000
> index 0000000..08c00e4
> --- /dev/null
> +++ b/arch/csky/boot/dts/include/dt-bindings
> @@ -0,0 +1 @@
> +../../../../../include/dt-bindings
> \ No newline at end of file
> diff --git a/arch/csky/include/asm/Kbuild b/arch/csky/include/asm/Kbuild
> new file mode 100644
> index 0000000..014eb57
> --- /dev/null
> +++ b/arch/csky/include/asm/Kbuild
> @@ -0,0 +1,72 @@
> +generic-y += asm-offsets.h
> +generic-y += bitsperlong.h
> +generic-y += bugs.h
> +generic-y += clkdev.h
> +generic-y += compat.h
> +generic-y += current.h
> +generic-y += delay.h
> +generic-y += device.h
> +generic-y += div64.h
> +generic-y += dma.h
> +generic-y += dma-contiguous.h
> +generic-y += dma-mapping.h
> +generic-y += emergency-restart.h
> +generic-y += errno.h
> +generic-y += exec.h
> +generic-y += fb.h
> +generic-y += ftrace.h
> +generic-y += futex.h
> +generic-y += gpio.h
> +generic-y += hardirq.h
> +generic-y += hw_irq.h
> +generic-y += ioctl.h
> +generic-y += ioctls.h
> +generic-y += irq.h
> +generic-y += irq_regs.h
> +generic-y += ipcbuf.h
> +generic-y += irq_work.h
> +generic-y += kdebug.h
> +generic-y += kmap_types.h
> +generic-y += kprobes.h
> +generic-y += kvm_para.h
> +generic-y += linkage.h
> +generic-y += local.h
> +generic-y += local64.h
> +generic-y += mman.h
> +generic-y += mm-arch-hooks.h
> +generic-y += module.h
> +generic-y += msgbuf.h
> +generic-y += mutex.h
> +generic-y += param.h
> +generic-y += pci.h
> +generic-y += percpu.h
> +generic-y += posix_types.h
> +generic-y += poll.h
> +generic-y += preempt.h
> +generic-y += qrwlock.h
> +generic-y += resource.h
> +generic-y += scatterlist.h
> +generic-y += sections.h
> +generic-y += sembuf.h
> +generic-y += serial.h
> +generic-y += setup.h
> +generic-y += shmbuf.h
> +generic-y += shm.h
> +generic-y += siginfo.h
> +generic-y += signal.h
> +generic-y += socket.h
> +generic-y += sockios.h
> +generic-y += statfs.h
> +generic-y += termbits.h
> +generic-y += termios.h
> +generic-y += timex.h
> +generic-y += topology.h
> +generic-y += trace_clock.h
> +generic-y += types.h
> +generic-y += ucontext.h
> +generic-y += unaligned.h
> +generic-y += user.h
> +generic-y += vga.h
> +generic-y += vmlinux.lds.h
> +generic-y += word-at-a-time.h
> +generic-y += xor.h
> diff --git a/arch/csky/include/uapi/asm/Kbuild b/arch/csky/include/uapi/asm/Kbuild
> new file mode 100644
> index 0000000..b65252b
> --- /dev/null
> +++ b/arch/csky/include/uapi/asm/Kbuild
> @@ -0,0 +1,33 @@
> +include include/uapi/asm-generic/Kbuild.asm
> +
> +header-y += cachectl.h
> +header-y += stat.h
> +
> +generic-y += auxvec.h
> +generic-y += param.h
> +generic-y += bpf_perf_event.h
> +generic-y += errno.h
> +generic-y += fcntl.h
> +generic-y += ioctl.h
> +generic-y += ioctls.h
> +generic-y += ipcbuf.h
> +generic-y += shmbuf.h
> +generic-y += bitsperlong.h
> +generic-y += mman.h
> +generic-y += msgbuf.h
> +generic-y += poll.h
> +generic-y += posix_types.h
> +generic-y += resource.h
> +generic-y += sembuf.h
> +generic-y += siginfo.h
> +generic-y += signal.h
> +generic-y += socket.h
> +generic-y += sockios.h
> +generic-y += statfs.h
> +generic-y += stat.h
> +generic-y += setup.h
> +generic-y += swab.h
> +generic-y += termbits.h
> +generic-y += termios.h
> +generic-y += types.h
> +generic-y += ucontext.h
> diff --git a/arch/csky/kernel/Makefile b/arch/csky/kernel/Makefile
> new file mode 100644
> index 0000000..4422de7
> --- /dev/null
> +++ b/arch/csky/kernel/Makefile
> @@ -0,0 +1,8 @@
> +extra-y := head.o vmlinux.lds
> +
> +obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o
> +obj-y += power.o syscall.o syscall_table.o setup.o
> +obj-y += process.o cpu-probe.o ptrace.o dumpstack.o
> +
> +obj-$(CONFIG_MODULES)			+= module.o
> +obj-$(CONFIG_SMP)			+= smp.o
> diff --git a/arch/csky/lib/Makefile b/arch/csky/lib/Makefile
> new file mode 100644
> index 0000000..d1f368c
> --- /dev/null
> +++ b/arch/csky/lib/Makefile
> @@ -0,0 +1 @@
> +lib-y  := usercopy.o delay.o
> diff --git a/arch/csky/mm/Makefile b/arch/csky/mm/Makefile
> new file mode 100644
> index 0000000..c870eb3
> --- /dev/null
> +++ b/arch/csky/mm/Makefile
> @@ -0,0 +1,13 @@
> +ifeq ($(CONFIG_CPU_HAS_CACHEV2),y)
> +obj-y +=			cachev2.o
> +else
> +obj-y +=			cachev1.o
> +endif
> +
> +obj-y +=			dma-mapping.o
> +obj-y +=			fault.o
> +obj-$(CONFIG_HIGHMEM) +=	highmem.o
> +obj-y +=			init.o
> +obj-y +=			ioremap.o
> +obj-y +=			syscache.o
> +obj-y +=			tlb.o
> -- 
> 2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ