26 Sep, 2011

8 commits

  • This patch changes coalesced mmio to create one mmio device per
    zone instead of handling all zones in one device.

    Doing so enables us to take advantage of existing locking and prevents
    a race condition between coalesced mmio registration/unregistration
    and lookups.

    Suggested-by: Avi Kivity
    Signed-off-by: Sasha Levin
    Signed-off-by: Marcelo Tosatti

    Sasha Levin
     
  • The patch raises the hard limit of VCPU count to 254.

    This will allow developers to easily work on scalability
    and will allow users to test high VCPU setups easily without
    patching the kernel.

    To prevent possible issues with current setups, KVM_CAP_NR_VCPUS
    now returns the recommended VCPU limit (which is still 64) - this
    should be a safe value for everybody, while a new KVM_CAP_MAX_VCPUS
    returns the hard limit which is now 254.

    Cc: Avi Kivity
    Cc: Ingo Molnar
    Cc: Marcelo Tosatti
    Cc: Pekka Enberg
    Suggested-by: Pekka Enberg
    Signed-off-by: Sasha Levin
    Signed-off-by: Marcelo Tosatti

    Sasha Levin
     
  • Move the check whether there are available entries to within the spinlock.
    This allows working with larger amount of VCPUs and reduces premature
    exits when using a large number of VCPUs.

    Cc: Avi Kivity
    Cc: Ingo Molnar
    Cc: Marcelo Tosatti
    Cc: Pekka Enberg
    Signed-off-by: Sasha Levin
    Signed-off-by: Marcelo Tosatti

    Sasha Levin
     
  • Using the read/write operation to remove the same code

    Signed-off-by: Xiao Guangrong
    Signed-off-by: Avi Kivity

    Xiao Guangrong
     
  • The operations of read emulation and write emulation are very similar, so we
    can abstract the operation of them, in larter patch, it is used to cleanup the
    same code

    Signed-off-by: Xiao Guangrong
    Signed-off-by: Avi Kivity

    Xiao Guangrong
     
  • If the range spans a page boundary, the mmio access can be broke, fix it as
    write emulation.

    And we already get the guest physical address, so use it to read guest data
    directly to avoid walking guest page table again

    Signed-off-by: Xiao Guangrong
    Signed-off-by: Avi Kivity

    Xiao Guangrong
     
  • Src2CL decode (used for double width shifts) erronously decodes only bit 3
    of %rcx, instead of bits 7:0.

    Fix by decoding %cl in its entirety.

    Signed-off-by: Avi Kivity
    Signed-off-by: Marcelo Tosatti

    Avi Kivity
     
  • __update_clear_spte_slow should return original spte while the
    current code returns low half of original spte combined with high
    half of new spte.

    Signed-off-by: Zhao Jin
    Reviewed-by: Xiao Guangrong
    Signed-off-by: Marcelo Tosatti

    Zhao Jin
     

24 Sep, 2011

