01 Jul, 2011

3 commits

  • Add a NODE level to the generic cache events which is used to measure
    local vs remote memory accesses. Like all other cache events, an
    ACCESS is HIT+MISS, if there is no way to distinguish between reads
    and writes do reads only etc..

    The below needs filling out for !x86 (which I filled out with
    unsupported events).

    I'm fairly sure ARM can leave it like that since it doesn't strike me as
    an architecture that even has NUMA support. SH might have something since
    it does appear to have some NUMA bits.

    Sparc64, PowerPC and MIPS certainly want a good look there since they
    clearly are NUMA capable.

    Signed-off-by: Peter Zijlstra
    Cc: David Miller
    Cc: Anton Blanchard
    Cc: David Daney
    Cc: Deng-Cheng Zhu
    Cc: Paul Mundt
    Cc: Will Deacon
    Cc: Robert Richter
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1303508226.4865.8.camel@laptop
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • The nmi parameter indicated if we could do wakeups from the current
    context, if not, we would set some state and self-IPI and let the
    resulting interrupt do the wakeup.

    For the various event classes:

    - hardware: nmi=0; PMI is in fact an NMI or we run irq_work_run from
    the PMI-tail (ARM etc.)
    - tracepoint: nmi=0; since tracepoint could be from NMI context.
    - software: nmi=[0,1]; some, like the schedule thing cannot
    perform wakeups, and hence need 0.

    As one can see, there is very little nmi=1 usage, and the down-side of
    not using it is that on some platforms some software events can have a
    jiffy delay in wakeup (when arch_irq_work_raise isn't implemented).

    The up-side however is that we can remove the nmi parameter and save a
    bunch of conditionals in fast paths.

    Signed-off-by: Peter Zijlstra
    Cc: Michael Cree
    Cc: Will Deacon
    Cc: Deng-Cheng Zhu
    Cc: Anton Blanchard
    Cc: Eric B Munson
    Cc: Heiko Carstens
    Cc: Paul Mundt
    Cc: David S. Miller
    Cc: Frederic Weisbecker
    Cc: Jason Wessel
    Cc: Don Zickus
    Link: http://lkml.kernel.org/n/tip-agjev8eu666tvknpb3iaj0fg@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Commit e360adbe29 ("irq_work: Add generic hardirq context
    callbacks") fouled up the ppc bit, not properly naming the
    arch specific function that raises the 'self-IPI'.

    Cc: Huang Ying
    Cc: Benjamin Herrenschmidt
    Cc: Anton Blanchard
    Cc: Eric B Munson
    Cc: stable@kernel.org # 37+
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-eg0aqien8p1aqvzu9dft6dtv@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

28 Jun, 2011

1 commit

  • commit 21a3c96 uses node_start/end_pfn(nid) for detection start/end
    of nodes. But, it's not defined in linux/mmzone.h but defined in
    /arch/???/include/mmzone.h which is included only under
    CONFIG_NEED_MULTIPLE_NODES=y.

    Then, we see
    mm/page_cgroup.c: In function 'page_cgroup_init':
    mm/page_cgroup.c:308: error: implicit declaration of function 'node_start_pfn'
    mm/page_cgroup.c:309: error: implicit declaration of function 'node_end_pfn'

    So, fixiing page_cgroup.c is an idea...

    But node_start_pfn()/node_end_pfn() is a very generic macro and
    should be implemented in the same manner for all archs.
    (m32r has different implementation...)

    This patch removes definitions of node_start/end_pfn() in each archs
    and defines a unified one in linux/mmzone.h. It's not under
    CONFIG_NEED_MULTIPLE_NODES, now.

    A result of macro expansion is here (mm/page_cgroup.c)

    for !NUMA
    start_pfn = ((&contig_page_data)->node_start_pfn);
    end_pfn = ({ pg_data_t *__pgdat = (&contig_page_data); __pgdat->node_start_pfn + __pgdat->node_spanned_pages;});

    for NUMA (x86-64)
    start_pfn = ((node_data[nid])->node_start_pfn);
    end_pfn = ({ pg_data_t *__pgdat = (node_data[nid]); __pgdat->node_start_pfn + __pgdat->node_spanned_pages;});

    Changelog:
    - fixed to avoid using "nid" twice in node_end_pfn() macro.

    Reported-and-acked-by: Randy Dunlap
    Reported-and-tested-by: Ingo Molnar
    Acked-by: Mel Gorman
    Signed-off-by: KAMEZAWA Hiroyuki
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     

16 Jun, 2011

1 commit

  • RTC_CLASS is changed to bool, so 'm' is invalid.

    Signed-off-by: Wanlong Gao
    Acked-by: Mike Frysinger
    Acked-by: Wolfram Sang
    Acked-by: Hans-Christian Egtvedt
    Acked-by: Benjamin Herrenschmidt
    Cc: Guan Xuetao
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wanlong Gao
     

09 Jun, 2011

3 commits

  • When using 64K pages with a separate cpio rootfs, U-Boot will align
    the rootfs on a 4K page boundary. When the memory is reserved, and
    subsequent early memblock_alloc is called, it will allocate memory
    between the 64K page alignment and reserved memory. When the reserved
    memory is subsequently freed, it is done so by pages, causing the
    early memblock_alloc requests to be re-used, which in my case, caused
    the device-tree to be clobbered.

    This patch forces the reserved memory for initrd to be kernel page
    aligned, and will move the device tree if it overlaps with the range
    extension of initrd. This patch will also consolidate the identical
    function free_initrd_mem() from mm/init_32.c, init_64.c to mm/mem.c,
    and adds the same range extension when freeing initrd. free_initrd_mem()
    is also moved to the __init section.

    Many thanks to Milton Miller for his input on this patch.

    [BenH: Fixed build without CONFIG_BLK_DEV_INITRD]

    Signed-off-by: Dave Carroll
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • Benjamin Herrenschmidt
     
  • dtc was moved and .gitignores have been added to the new location. So, we can
    delete the old, forgotten ones.

    Signed-off-by: Wolfram Sang
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Grant Likely

    Wolfram Sang
     

03 Jun, 2011

3 commits


31 May, 2011

1 commit


29 May, 2011

2 commits

  • * setns:
    ns: Wire up the setns system call

    Done as a merge to make it easier to fix up conflicts in arm due to
    addition of sendmmsg system call

    Linus Torvalds
     
  • 32bit and 64bit on x86 are tested and working. The rest I have looked
    at closely and I can't find any problems.

    setns is an easy system call to wire up. It just takes two ints so I
    don't expect any weird architecture porting problems.

    While doing this I have noticed that we have some architectures that are
    very slow to get new system calls. cris seems to be the slowest where
    the last system calls wired up were preadv and pwritev. avr32 is weird
    in that recvmmsg was wired up but never declared in unistd.h. frv is
    behind with perf_event_open being the last syscall wired up. On h8300
    the last system call wired up was epoll_wait. On m32r the last system
    call wired up was fallocate. mn10300 has recvmmsg as the last system
    call wired up. The rest seem to at least have syncfs wired up which was
    new in the 2.6.39.

    v2: Most of the architecture support added by Daniel Lezcano
    v3: ported to v2.6.36-rc4 by: Eric W. Biederman
    v4: Moved wiring up of the system call to another patch
    v5: ported to v2.6.39-rc6
    v6: rebased onto parisc-next and net-next to avoid syscall conflicts.
    v7: ported to Linus's latest post 2.6.39 tree.

    >  arch/blackfin/include/asm/unistd.h     |    3 ++-
    >  arch/blackfin/mach-common/entry.S      |    1 +
    Acked-by: Mike Frysinger

    Oh - ia64 wiring looks good.
    Acked-by: Tony Luck

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

28 May, 2011

4 commits

  • * 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (45 commits)
    ARM: 6945/1: Add unwinding support for division functions
    ARM: kill pmd_off()
    ARM: 6944/1: mm: allow ASID 0 to be allocated to tasks
    ARM: 6943/1: mm: use TTBR1 instead of reserved context ID
    ARM: 6942/1: mm: make TTBR1 always point to swapper_pg_dir on ARMv6/7
    ARM: 6941/1: cache: ensure MVA is cacheline aligned in flush_kern_dcache_area
    ARM: add sendmmsg syscall
    ARM: 6863/1: allow hotplug on msm
    ARM: 6832/1: mmci: support for ST-Ericsson db8500v2
    ARM: 6830/1: mach-ux500: force PrimeCell revisions
    ARM: 6829/1: amba: make hardcoded periphid override hardware
    ARM: 6828/1: mach-ux500: delete SSP PrimeCell ID
    ARM: 6827/1: mach-netx: delete hardcoded periphid
    ARM: 6940/1: fiq: Briefly document driver responsibilities for suspend/resume
    ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2
    ARM: 6914/1: sparsemem: fix highmem detection when using SPARSEMEM
    ARM: 6913/1: sparsemem: allow pfn_valid to be overridden when using SPARSEMEM
    at91: drop at572d940hf support
    at91rm9200: introduce at91rm9200_set_type to specficy cpu package
    at91: drop boot_params and PLAT_PHYS_OFFSET
    ...

    Linus Torvalds
     
  • Russell King
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
    PM: Fix PM QOS's user mode interface to work with ASCII input
    PM / Hibernate: Update kerneldoc comments in hibernate.c
    PM / Hibernate: Remove arch_prepare_suspend()
    PM / Hibernate: Update some comments in core hibernate code

    Linus Torvalds
     
  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc/fsl_rio: Error interrupt handler for sRIO on MPC85xx
    powerpc/fsl_rio: move machine_check handler
    powerpc/fsl_lbc: Add workaround for ELBC-A001 erratum

    Linus Torvalds
     

27 May, 2011

3 commits

  • By the previous style change, CONFIG_GENERIC_FIND_NEXT_BIT,
    CONFIG_GENERIC_FIND_BIT_LE, and CONFIG_GENERIC_FIND_LAST_BIT are not used
    to test for existence of find bitops anymore.

    Signed-off-by: Akinobu Mita
    Acked-by: Greg Ungerer
    Cc: Arnd Bergmann
    Cc: Russell King
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     
  • The ns_cgroup is an annoying cgroup at the namespace / cgroup frontier and
    leads to some problems:

    * cgroup creation is out-of-control
    * cgroup name can conflict when pids are looping
    * it is not possible to have a single process handling a lot of
    namespaces without falling in a exponential creation time
    * we may want to create a namespace without creating a cgroup

    The ns_cgroup was replaced by a compatibility flag 'clone_children',
    where a newly created cgroup will copy the parent cgroup values.
    The userspace has to manually create a cgroup and add a task to
    the 'tasks' file.

    This patch removes the ns_cgroup as suggested in the following thread:

    https://lists.linux-foundation.org/pipermail/containers/2009-June/018616.html

    The 'cgroup_clone' function is removed because it is no longer used.

    This is a userspace-visible change. Commit 45531757b45c ("cgroup: notify
    ns_cgroup deprecated") (merged into 2.6.27) caused the kernel to emit a
    printk warning users that the feature is planned for removal. Since that
    time we have heard from XXX users who were affected by this.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Serge E. Hallyn
    Cc: Eric W. Biederman
    Cc: Jamal Hadi Salim
    Reviewed-by: Li Zefan
    Acked-by: Paul Menage
    Acked-by: Matt Helsley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Lezcano
     
  • Benjamin Herrenschmidt
     

26 May, 2011

12 commits

  • This patch adds MSI support for 440SPe, 460Ex, 460Sx and 405Ex.

    Signed-off-by: Rupjyoti Sarmah
    Signed-off-by: Tirumala R Marri
    Acked-by: Josh Boyer
    Signed-off-by: Benjamin Herrenschmidt

    Rupjyoti Sarmah
     
  • Instead of looping over each irq and checking against the irq array
    bounds, adjust the bounds before looping.

    The old code will not free any irq if the irq + count is above
    irq_virq_count because the test in the loop is testing irq + count
    instead of irq + i.

    This code checks the limits to avoid unsigned integer overflows.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • The radix-tree code uses call_rcu when freeing internal elements.
    We must protect against the elements being freed while we traverse
    the tree, even if the returned pointer will still be valid.

    While preparing a patch to expand the context in which
    irq_radix_revmap_lookup will be called, I realized that the
    radix tree was not locked.

    When asked

    For a normal call_rcu usage, is it allowed to read the structure in
    irq_enter / irq_exit, without additional rcu_read_lock? Could an
    element freed with call_rcu advance with the cpu still between
    irq_enter/irq_exit (and irq_disabled())?

    Paul McKenney replied:

    Absolutely illegal to do so. OK for call_rcu_sched(), but a
    flaming bug for call_rcu().

    And thank you very much for finding this!!!

    Further analysis:

    In the current CONFIG_TREE_RCU implementation. CONFIG_TREE_PREEMPT_RCU
    (and CONFIG_TINY_PREEMPT_RCU) uses explicit counters.

    These counters are reflected from per-CPU to global in the
    scheduling-clock-interrupt handler, so disabling irq does prevent the
    grace period from completing. But there are real-time implementations
    (such as the one use by the Concurrent guys) where disabling irq
    does -not- prevent the grace period from completing.

    While an alternative fix would be to switch radix-tree to rcu_sched, I
    don't want to audit the other users of radix trees (nor put alternative
    freeing in the library). The normal overhead for rcu_read_lock and
    unlock are a local counter increment and decrement.

    This does not show up in the rcu lockdep because in 2.6.34 commit
    2676a58c98 (radix-tree: Disable RCU lockdep checking in radix tree)
    deemed it too hard to pass the condition of the protecting lock
    to the library.

    Signed-off-by: Milton Miller
    Reviewed-by: Paul E. McKenney
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • Look up the descriptor and check that it is found in handle_one_irq
    before checking if we are on the irq stack, and call the handler
    directly using the descriptor if we are on the stack.

    We need check irq_to_desc finds the descriptor to avoid a NULL
    pointer dereference. It could have failed because the number from
    ppc_md.get_irq was above NR_IRQS, or various exceptional conditions
    with sparse irqs (eg race conditions while freeing an irq if its was
    not shutdown in the controller).

    fe12bc2c99 (genirq: Uninline and sanity check generic_handle_irq())
    moved generic_handle_irq out of line to allow its use by interrupt
    controllers in modules. However, handle_one_irq is core arch code.
    It already knows the details of struct irq_desc and handling irqs in
    the nested irq case. This will avoid the extra stack frame to return
    the value we don't check.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • Since kmem caches are allocated before init_IRQ as noted in 3af259d155
    (powerpc: Radix trees are available before init_IRQ), we now call
    kmalloc in all cases and can can always call kfree if we are asked
    to allocate a duplicate or conflicting IRQ_HOST_MAP_LEGACY host.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • The comment claims we will call host->ops->map() to update the flags if
    we find a previously established mapping, but we never did. We used
    to call remap, but that call was removed in da05198002 (powerpc: Remove
    irq_host_ops->remap hook).

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • Rename functions and arguments to reflect current usage. iic_cause_ipi
    becomes iic_message_pass and iic_ipi_to_irq becomes iic_msg_to_irq,
    and iic_request_ipi now takes a message (msg) instead of an ipi number.
    Also mesg is renamed to msg.

    Commit f1072939b6 (powerpc: Remove checks for MSG_ALL and
    MSG_ALL_BUT_SELF) connected the smp_message_pass hook for cell to the
    underlying iic_cause_IPI, a platform unique name. Later 23d72bfd8f
    (powerpc: Consolidate ipi message mux and demux) added a cause_ipi
    hook to the smp_ops, also used in message passing, but for controllers
    that can not send 4 unique messages and require multiplexing. It is
    even more confusing that the both take two arguments, but one is the
    small message ordinal and the other is an opaque long data associated
    with the cpu.

    Since cell iic maps messages one to one to ipi irqs, rename the
    function and argument to translate from ipi to message. Also make it
    clear that iic_request_ipi takes a message number as the argument
    for which ipi to create and request.

    No functionional change, just renames to avoid future confusion.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • The cell iic interrupt controller has enough software caused interrupts
    to use a unique interrupt for each of the 4 messages powerpc uses.
    This means each interrupt gets its own irq action/data combination.

    Use the seperate, optimized, arch common ipi action functions
    registered via the helper smp_request_message_ipi instead passing the
    message as action data to a single action that then demultipexes to
    the required acton via a switch statement.

    smp_request_message_ipi will register the action as IRQF_PER_CPU
    and IRQF_DISABLED, and WARN if the allocation fails for some reason,
    so no need to print on that failure. It will return positive if
    the message will not be used by the kernel, in which case we can
    free the virq.

    In addition to elimiating inefficient code, this also corrects the
    error that a kernel built with kexec but without a debugger would
    not register the ipi for kdump to notify the other cpus of a crash.

    This also restores the debugger action to be static to kernel/smp.c.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     
  • When page coalescing support was added recently, the MAX_HCALL_OPCODE
    define was not updated for the newly added H_GET_MPP_X hcall.

    Signed-off-by: Brian King
    Signed-off-by: Benjamin Herrenschmidt

    Brian King
     
  • Commit 0837e3242c73566fc1c0196b4ec61779c25ffc93 fixes a situation on POWER7
    where events can roll back if a specualtive event doesn't actually complete.
    This can raise a performance monitor exception. We need to catch this to ensure
    that we reset the PMC. In all cases the PMC will be less than 256 cycles from
    overflow.

    This patch lifts Anton's fix for the problem in perf and applies it to oprofile
    as well.

    Signed-off-by: Eric B Munson
    Cc: # as far back as it applies cleanly
    Signed-off-by: Benjamin Herrenschmidt

    Eric B Munson
     
  • This patch implements the raw syscall tracepoints on PowerPC and exports
    them for ftrace syscalls to use.

    To minimise reworking existing code, I slightly re-ordered the thread
    info flags such that the new TIF_SYSCALL_TRACEPOINT bit would still fit
    within the 16 bits of the andi. instruction's UI field. The instructions
    in question are in /arch/powerpc/kernel/entry_{32,64}.S to and the
    _TIF_SYSCALL_T_OR_A with the thread flags to see if system call tracing
    is enabled.

    In the case of 64bit PowerPC, arch_syscall_addr and
    arch_syscall_match_sym_name are overridden to allow ftrace syscalls to
    work given the unusual system call table structure and symbol names that
    start with a period.

    Signed-off-by: Ian Munsie
    Signed-off-by: Benjamin Herrenschmidt

    Ian Munsie
     
  • Russell King
     

25 May, 2011

7 commits

  • …/git/tip/linux-2.6-tip

    * 'timers-ptp-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    ptp: Fix dp83640 build warning when building statically
    ptp: Added a clock driver for the National Semiconductor PHYTER.
    ptp: Added a clock driver for the IXP46x.
    ptp: Added a clock that uses the eTSEC found on the MPC85xx.
    ptp: Added a brand new class driver for ptp clocks.

    Linus Torvalds
     
  • Most arches define CONFIG_DEBUG_STACK_USAGE exactly the same way. Move it
    to lib/Kconfig.debug so each arch doesn't have to define it. This
    obviously makes the option generic, but that's fine because the config is
    already used in generic code.

    It's not obvious to me that sysrq-P actually does anything caution by
    keeping the most inclusive wording.

    Signed-off-by: Stephen Boyd
    Cc: Chris Metcalf
    Acked-by: David S. Miller
    Acked-by: Richard Weinberger
    Acked-by: Mike Frysinger
    Cc: Russell King
    Cc: Hirokazu Takata
    Acked-by: Ralf Baechle
    Cc: Paul Mackerras
    Acked-by: Benjamin Herrenschmidt
    Cc: Chen Liqin
    Cc: Lennox Wu
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Boyd
     
  • DEBUG_PER_CPU_MAPS is used in lib/cpumask.c as well as in
    inlcude/linux/cpumask.h and thus it has outgrown its use within x86 and
    powerpc alone. Any arch with SMP support may want to get some more
    debugging, so make this option generic.

    Signed-off-by: Stephen Boyd
    Cc:
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Acked-by: Benjamin Herrenschmidt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Boyd
     
  • In case other architectures require RCU freed page-tables to implement
    gup_fast() and software filled hashes and similar things, provide the
    means to do so by moving the logic into generic code.

    Signed-off-by: Peter Zijlstra
    Requested-by: David Miller
    Cc: Benjamin Herrenschmidt
    Cc: Martin Schwidefsky
    Cc: Russell King
    Cc: Paul Mundt
    Cc: Jeff Dike
    Cc: Richard Weinberger
    Cc: Tony Luck
    Cc: KAMEZAWA Hiroyuki
    Cc: Hugh Dickins
    Cc: Mel Gorman
    Cc: KOSAKI Motohiro
    Cc: Nick Piggin
    Cc: Namhyung Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Fix up powerpc to the new mmu_gather stuff.

    PPC has an extra batching queue to RCU free the actual pagetable
    allocations, use the ARCH extentions for that for now.

    For the ppc64_tlb_batch, which tracks the vaddrs to unhash from the
    hardware hash-table, keep using per-cpu arrays but flush on context switch
    and use a TLF bit to track the lazy_mmu state.

    Signed-off-by: Peter Zijlstra
    Acked-by: Benjamin Herrenschmidt
    Cc: David Miller
    Cc: Martin Schwidefsky
    Cc: Russell King
    Cc: Paul Mundt
    Cc: Jeff Dike
    Cc: Richard Weinberger
    Cc: Tony Luck
    Cc: KAMEZAWA Hiroyuki
    Cc: Hugh Dickins
    Cc: Mel Gorman
    Cc: KOSAKI Motohiro
    Cc: Nick Piggin
    Cc: Namhyung Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Russell King
     
  • All architectures supporting hibernation define
    arch_prepare_suspend() as an empty function, so remove it.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki