1. 12 3月, 2013 1 次提交
    • I
      xen: arm: mandate EABI and use generic atomic operations. · 85323a99
      Ian Campbell 提交于
      Rob Herring has observed that c81611c4 "xen: event channel arrays are
      xen_ulong_t and not unsigned long" introduced a compile failure when building
      without CONFIG_AEABI:
      
      /tmp/ccJaIZOW.s: Assembler messages:
      /tmp/ccJaIZOW.s:831: Error: even register required -- `ldrexd r5,r6,[r4]'
      
      Will Deacon pointed out that this is because OABI does not require even base
      registers for 64-bit values. We can avoid this by simply using the existing
      atomic64_xchg operation and the same containerof trick as used by the cmpxchg
      macros. However since this code is used on memory which is shared with the
      hypervisor we require proper atomic instructions and cannot use the generic
      atomic64 callbacks (which are based on spinlocks), therefore add a dependency
      on !GENERIC_ATOMIC64. Since we already depend on !CPU_V6 there isn't much
      downside to this.
      
      While thinking about this we also observed that OABI has different struct
      alignment requirements to EABI, which is a problem for hypercall argument
      structs which are shared with the hypervisor and which must be in EABI layout.
      Since I don't expect people to want to run OABI kernels on Xen depend on
      CONFIG_AEABI explicitly too (although it also happens to be enforced by the
      !GENERIC_ATOMIC64 requirement too).
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Rob Herring <robherring2@gmail.com>
      Acked-by: NStefano Stabellini <Stefano.Stabellini@eu.citrix.com>
      Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      85323a99
  2. 20 2月, 2013 2 次提交
  3. 17 2月, 2013 2 次提交
  4. 14 2月, 2013 2 次提交
    • A
      burying unused conditionals · d64008a8
      Al Viro 提交于
      __ARCH_WANT_SYS_RT_SIGACTION,
      __ARCH_WANT_SYS_RT_SIGSUSPEND,
      __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND,
      __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL - not used anymore
      CONFIG_GENERIC_{SIGALTSTACK,COMPAT_RT_SIG{ACTION,QUEUEINFO,PENDING,PROCMASK}} -
      can be assumed always set.
      d64008a8
    • A
      ARM: disable virt_to_bus/virt_to_bus almost everywhere · a5d533ee
      Arnd Bergmann 提交于
      We are getting a number of warnings about the use of the deprecated
      bus_to_virt function in drivers using the ARM ISA DMA API:
      
      drivers/parport/parport_pc.c: In function 'parport_pc_fifo_write_block_dma':
      drivers/parport/parport_pc.c:622:3: warning: 'bus_to_virt' is deprecated
      (declared at arch/arm/include/asm/memory.h:253) [-Wdeprecated-declarations]
      
      This is only because that function gets used by the inline
      set_dma_addr() helper. We know that any driver for the ISA DMA API
      is correctly using the DMA addresses, so we can change this
      to use the __bus_to_virt() function instead, which does not warn.
      
      After this, there are no remaining drivers that are used on
      any defconfigs on ARM using virt_to_bus or bus_to_virt, with
      the exception of the OSS sound driver. That driver is only used
      on RiscPC, NetWinder and Shark, so we can set ARCH_NO_VIRT_TO_BUS
      on all other platforms and hide the deprecated functions, which
      is far more effective than marking them as deprecated, in order
      to avoid any new users of that code.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Russell King <linux@arm.linux.org.uk>
      a5d533ee
  5. 12 2月, 2013 10 次提交
  6. 08 2月, 2013 1 次提交
  7. 06 2月, 2013 1 次提交
  8. 05 2月, 2013 1 次提交
    • S
      ARM: imx: support DEBUG_LL uart port selection for all i.MX SoCs · f8c95fe6
      Shawn Guo 提交于
      Extend imx6q DEBUG_LL uart port selection support to cover all i.MX
      SoCs.  The 'range' of the Kconfig option gets dropped, as users
      looking at the option must know the uart number on his board.  The
      bottom line is that the build system will report an error if an
      invalid port number is picked for given SoC.
      
      The header arch/arm/include/debug/imx-uart.h is created to accommodate
      all the uart base addresses.  And the header will also be used for
      other low-level debug facility later.
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      f8c95fe6
  9. 04 2月, 2013 3 次提交
  10. 01 2月, 2013 1 次提交
  11. 31 1月, 2013 4 次提交
  12. 30 1月, 2013 1 次提交
  13. 29 1月, 2013 2 次提交
  14. 28 1月, 2013 1 次提交
  15. 24 1月, 2013 8 次提交
    • M
      KVM: ARM: Power State Coordination Interface implementation · aa024c2f
      Marc Zyngier 提交于
      Implement the PSCI specification (ARM DEN 0022A) to control
      virtual CPUs being "powered" on or off.
      
      PSCI/KVM is detected using the KVM_CAP_ARM_PSCI capability.
      
      A virtual CPU can now be initialized in a "powered off" state,
      using the KVM_ARM_VCPU_POWER_OFF feature flag.
      
      The guest can use either SMC or HVC to execute a PSCI function.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      aa024c2f
    • C
      KVM: ARM: Handle I/O aborts · 45e96ea6
      Christoffer Dall 提交于
      When the guest accesses I/O memory this will create data abort
      exceptions and they are handled by decoding the HSR information
      (physical address, read/write, length, register) and forwarding reads
      and writes to QEMU which performs the device emulation.
      
      Certain classes of load/store operations do not support the syndrome
      information provided in the HSR.  We don't support decoding these (patches
      are available elsewhere), so we report an error to user space in this case.
      
      This requires changing the general flow somewhat since new calls to run
      the VCPU must check if there's a pending MMIO load and perform the write
      after userspace has made the data available.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      45e96ea6
    • C
      KVM: ARM: Handle guest faults in KVM · 94f8e641
      Christoffer Dall 提交于
      Handles the guest faults in KVM by mapping in corresponding user pages
      in the 2nd stage page tables.
      
      We invalidate the instruction cache by MVA whenever we map a page to the
      guest (no, we cannot only do it when we have an iabt because the guest
      may happily read/write a page before hitting the icache) if the hardware
      uses VIPT or PIPT.  In the latter case, we can invalidate only that
      physical page.  In the first case, all bets are off and we simply must
      invalidate the whole affair.  Not that VIVT icaches are tagged with
      vmids, and we are out of the woods on that one.  Alexander Graf was nice
      enough to remind us of this massive pain.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      94f8e641
    • R
      KVM: ARM: VFP userspace interface · 4fe21e4c
      Rusty Russell 提交于
      We use space #18 for floating point regs.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      4fe21e4c
    • C
      KVM: ARM: Demux CCSIDR in the userspace API · c27581ed
      Christoffer Dall 提交于
      The Cache Size Selection Register (CSSELR) selects the current Cache
      Size ID Register (CCSIDR).  You write which cache you are interested
      in to CSSELR, and read the information out of CCSIDR.
      
      Which cache numbers are valid is known by reading the Cache Level ID
      Register (CLIDR).
      
      To export this state to userspace, we add a KVM_REG_ARM_DEMUX
      numberspace (17), which uses 8 bits to represent which register is
      being demultiplexed (0 for CCSIDR), and the lower 8 bits to represent
      this demultiplexing (in our case, the CSSELR value, which is 4 bits).
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      c27581ed
    • C
      KVM: ARM: User space API for getting/setting co-proc registers · 1138245c
      Christoffer Dall 提交于
      The following three ioctls are implemented:
       -  KVM_GET_REG_LIST
       -  KVM_GET_ONE_REG
       -  KVM_SET_ONE_REG
      
      Now we have a table for all the cp15 registers, we can drive a generic
      API.
      
      The register IDs carry the following encoding:
      
      ARM registers are mapped using the lower 32 bits.  The upper 16 of that
      is the register group type, or coprocessor number:
      
      ARM 32-bit CP15 registers have the following id bit patterns:
        0x4002 0000 000F <zero:1> <crn:4> <crm:4> <opc1:4> <opc2:3>
      
      ARM 64-bit CP15 registers have the following id bit patterns:
        0x4003 0000 000F <zero:1> <zero:4> <crm:4> <opc1:4> <zero:3>
      
      For futureproofing, we need to tell QEMU about the CP15 registers the
      host lets the guest access.
      
      It will need this information to restore a current guest on a future
      CPU or perhaps a future KVM which allow some of these to be changed.
      
      We use a separate table for these, as they're only for the userspace API.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      1138245c
    • C
      KVM: ARM: Emulation framework and CP15 emulation · 5b3e5e5b
      Christoffer Dall 提交于
      Adds a new important function in the main KVM/ARM code called
      handle_exit() which is called from kvm_arch_vcpu_ioctl_run() on returns
      from guest execution. This function examines the Hyp-Syndrome-Register
      (HSR), which contains information telling KVM what caused the exit from
      the guest.
      
      Some of the reasons for an exit are CP15 accesses, which are
      not allowed from the guest and this commit handles these exits by
      emulating the intended operation in software and skipping the guest
      instruction.
      
      Minor notes about the coproc register reset:
      1) We reserve a value of 0 as an invalid cp15 offset, to catch bugs in our
         table, at cost of 4 bytes per vcpu.
      
      2) Added comments on the table indicating how we handle each register, for
         simplicity of understanding.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      5b3e5e5b
    • C
      KVM: ARM: World-switch implementation · f7ed45be
      Christoffer Dall 提交于
      Provides complete world-switch implementation to switch to other guests
      running in non-secure modes. Includes Hyp exception handlers that
      capture necessary exception information and stores the information on
      the VCPU and KVM structures.
      
      The following Hyp-ABI is also documented in the code:
      
      Hyp-ABI: Calling HYP-mode functions from host (in SVC mode):
         Switching to Hyp mode is done through a simple HVC #0 instruction. The
         exception vector code will check that the HVC comes from VMID==0 and if
         so will push the necessary state (SPSR, lr_usr) on the Hyp stack.
         - r0 contains a pointer to a HYP function
         - r1, r2, and r3 contain arguments to the above function.
         - The HYP function will be called with its arguments in r0, r1 and r2.
         On HYP function return, we return directly to SVC.
      
      A call to a function executing in Hyp mode is performed like the following:
      
              <svc code>
              ldr     r0, =BSYM(my_hyp_fn)
              ldr     r1, =my_param
              hvc #0  ; Call my_hyp_fn(my_param) from HYP mode
              <svc code>
      
      Otherwise, the world-switch is pretty straight-forward. All state that
      can be modified by the guest is first backed up on the Hyp stack and the
      VCPU values is loaded onto the hardware. State, which is not loaded, but
      theoretically modifiable by the guest is protected through the
      virtualiation features to generate a trap and cause software emulation.
      Upon guest returns, all state is restored from hardware onto the VCPU
      struct and the original state is restored from the Hyp-stack onto the
      hardware.
      
      SMP support using the VMPIDR calculated on the basis of the host MPIDR
      and overriding the low bits with KVM vcpu_id contributed by Marc Zyngier.
      
      Reuse of VMIDs has been implemented by Antonios Motakis and adapated from
      a separate patch into the appropriate patches introducing the
      functionality. Note that the VMIDs are stored per VM as required by the ARM
      architecture reference manual.
      
      To support VFP/NEON we trap those instructions using the HPCTR. When
      we trap, we switch the FPU.  After a guest exit, the VFP state is
      returned to the host.  When disabling access to floating point
      instructions, we also mask FPEXC_EN in order to avoid the guest
      receiving Undefined instruction exceptions before we have a chance to
      switch back the floating point state.  We are reusing vfp_hard_struct,
      so we depend on VFPv3 being enabled in the host kernel, if not, we still
      trap cp10 and cp11 in order to inject an undefined instruction exception
      whenever the guest tries to use VFP/NEON. VFP/NEON developed by
      Antionios Motakis and Rusty Russell.
      
      Aborts that are permission faults, and not stage-1 page table walk, do
      not report the faulting address in the HPFAR.  We have to resolve the
      IPA, and store it just like the HPFAR register on the VCPU struct. If
      the IPA cannot be resolved, it means another CPU is playing with the
      page tables, and we simply restart the guest.  This quirk was fixed by
      Marc Zyngier.
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NAntonios Motakis <a.motakis@virtualopensystems.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NChristoffer Dall <c.dall@virtualopensystems.com>
      f7ed45be