21 commits

  • * 'spi/merge' of git://git.secretlab.ca/git/linux-2.6:
    spi: Fix WARN when removing spi-fsl-spi module
    spi/imx: Fix spi-imx when the hardware SPI chipselects are used

    Linus Torvalds
     
  • If CPM mode is not used, the fsl_dummy_rx variable is never allocated. When
    the cleanup attempts to free it, the reference count is zero and a WARN is
    generated. The same CPM mode check used in the initialize is applied to the
    free as well.

    Tested on 2.6.33 with the previous spi_mpc8xxx driver. The renamed
    spi-fsl-spi driver looks to have the same problem.

    Signed-off-by: Jeff Harris
    Signed-off-by: Grant Likely

    Jeff Harris
     
  • sector_t can be different types, so cast it to its largest possible
    type.

    drivers/scsi/qla2xxx/qla_isr.c:1509:5: warning: format '%lx' expects type 'long unsigned int', but argument 5 has type 'sector_t'

    Signed-off-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • SCSI_ISCI needs to select SCSI_SAS_HOST_SMP to ensure that all
    needed symbols are available to it.

    Fixes this build error:

    ERROR: "try_test_sas_gpio_gp_bit" [drivers/scsi/isci/isci.ko] undefined!

    Signed-off-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • * 'perf-tools-for-linus' of git://github.com/acmel/linux:
    perf python: Add missing perf_event__parse_sample 'swapped' parm

    Linus Torvalds
     
  • * 'perf-tools-for-linus' of git://github.com/acmel/linux:
    perf tools: Add support for disabling -Werror via WERROR=0
    perf top: Fix userspace sample addr map offset
    perf symbols: Fix issue with binaries using 16-bytes buildids (v2)
    perf tool: Fix endianness handling of u32 data in samples
    perf sort: Fix symbol sort output by separating unresolved samples by type
    perf symbols: Synthesize anonymous mmap events
    perf record: Create events initially disabled and enable after init
    perf symbols: Add some heuristics for choosing the best duplicate symbol
    perf symbols: Preserve symbol scope when parsing /proc/kallsyms
    perf symbols: /proc/kallsyms does not sort module symbols
    perf symbols: Fix ppc64 SEGV in dso__load_sym with debuginfo files
    perf probe: Fix regression of variable finder

    Linus Torvalds
     
  • * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/radeon/kms: fix DDIA enable on some rs690 systems
    Revert "drm/radeon/kms: fix typo in r100_blit_copy"

    Linus Torvalds
     
  • * 'for-linus' of git://github.com/tiwai/sound:
    ALSA: usb-audio - clear chip->probing on error exit
    ALSA: fm801: Gracefully handle failure of tuner auto-detect
    ALSA: fm801: Fix double free in case of error in tuner detection
    ASoC: Ensure we generate a driver name
    ASoC: Remove bitrotted wm8962_resume()
    ASoC: bf5xx-ad73311: Fix prototype for bf5xx_probe

    Linus Torvalds
     
  • Problem introduced in 936be50, that missed one perf_event__parse_sample
    user, the python binding.

    Reported-by: Linus Torvalds
    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/n/tip-ja4phms9618ggi657plyuch2@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • GCC often introduces new warnings with lots of false positives -
    breaking -Werror builds. WERROR=0 allows one to build perf without much
    fuss - while still encouraging people to send patches to avoid the fuss
    of having to type WERROR=0.

    Bisecting back to commits that produce a (mostly harmless) warning on
    some compilers is more difficult. With WERROR=0 one could bisect without
    worrying about harmless warnings.

    Cc: Ingo Molnar
    Link: http://lkml.kernel.org/r/eac06c7cc4920e5d4830417d466161fb26c7359c.1315514559.git.dvhart@linux.intel.com
    Signed-off-by: Darren Hart
    Signed-off-by: Arnaldo Carvalho de Melo

    Darren Hart
     
  • The 'perf top' tool came from the kernel where we had each DSO (vmlinux,
    modules) loaded just once at a time.

    But userspace may have DSOs loaded in multiple addresses (shared
    libraries), requiring that we use the just resolved map instead of the
    first one found.

    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/n/tip-ag53wz0yllpgers0n2w7hchp@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Buildid can vary in size. According to the man page of ld, buildid can
    be 160 bits (sha1) or 128 bits (md5, uuid). Perf assumes buildid size of
    20 bytes (160 bits) regardless. When dealing with md5 buildids, it would
    thus read more than needed and that would cause mismatches and samples
    without symbols.

    This patch fixes this by taking into account the actual buildid size as
    encoded int he section header. The leftover bytes are also cleared.

    This second version fixes a minor issue with the memset() base position.

    Cc: David S. Miller
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Robert Richter
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/4cc1af3c.8ee7d80a.5a28.ffff868e@mx.google.com
    Signed-off-by: Stephane Eranian
    Signed-off-by: Arnaldo Carvalho de Melo

    Stephane Eranian
     
  • Currently, analyzing PPC data files on x86 the cpu field is always 0 and
    the tid and pid are backwards. For example, analyzing a PPC file on PPC
    the pid/tid fields show:

    rsyslogd 1210/1212

    and analyzing the same PPC file using an x86 perf binary shows:

    rsyslogd 1212/1210

    The problem is that the swap_op method for samples is
    perf_event__all64_swap which assumes all elements in the sample_data
    struct are u64s. cpu, tid and pid are u32s and need to be handled
    individually. Given that the swap is done before the sample is parsed,
    the simplest solution is to undo the 64-bit swap of those elements when
    the sample is parsed and do the proper swap.

    The RAW data field is generic and perf cannot have programmatic knowledge
    of how to treat that data. Instead a warning is given to the user.

    Thanks to Anton Blanchard for providing a data file for a mult-CPU
    PPC system so I could verify the fix for the CPU fields.

    v3 -> v4:
    - fixed use of WARN_ONCE

    v2 -> v3:
    - used WARN_ONCE for message regarding raw data
    - removed struct wrapper around union
    - fixed whitespace issues

    v1 -> v2:
    - added a union for undoing the byte-swap on u64 and redoing swap on
    u32's to address compiler errors (see git commit 65014ab3)

    Cc: Anton Blanchard
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1315321946-16993-1-git-send-email-dsahern@gmail.com
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • I took a profile that suggested 60% of total CPU time was in the
    hypervisor:

    ...
    60.20% [H] 0x33d43c
    4.43% [k] ._spin_lock_irqsave
    1.07% [k] ._spin_lock

    Using perf stat to get the user/kernel/hypervisor breakdown contradicted
    this.

    The problem is we merge all unresolved samples into the one unknown
    bucket. If add a comparison by sample type to sort__sym_cmp we get the
    real picture:

    ...
    57.11% [.] 0x80fbf63c
    4.43% [k] ._spin_lock_irqsave
    1.07% [k] ._spin_lock
    0.65% [H] 0x33d43c

    So it was almost all userspace, not hypervisor as the initial profile
    suggested.

    I found another issue while adding this. Symbol sorting sometimes shows
    multiple entries for the unknown bucket:

    ...
    16.65% [.] 0x6cd3a8
    7.25% [.] 0x422460
    5.37% [.] yylex
    4.79% [.] malloc
    4.78% [.] _int_malloc
    4.03% [.] _int_free
    3.95% [.] hash_source_code_string
    2.82% [.] 0x532908
    2.64% [.] 0x36b538
    0.94% [H] 0x8000000000e132a4
    0.82% [H] 0x800000000000e8b0

    This happens because we aren't consistent with our sorting. On
    one hand we check to see if both symbols match and for two unresolved
    samples sym is NULL so we match:

    if (left->ms.sym == right->ms.sym)
    return 0;

    On the other hand we use sample IP for unresolved samples when
    comparing against a symbol:

    ip_l = left->ms.sym ? left->ms.sym->start : left->ip;
    ip_r = right->ms.sym ? right->ms.sym->start : right->ip;

    This means unresolved samples end up spread across the rbtree and we
    can't merge them all.

    If we use cmp_null all unresolved samples will end up in the one bucket
    and the output makes more sense:

    ...
    39.12% [.] 0x36b538
    5.37% [.] yylex
    4.79% [.] malloc
    4.78% [.] _int_malloc
    4.03% [.] _int_free
    3.95% [.] hash_source_code_string
    2.26% [H] 0x800000000000e8b0

    Acked-by: Eric B Munson
    Cc: Eric B Munson
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Ian Munsie
    Link: http://lkml.kernel.org/r/20110831115145.4f598ab2@kryten
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • perf_event__synthesize_mmap_events does not create anonymous mmap events
    even though the kernel does. As a result an already running application
    with dynamically created code will not get profiled - all samples end up
    in the unknown bucket.

    This patch skips any entries with '[' in the name to avoid adding events
    for special regions (eg the vsyscall page). All other executable mmaps
    are assumed to be anonymous and an event is synthesized.

    Acked-by: Pekka Enberg
    Cc: Eric B Munson
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Pekka Enberg
    Link: http://lkml.kernel.org/r/20110830091506.60b51fe8@kryten
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • perf-record currently creates events enabled. When doing a system wide
    collection (-a arg) this causes data collection for perf's
    initialization activities -- eg., perf_event__synthesize_threads().

    For some events (e.g., context switch S/W event or tracepoints like
    syscalls) perf's initialization causes a lot of events to be captured
    frequently generating "Check IO/CPU overload!" warnings on larger
    systems (e.g., 2 socket, quad core, hyperthreading).

    perf's initialization phase can be skipped by creating events
    disabled and then enabling them once the initialization is done.

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1314289075-14706-1-git-send-email-dsahern@gmail.com
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • Try and pick the best symbol based on a few heuristics:

    - Prefer a non weak symbol over a weak one
    - Prefer a global symbol over a non global one
    - Prefer a symbol with less underscores (idea taken from kallsyms.c)
    - If all else fails, choose the symbol with the longest name

    Cc: Eric B Munson
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20110824065243.161953371@samba.org
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • kallsyms__parse capitalises the symbol type, so every symbol is marked
    global. Remove this and fix symbol_type__is_a to handle both local and
    global symbols.

    Cc: Eric B Munson
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20110824065243.077125989@samba.org
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • kallsyms__parse assumes that /proc/kallsyms is sorted and sets the end
    of the previous symbol to the start of the current one.

    Unfortunately module symbols are not sorted, eg:

    ffffffffa0081f30 t e1000_clean_rx_irq [e1000e]
    ffffffffa00817a0 t e1000_alloc_rx_buffers [e1000e]

    Some symbols end up with a negative length and others have a length
    larger than they should. This results in confusing perf output.

    We already have a function to fixup the end of zero length symbols so
    use that instead.

    Cc: Eric B Munson
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20110824065242.969681349@samba.org
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • 64bit PowerPC debuginfo files have an empty function descriptor section.
    I hit a SEGV when perf tried to use this section for symbol resolution.

    To fix this we need to check the section is valid and we can do this by
    checking for type SHT_PROGBITS.

    Cc:
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Eric B Munson
    Link: http://lkml.kernel.org/r/20110824065242.895239970@samba.org
    Signed-off-by: Anton Blanchard
    Signed-off-by: Arnaldo Carvalho de Melo

    Anton Blanchard
     
  • Fix to call convert_variable() if previous call does not fail.

    To call convert_variable, it ensures "ret" is 0. However, since
    "ret" has the return value of synthesize_perf_probe_arg() which
    always returns positive value if it succeeded, perf probe doesn't
    call convert_variable(). This will cause a SEGV when we add an
    event with arguments.

    This has to be fixed as it ensures "ret" is greater than 0
    (or not negative).

    This regression has been introduced by my previous patch, f182e3e1.

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Pekka Enberg
    Cc: Peter Zijlstra
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20110820053922.3286.65805.stgit@fedora15
    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Arnaldo Carvalho de Melo

    Masami Hiramatsu
     

