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: <BANLkTi=EvC6E_p+XSpzZUvhu0Q_gStROcQ@mail.gmail.com>
Date:	Thu, 28 Apr 2011 12:19:56 -0300
From:	Thiago Farina <tfransosi@...il.com>
To:	KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>
Cc:	LKML <linux-kernel@...r.kernel.org>,
	Benjamin Herrenschmidt <benh@...nel.crashing.org>,
	Paul Mackerras <paulus@...ba.org>,
	linuxppc-dev@...ts.ozlabs.org
Subject: Re: [PATCH] powerpc: convert old cpumask API into new one

On Thu, Apr 28, 2011 at 12:07 PM, KOSAKI Motohiro
<kosaki.motohiro@...fujitsu.com> wrote:
> Adapt new API.
>
> Almost change is trivial. Most important change is the below line
> because we plan to change task->cpus_allowed implementation.
>
> -       ctx->cpus_allowed = current->cpus_allowed;
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>
> Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org>
> Cc: Paul Mackerras <paulus@...ba.org>
> Cc: linuxppc-dev@...ts.ozlabs.org
> ---
>  arch/powerpc/include/asm/cputhreads.h        |   12 +++++-----
>  arch/powerpc/include/asm/kexec.h             |    2 +-
>  arch/powerpc/kernel/crash.c                  |   32 +++++++++++++-------------
>  arch/powerpc/kernel/setup-common.c           |    4 +-
>  arch/powerpc/kernel/smp.c                    |    4 +-
>  arch/powerpc/kernel/traps.c                  |    2 +-
>  arch/powerpc/mm/numa.c                       |    2 +-
>  arch/powerpc/platforms/cell/beat_smp.c       |    2 +-
>  arch/powerpc/platforms/cell/cbe_regs.c       |   11 +++++----
>  arch/powerpc/platforms/cell/smp.c            |   13 +++++-----
>  arch/powerpc/platforms/cell/spufs/sched.c    |    2 +-
>  arch/powerpc/platforms/pseries/hotplug-cpu.c |    2 +-
>  arch/powerpc/xmon/xmon.c                     |   16 ++++++------
>  13 files changed, 52 insertions(+), 52 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/cputhreads.h b/arch/powerpc/include/asm/cputhreads.h
> index f71bb4c..ce516e5 100644
> --- a/arch/powerpc/include/asm/cputhreads.h
> +++ b/arch/powerpc/include/asm/cputhreads.h
> @@ -37,16 +37,16 @@ extern cpumask_t threads_core_mask;
>  * This can typically be used for things like IPI for tlb invalidations
>  * since those need to be done only once per core/TLB
>  */
> -static inline cpumask_t cpu_thread_mask_to_cores(cpumask_t threads)
> +static inline cpumask_t cpu_thread_mask_to_cores(const struct cpumask *threads)
>  {
>        cpumask_t       tmp, res;
>        int             i;
>
> -       res = CPU_MASK_NONE;
> +       cpumask_clear(&res);
>        for (i = 0; i < NR_CPUS; i += threads_per_core) {
> -               cpus_shift_left(tmp, threads_core_mask, i);
> -               if (cpus_intersects(threads, tmp))
> -                       cpu_set(i, res);
> +               cpumask_shift_left(&tmp, &threads_core_mask, i);
> +               if (cpumask_intersects(threads, &tmp))
> +                       cpumask_set_cpu(i, &res);
>        }
>        return res;
>  }
> @@ -58,7 +58,7 @@ static inline int cpu_nr_cores(void)
>
>  static inline cpumask_t cpu_online_cores_map(void)
>  {
> -       return cpu_thread_mask_to_cores(cpu_online_map);
> +       return cpu_thread_mask_to_cores(cpu_online_mask);
>  }
>
>  #ifdef CONFIG_SMP
> diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
> index f54408d..8a33698 100644
> --- a/arch/powerpc/include/asm/kexec.h
> +++ b/arch/powerpc/include/asm/kexec.h
> @@ -76,7 +76,7 @@ extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
>  extern cpumask_t cpus_in_sr;
>  static inline int kexec_sr_activated(int cpu)
>  {
> -       return cpu_isset(cpu,cpus_in_sr);
> +       return cpumask_test_cpu(cpu, &cpus_in_sr);
>  }
>
>  struct kimage;
> diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
> index 3d3d416..88e294f 100644
> --- a/arch/powerpc/kernel/crash.c
> +++ b/arch/powerpc/kernel/crash.c
> @@ -64,9 +64,9 @@ void crash_ipi_callback(struct pt_regs *regs)
>                return;
>
>        hard_irq_disable();
> -       if (!cpu_isset(cpu, cpus_in_crash))
> +       if (!cpumask_test_cpu(cpu, &cpus_in_crash))
>                crash_save_cpu(regs, cpu);
> -       cpu_set(cpu, cpus_in_crash);
> +       cpumask_set_cpu(cpu, &cpus_in_crash);
>
>        /*
>         * Entered via soft-reset - could be the kdump
> @@ -77,8 +77,8 @@ void crash_ipi_callback(struct pt_regs *regs)
>         * Tell the kexec CPU that entered via soft-reset and ready
>         * to go down.
>         */
> -       if (cpu_isset(cpu, cpus_in_sr)) {
> -               cpu_clear(cpu, cpus_in_sr);
> +       if (cpumask_test_cpu(cpu, &cpus_in_sr)) {
> +               cpumask_clear_cpu(cpu, &cpus_in_sr);
>                atomic_inc(&enter_on_soft_reset);
>        }
>
> @@ -87,7 +87,7 @@ void crash_ipi_callback(struct pt_regs *regs)
>         * This barrier is needed to make sure that all CPUs are stopped.
>         * If not, soft-reset will be invoked to bring other CPUs.
>         */
> -       while (!cpu_isset(crashing_cpu, cpus_in_crash))
> +       while (!cpumask_test_cpu(crashing_cpu, &cpus_in_crash))
>                cpu_relax();
>
>        if (ppc_md.kexec_cpu_down)
> @@ -109,7 +109,7 @@ static void crash_soft_reset_check(int cpu)
>  {
>        unsigned int ncpus = num_online_cpus() - 1;/* Excluding the panic cpu */
>
> -       cpu_clear(cpu, cpus_in_sr);
> +       cpumask_clear_cpu(cpu, &cpus_in_sr);
>        while (atomic_read(&enter_on_soft_reset) != ncpus)
>                cpu_relax();
>  }
> @@ -132,7 +132,7 @@ static void crash_kexec_prepare_cpus(int cpu)
>         */
>        printk(KERN_EMERG "Sending IPI to other cpus...\n");
>        msecs = 10000;
> -       while ((cpus_weight(cpus_in_crash) < ncpus) && (--msecs > 0)) {
> +       while ((cpumask_weight(&cpus_in_crash) < ncpus) && (--msecs > 0)) {
>                cpu_relax();
>                mdelay(1);
>        }
> @@ -144,20 +144,20 @@ static void crash_kexec_prepare_cpus(int cpu)
>         * user to do soft reset such that we get all.
>         * Soft-reset will be used until better mechanism is implemented.
>         */
> -       if (cpus_weight(cpus_in_crash) < ncpus) {
> +       if (cpumask_weight(&cpus_in_crash) < ncpus) {
>                printk(KERN_EMERG "done waiting: %d cpu(s) not responding\n",
> -                       ncpus - cpus_weight(cpus_in_crash));
> +                       ncpus - cpumask_weight(&cpus_in_crash));
>                printk(KERN_EMERG "Activate soft-reset to stop other cpu(s)\n");
> -               cpus_in_sr = CPU_MASK_NONE;
> +               cpumask_clear(&cpus_in_sr);
>                atomic_set(&enter_on_soft_reset, 0);
> -               while (cpus_weight(cpus_in_crash) < ncpus)
> +               while (cpumask_weight(&cpus_in_crash) < ncpus)
>                        cpu_relax();
>        }
>        /*
>         * Make sure all CPUs are entered via soft-reset if the kdump is
>         * invoked using soft-reset.
>         */
> -       if (cpu_isset(cpu, cpus_in_sr))
> +       if (cpumask_test_cpu(cpu, &cpus_in_sr))
>                crash_soft_reset_check(cpu);
>        /* Leave the IPI callback set */
>  }
> @@ -212,7 +212,7 @@ void crash_kexec_secondary(struct pt_regs *regs)
>                         * exited using 'x'(exit and recover) or
>                         * kexec_should_crash() failed for all running tasks.
>                         */
> -                       cpu_clear(cpu, cpus_in_sr);
> +                       cpumask_clear_cpu(cpu, &cpus_in_sr);
>                        local_irq_restore(flags);
>                        return;
>                }
> @@ -226,7 +226,7 @@ void crash_kexec_secondary(struct pt_regs *regs)
>                 * then start kexec boot.
>                 */
>                crash_soft_reset_check(cpu);
> -               cpu_set(crashing_cpu, cpus_in_crash);
> +               cpumask_set_cpu(crashing_cpu, &cpus_in_crash);
>                if (ppc_md.kexec_cpu_down)
>                        ppc_md.kexec_cpu_down(1, 0);
>                machine_kexec(kexec_crash_image);
> @@ -253,7 +253,7 @@ static void crash_kexec_prepare_cpus(int cpu)
>
>  void crash_kexec_secondary(struct pt_regs *regs)
>  {
> -       cpus_in_sr = CPU_MASK_NONE;
> +       cpumask_clear(&cpus_in_sr);
>  }
>  #endif
>
> @@ -345,7 +345,7 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
>        crashing_cpu = smp_processor_id();
>        crash_save_cpu(regs, crashing_cpu);
>        crash_kexec_prepare_cpus(crashing_cpu);
> -       cpu_set(crashing_cpu, cpus_in_crash);
> +       cpumask_set_cpu(crashing_cpu, &cpus_in_crash);
>        crash_kexec_wait_realmode(crashing_cpu);
>
>        machine_kexec_mask_interrupts();
> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
> index 21f30cb..1475df6 100644
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -381,7 +381,7 @@ static void __init cpu_init_thread_core_maps(int tpc)
>        int i;
>
>        threads_per_core = tpc;
> -       threads_core_mask = CPU_MASK_NONE;
> +       cpumask_clear(&threads_core_mask);
>
>        /* This implementation only supports power of 2 number of threads
>         * for simplicity and performance
> @@ -390,7 +390,7 @@ static void __init cpu_init_thread_core_maps(int tpc)
>        BUG_ON(tpc != (1 << threads_shift));
>
>        for (i = 0; i < tpc; i++)
> -               cpu_set(i, threads_core_mask);
> +               cpumask_set_cpu(i, &threads_core_mask);
>
>        printk(KERN_INFO "CPU maps initialized for %d thread%s per core\n",
>               tpc, tpc > 1 ? "s" : "");
> diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
> index 9f9c204..da584a9 100644
> --- a/arch/powerpc/kernel/smp.c
> +++ b/arch/powerpc/kernel/smp.c
> @@ -507,7 +507,7 @@ int cpu_first_thread_of_core(int core)
>  }
>  EXPORT_SYMBOL_GPL(cpu_first_thread_of_core);
>
> -/* Must be called when no change can occur to cpu_present_map,
> +/* Must be called when no change can occur to cpu_present_mask,
>  * i.e. during cpu online or offline.
>  */
>  static struct device_node *cpu_to_l2cache(int cpu)
> @@ -608,7 +608,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
>         * se we pin us down to CPU 0 for a short while
>         */
>        alloc_cpumask_var(&old_mask, GFP_NOWAIT);
> -       cpumask_copy(old_mask, &current->cpus_allowed);
> +       cpumask_copy(old_mask, tsk_cpus_allowed(current));
>        set_cpus_allowed_ptr(current, cpumask_of(boot_cpuid));
>
>        if (smp_ops && smp_ops->setup_cpu)
> diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
> index 5ddb801..af1f8f4 100644
> --- a/arch/powerpc/kernel/traps.c
> +++ b/arch/powerpc/kernel/traps.c
> @@ -221,7 +221,7 @@ void system_reset_exception(struct pt_regs *regs)
>        }
>
>  #ifdef CONFIG_KEXEC
> -       cpu_set(smp_processor_id(), cpus_in_sr);
> +       cpumask_set_cpu(smp_processor_id(), &cpus_in_sr);
>  #endif
>
>        die("System Reset", regs, SIGABRT);
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index 5ec1dad..d6cc587 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1453,7 +1453,7 @@ int arch_update_cpu_topology(void)
>        unsigned int associativity[VPHN_ASSOC_BUFSIZE] = {0};
>        struct sys_device *sysdev;
>
> -       for_each_cpu_mask(cpu, cpu_associativity_changes_mask) {
> +       for_each_cpu(cpu,&cpu_associativity_changes_mask) {
>                vphn_get_associativity(cpu, associativity);
>                nid = associativity_to_nid(associativity);
>
> diff --git a/arch/powerpc/platforms/cell/beat_smp.c b/arch/powerpc/platforms/cell/beat_smp.c
> index 26efc20..fd3cdb4 100644
> --- a/arch/powerpc/platforms/cell/beat_smp.c
> +++ b/arch/powerpc/platforms/cell/beat_smp.c
> @@ -85,7 +85,7 @@ static void smp_beatic_message_pass(int target, int msg)
>
>  static int __init smp_beatic_probe(void)
>  {
> -       return cpus_weight(cpu_possible_map);
> +       return cpumask_weight(cpu_possible_mask);
>  }
>
>  static void __devinit smp_beatic_setup_cpu(int cpu)
> diff --git a/arch/powerpc/platforms/cell/cbe_regs.c b/arch/powerpc/platforms/cell/cbe_regs.c
> index dbc338f..f3917e7 100644
> --- a/arch/powerpc/platforms/cell/cbe_regs.c
> +++ b/arch/powerpc/platforms/cell/cbe_regs.c
> @@ -45,8 +45,8 @@ static struct cbe_thread_map
>        unsigned int cbe_id;
>  } cbe_thread_map[NR_CPUS];
>
> -static cpumask_t cbe_local_mask[MAX_CBE] = { [0 ... MAX_CBE-1] = CPU_MASK_NONE };
> -static cpumask_t cbe_first_online_cpu = CPU_MASK_NONE;
> +static cpumask_t cbe_local_mask[MAX_CBE] = { [0 ... MAX_CBE-1] = {CPU_BITS_NONE} };
> +static cpumask_t cbe_first_online_cpu = { CPU_BITS_NONE };
>
>  static struct cbe_regs_map *cbe_find_map(struct device_node *np)
>  {
> @@ -159,7 +159,8 @@ EXPORT_SYMBOL_GPL(cbe_cpu_to_node);
>
>  u32 cbe_node_to_cpu(int node)
>  {
> -       return find_first_bit( (unsigned long *) &cbe_local_mask[node], sizeof(cpumask_t));
> +       return cpumask_first(&cbe_local_mask[node]);
> +
>  }
>  EXPORT_SYMBOL_GPL(cbe_node_to_cpu);
>
> @@ -268,9 +269,9 @@ void __init cbe_regs_init(void)
>                                thread->regs = map;
>                                thread->cbe_id = cbe_id;
>                                map->be_node = thread->be_node;
> -                               cpu_set(i, cbe_local_mask[cbe_id]);
> +                               cpumask_set_cpu(i, &cbe_local_mask[cbe_id]);
>                                if(thread->thread_id == 0)
while you are here, could you add a space between if and ( ?

> -                                       cpu_set(i, cbe_first_online_cpu);
> +                                       cpumask_set_cpu(i, &cbe_first_online_cpu);
>                        }
>                }
>
> diff --git a/arch/powerpc/platforms/cell/smp.c b/arch/powerpc/platforms/cell/smp.c
> index f774530..56e8fa0 100644
> --- a/arch/powerpc/platforms/cell/smp.c
> +++ b/arch/powerpc/platforms/cell/smp.c
> @@ -77,7 +77,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
>        unsigned int pcpu;
>        int start_cpu;
>
> -       if (cpu_isset(lcpu, of_spin_map))
> +       if (cpumask_test_cpu(lcpu, &of_spin_map))
>                /* Already started by OF and sitting in spin loop */
>                return 1;
>
> @@ -123,7 +123,7 @@ static int __init smp_iic_probe(void)
>  {
>        iic_request_IPIs();
>
> -       return cpus_weight(cpu_possible_map);
> +       return cpumask_weight(cpu_possible_mask);
>  }
>
>  static void __devinit smp_cell_setup_cpu(int cpu)
> @@ -186,13 +186,12 @@ void __init smp_init_cell(void)
>        if (cpu_has_feature(CPU_FTR_SMT)) {
>                for_each_present_cpu(i) {
>                        if (cpu_thread_in_core(i) == 0)
> -                               cpu_set(i, of_spin_map);
> +                               cpumask_set_cpu(i, &of_spin_map);
>                }
> -       } else {
> -               of_spin_map = cpu_present_map;
> -       }
> +       } else
> +               cpumask_copy(&of_spin_map, cpu_present_mask);
>
> -       cpu_clear(boot_cpuid, of_spin_map);
> +       cpumask_clear_cpu(boot_cpuid, &of_spin_map);
>
>        /* Non-lpar has additional take/give timebase */
>        if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) {
> diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
> index 6520385..32cb4e6 100644
> --- a/arch/powerpc/platforms/cell/spufs/sched.c
> +++ b/arch/powerpc/platforms/cell/spufs/sched.c
> @@ -141,7 +141,7 @@ void __spu_update_sched_info(struct spu_context *ctx)
>         * runqueue. The context will be rescheduled on the proper node
>         * if it is timesliced or preempted.
>         */
> -       ctx->cpus_allowed = current->cpus_allowed;
> +       cpumask_copy(&ctx->cpus_allowed, tsk_cpus_allowed(current));
>
>        /* Save the current cpu id for spu interrupt routing. */
>        ctx->last_ran = raw_smp_processor_id();
> diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c
> index ef8c454..7be7c20 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c
> @@ -280,7 +280,7 @@ static int pseries_add_processor(struct device_node *np)
>        }
>
>        for_each_cpu(cpu, tmp) {
> -               BUG_ON(cpumask_test_cpu(cpu, cpu_present_mask));
> +               BUG_ON(cpu_present(cpu));
>                set_cpu_present(cpu, true);
>                set_hard_smp_processor_id(cpu, *intserv++);
>        }
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 33794c1..c160361 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -334,7 +334,7 @@ static void release_output_lock(void)
>
>  int cpus_are_in_xmon(void)
>  {
> -       return !cpus_empty(cpus_in_xmon);
> +       return !cpumask_empty(&cpus_in_xmon);
>  }
>  #endif
>
> @@ -373,7 +373,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
>
>  #ifdef CONFIG_SMP
>        cpu = smp_processor_id();
> -       if (cpu_isset(cpu, cpus_in_xmon)) {
> +       if (cpumask_test_cpu(cpu, &cpus_in_xmon)) {
>                get_output_lock();
>                excprint(regs);
>                printf("cpu 0x%x: Exception %lx %s in xmon, "
> @@ -396,7 +396,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
>        }
>
>        xmon_fault_jmp[cpu] = recurse_jmp;
> -       cpu_set(cpu, cpus_in_xmon);
> +       cpumask_set_cpu(cpu, &cpus_in_xmon);
>
>        bp = NULL;
>        if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF))
> @@ -440,7 +440,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
>                        smp_send_debugger_break(MSG_ALL_BUT_SELF);
>                        /* wait for other cpus to come in */
>                        for (timeout = 100000000; timeout != 0; --timeout) {
> -                               if (cpus_weight(cpus_in_xmon) >= ncpus)
> +                               if (cpumask_weight(&cpus_in_xmon) >= ncpus)
>                                        break;
>                                barrier();
>                        }
> @@ -484,7 +484,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
>                }
>        }
>  leave:
> -       cpu_clear(cpu, cpus_in_xmon);
> +       cpumask_clear_cpu(cpu, &cpus_in_xmon);
>        xmon_fault_jmp[cpu] = NULL;
>  #else
>        /* UP is simple... */
> @@ -630,7 +630,7 @@ static int xmon_iabr_match(struct pt_regs *regs)
>  static int xmon_ipi(struct pt_regs *regs)
>  {
>  #ifdef CONFIG_SMP
> -       if (in_xmon && !cpu_isset(smp_processor_id(), cpus_in_xmon))
> +       if (in_xmon && !cpumask_test_cpu(smp_processor_id(), &cpus_in_xmon))
>                xmon_core(regs, 1);
>  #endif
>        return 0;
> @@ -976,7 +976,7 @@ static int cpu_cmd(void)
>                printf("cpus stopped:");
>                count = 0;
>                for (cpu = 0; cpu < NR_CPUS; ++cpu) {
> -                       if (cpu_isset(cpu, cpus_in_xmon)) {
> +                       if (cpumask_test_cpu(cpu, &cpus_in_xmon)) {
>                                if (count == 0)
>                                        printf(" %x", cpu);
>                                ++count;
> @@ -992,7 +992,7 @@ static int cpu_cmd(void)
>                return 0;
>        }
>        /* try to switch to cpu specified */
> -       if (!cpu_isset(cpu, cpus_in_xmon)) {
> +       if (!cpumask_test_cpu(cpu, &cpus_in_xmon)) {
>                printf("cpu 0x%x isn't in xmon\n", cpu);
>                return 0;
>        }
> --
> 1.7.3.1
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