23 Sep, 2011

11 commits

  • Takashi Iwai
     
  • The Terratec Aureon 5.1 USB sound card support is broken since kernel
    2.6.39.
    2.6.39 introduced power management support for USB sound cards that added
    a probing flag in struct snd_usb_audio.

    During the probe of the card it gives following error message :

    usb 7-2: new full speed USB device number 2 using uhci_hcd
    cannot find UAC_HEADER
    snd-usb-audio: probe of 7-2:1.3 failed with error -5
    input: USB Audio as
    /devices/pci0000:00/0000:00:1d.1/usb7/7-2/7-2:1.3/input/input6
    generic-usb 0003:0CCD:0028.0001: input: USB HID v1.00 Device [USB Audio]
    on usb-0000:00:1d.1-2/input3

    I can not comment about that "cannot find UAC_HEADER" error, but until
    2.6.38 the card worked anyway.
    With 2.6.39 chip->probing remains 1 on error exit, and any later ioctl
    stops in snd_usb_autoresume with -ENODEV.

    Signed-off-by: Thomas Pfaff
    Cc: [2.6.39+]
    Signed-off-by: Takashi Iwai

    Thomas Pfaff
     
  • DVOOutputControl checks the value of of bios scratch reg 3
    on some tables and assumes the encoder is already enabled
    if the DFP2_ACTIVE bit is set. Clear that bit so the table
    sets the DDIA enable bit properly.

    Signed-off-by: Alex Deucher
    Cc: stable@kernel.org
    Signed-off-by: Dave Airlie

    Alex Deucher
     
  • This reverts commit 18b4fada275dd2b6dd9db904ddf70fe39e272222.

    This code was correct, apologies to anyone who noticed things broke.

    revert contents are different due to another commit in between.

    Signed-off-by: Dave Airlie

    Dave Airlie
     
  • * 'for-linus' of git://git.selinuxproject.org/~jmorris/linux-security:
    TPM: Zero buffer after copying to userspace
    TPM: Call tpm_transmit with correct size
    TPM: tpm_nsc: Fix a double free of pdev in cleanup_nsc
    TPM: TCG_ATMEL should depend on HAS_IOPORT

    Linus Torvalds
     
  • Since the buffer might contain security related data it might be a good idea to
    zero the buffer after we have copied it to userspace.

    This got assigned CVE-2011-1162.

    Signed-off-by: Rajiv Andrade
    Cc: Stable Kernel
    Signed-off-by: James Morris

    Peter Huewe
     
  • This patch changes the call of tpm_transmit by supplying the size of the
    userspace buffer instead of TPM_BUFSIZE.

    This got assigned CVE-2011-1161.

    [The first hunk didn't make sense given one could expect
    way less data than TPM_BUFSIZE, so added tpm_transmit boundary
    check over bufsiz instead
    The last parameter of tpm_transmit() reflects the amount
    of data expected from the device, and not the buffer size
    being supplied to it. It isn't ideal to parse it directly,
    so we just set it to the maximum the input buffer can handle
    and let the userspace API to do such job.]

    Signed-off-by: Rajiv Andrade
    Cc: Stable Kernel
    Signed-off-by: James Morris

    Peter Huewe
     
  • platform_device_unregister() will release all resources
    and remove it from the subsystem, then drop reference count by
    calling platform_device_put().

    We should not call kfree(pdev) after platform_device_unregister(pdev).

    Signed-off-by: Axel Lin
    Signed-off-by: Rajiv Andrade
    Signed-off-by: James Morris

    Axel Lin
     
  • On m68k, I get:

    drivers/char/tpm/tpm_atmel.h: In function ‘atmel_get_base_addr’:
    drivers/char/tpm/tpm_atmel.h:129: error: implicit declaration of function ‘ioport_map’
    drivers/char/tpm/tpm_atmel.h:129: warning: return makes pointer from integer without a cast

    The code in tpm_atmel.h supports PPC64 (using the device tree and ioremap())
    and "anything else" (using ioport_map()). However, ioportmap() is only
    available on platforms that set HAS_IOPORT.

    Although PC64 seems to have HAS_IOPORT, a "depends on HAS_IOPORT" should work,
    but I think it's better to expose the special PPC64 handling explicit using
    "depends on PPC64 || HAS_IOPORT".

    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: Rajiv Andrade
    Signed-off-by: James Morris

    Geert Uytterhoeven
     
  • Commit e27e6151b154 ("mm/thp: use conventional format for boolean
    attributes") changed

    /sys/kernel/mm/transparent_hugepage/khugepaged/defrag

    to be tuned by using 1 (enabled) or 0 (disabled) instead of "yes" and
    "no", respectively.

    Update the documentation.

    Signed-off-by: David Rientjes
    Signed-off-by: Linus Torvalds

    David Rientjes
     
  • As the Amiga Zorro II address space is limited to 8.5 MiB and Zorro
    devices can contain only one BAR, several Amiga Zorro II expansion
    boards (mainly graphics cards) contain multiple Zorro devices: a small
    one for the control registers and one (or more) for the graphics memory.

    The conversion of cirrusfb to the new driver framework introduced a
    regression: the driver contains a zorro_driver for the first Zorro
    device, and uses the (old) zorro_find_device() call to find the second
    Zorro device.

    However, as the Zorro core calls device_register() as soon as a Zorro
    device is identified, it may not have identified the second Zorro device
    belonging to the same physical Zorro expansion card. Hence cirrusfb
    could no longer find the second part of the Picasso II graphics card,
    causing a NULL pointer dereference.

    Defer the registration of Zorro devices with the driver framework until
    all Zorro devices have been identified to fix this.

    Note that the alternative solution (modifying cirrusfb to register a
    zorro_driver for all Zorro devices belonging to a graphics card, instead
    of only for the first one, and adding a synchronization mechanism to
    defer initialization until all have been found), is not an option, as on
    some cards one device may be optional (e.g. the second bank of 2 MiB of
    graphics memory on the Picasso IV in Zorro II mode).

    Reported-by: Ingo Jürgensmann
    Signed-off-by: Geert Uytterhoeven
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Geert Uytterhoeven