Introduce FFmpeg on Android project

2012-08-07 Thread Claude Youn
Hi,

I'm Claude working for InSignal as open-source director. I am happy to
announce about 1st initial release of FFmpeg-on-Android project to be
public open-source project. InSignal and project members expect to join
anyone who interests multimedia on android platform with FFmpeg. :)

FFmpeg on Android project is the open source project for multimedia
play service which is adopt to Android OS 4.0. FFmpeg on Android
project is originally designed by dr.nitro and powered by InSignal Co., Ltd.

FFmpeg on Android project is to enhance multimedia support on Android
OS, starts on 4.0 ICS version. Currently Android OS has many limits to
support variety multimedia formats, using specific H/W resources, not
also S/W. So, we expact, if we can use the famus FFmpeg library in
Andorid OS with little modification on Android Stagefright; We can
overcome many current limits in Android muntimedia supports easly.

Currently source code is releaded at git public site of InSignal,
git.insignal.co.kr/multimedia/ffmpeg-on-android. You can check with web
site;
http://git.insignal.co.kr/?p=multimedia/ffmpeg-on-android.git;a=summary;.
And also, we worked on Origen board (based on Exynos4210) and try to
port next Origen boards (based on Exynos4412 and Exynos5250). You can
see the capture of its working capture on Origen board at youtube,
http://youtu.be/BBrnwMC8cec;.

If you have any interest or any question, please visit google groups,
https://groups.google.com/forum/#!forum/ffmpeg-on-android;, to talk all
about FFmpeg-on-Android project freely. :)


All the source code of FFmpeg-on-Android is under Apache license v2.0.
If you want to know more details about Apache license, you can see
LICENSE file in source code.


with Best Regards,
claude

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 01/23] arm: initial Xen support

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:04PM +0100, Stefano Stabellini wrote:
 - Basic hypervisor.h and interface.h definitions.
 - Skeleton enlighten.c, set xen_start_info to an empty struct.
 - Make xen_initial_domain dependent on the SIF_PRIVILIGED_BIT.
 
 The new code only compiles when CONFIG_XEN is set, that is going to be
 added to arch/arm/Kconfig in patch #11 xen/arm: introduce CONFIG_XEN on
 ARM.

You can add my Ack, but do one change pls:

 +/* XXX: Move pvclock definitions some place arch independent */

Just use 'TODO'

 +struct pvclock_vcpu_time_info {
 + u32   version;
 + u32   pad0;
 + u64   tsc_timestamp;
 + u64   system_time;
 + u32   tsc_to_system_mul;
 + s8tsc_shift;
 + u8flags;
 + u8pad[2];
 +} __attribute__((__packed__)); /* 32 bytes */
 +
 +struct pvclock_wall_clock {
 + u32   version;
 + u32   sec;
 + u32   nsec;
 +} __attribute__((__packed__));

Mention the size and why it is OK to have it be a weird
size while the one above is nicely padded.

 +#endif
 +
 +#endif /* _ASM_ARM_XEN_INTERFACE_H */
 diff --git a/arch/arm/xen/Makefile b/arch/arm/xen/Makefile
 new file mode 100644
 index 000..0bad594
 --- /dev/null
 +++ b/arch/arm/xen/Makefile
 @@ -0,0 +1 @@
 +obj-y:= enlighten.o
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 new file mode 100644
 index 000..d27c2a6
 --- /dev/null
 +++ b/arch/arm/xen/enlighten.c
 @@ -0,0 +1,35 @@
 +#include xen/xen.h
 +#include xen/interface/xen.h
 +#include xen/interface/memory.h
 +#include xen/platform_pci.h
 +#include asm/xen/hypervisor.h
 +#include asm/xen/hypercall.h
 +#include linux/module.h
 +
 +struct start_info _xen_start_info;
 +struct start_info *xen_start_info = _xen_start_info;
 +EXPORT_SYMBOL_GPL(xen_start_info);
 +
 +enum xen_domain_type xen_domain_type = XEN_NATIVE;
 +EXPORT_SYMBOL_GPL(xen_domain_type);
 +
 +struct shared_info xen_dummy_shared_info;
 +struct shared_info *HYPERVISOR_shared_info = (void *)xen_dummy_shared_info;
 +
 +DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu);
 +
 +/* XXX: to be removed */

s/XXX/TODO/ here, and mention pls why it needs to be removed.

 +__read_mostly int xen_have_vector_callback;
 +EXPORT_SYMBOL_GPL(xen_have_vector_callback);
 +
 +int xen_platform_pci_unplug = XEN_UNPLUG_ALL;
 +EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 03/23] xen/arm: page.h definitions

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:06PM +0100, Stefano Stabellini wrote:
 ARM Xen guests always use paging in hardware, like PV on HVM guests in
 the X86 world.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com

Ack.. with one nitpick

 +/* XXX: this shouldn't be here */

.. but its here b/c the frontend drivers are using it (its rolled in
headers)- even though we won't hit the code path. So for right now
just punt with this.

 +static inline pte_t *lookup_address(unsigned long address, unsigned int 
 *level)
 +{
 + BUG();
 + return NULL;
 +}
 +
 +static inline int m2p_add_override(unsigned long mfn, struct page *page,
 + struct gnttab_map_grant_ref *kmap_op)
 +{
 + return 0;
 +}
 +
 +static inline int m2p_remove_override(struct page *page, bool clear_pte)
 +{
 + return 0;
 +}
 +
 +static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
 +{
 + BUG();
 + return false;
 +}
 +#endif /* _ASM_ARM_XEN_PAGE_H */
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 04/23] xen/arm: sync_bitops

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:07PM +0100, Stefano Stabellini wrote:
 sync_bitops functions are equivalent to the SMP implementation of the
 original functions, independently from CONFIG_SMP being defined.
 
 We need them because _set_bit etc are not SMP safe if !CONFIG_SMP. But
 under Xen you might be communicating with a completely external entity
 who might be on another CPU (e.g. two uniprocessor guests communicating
 via event channels and grant tables). So we need a variant of the bit
 ops which are SMP safe even on a UP kernel.

Ack from me.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/include/asm/sync_bitops.h |   27 +++
  1 files changed, 27 insertions(+), 0 deletions(-)
  create mode 100644 arch/arm/include/asm/sync_bitops.h
 
 diff --git a/arch/arm/include/asm/sync_bitops.h 
 b/arch/arm/include/asm/sync_bitops.h
 new file mode 100644
 index 000..63479ee
 --- /dev/null
 +++ b/arch/arm/include/asm/sync_bitops.h
 @@ -0,0 +1,27 @@
 +#ifndef __ASM_SYNC_BITOPS_H__
 +#define __ASM_SYNC_BITOPS_H__
 +
 +#include asm/bitops.h
 +#include asm/system.h
 +
 +/* sync_bitops functions are equivalent to the SMP implementation of the
 + * original functions, independently from CONFIG_SMP being defined.
 + *
 + * We need them because _set_bit etc are not SMP safe if !CONFIG_SMP. But
 + * under Xen you might be communicating with a completely external entity
 + * who might be on another CPU (e.g. two uniprocessor guests communicating
 + * via event channels and grant tables). So we need a variant of the bit
 + * ops which are SMP safe even on a UP kernel.
 + */
 +
 +#define sync_set_bit(nr, p)  _set_bit(nr, p)
 +#define sync_clear_bit(nr, p)_clear_bit(nr, p)
 +#define sync_change_bit(nr, p)   _change_bit(nr, p)
 +#define sync_test_and_set_bit(nr, p) _test_and_set_bit(nr, p)
 +#define sync_test_and_clear_bit(nr, p)   _test_and_clear_bit(nr, p)
 +#define sync_test_and_change_bit(nr, p)  _test_and_change_bit(nr, p)
 +#define sync_test_bit(nr, addr)  test_bit(nr, addr)
 +#define sync_cmpxchg cmpxchg
 +
 +
 +#endif
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 06/23] xen: missing includes

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:09PM +0100, Stefano Stabellini wrote:
 Changes in v2:
 - remove pvclock hack;
 - remove include linux/types.h from xen/interface/xen.h.

I think I can take in my tree now right by itself right? Or do
you want to keep this in your patchqueue? If so, Ack from me.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/x86/include/asm/xen/interface.h   |2 ++
  drivers/tty/hvc/hvc_xen.c  |2 ++
  drivers/xen/grant-table.c  |1 +
  drivers/xen/xenbus/xenbus_probe_frontend.c |1 +
  include/xen/interface/xen.h|1 -
  include/xen/privcmd.h  |1 +
  6 files changed, 7 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/include/asm/xen/interface.h 
 b/arch/x86/include/asm/xen/interface.h
 index cbf0c9d..a93db16 100644
 --- a/arch/x86/include/asm/xen/interface.h
 +++ b/arch/x86/include/asm/xen/interface.h
 @@ -121,6 +121,8 @@ struct arch_shared_info {
  #include interface_64.h
  #endif
  
 +#include asm/pvclock-abi.h
 +
  #ifndef __ASSEMBLY__
  /*
   * The following is all CPU context. Note that the fpu_ctxt block is filled
 diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
 index 944eaeb..dc07f56 100644
 --- a/drivers/tty/hvc/hvc_xen.c
 +++ b/drivers/tty/hvc/hvc_xen.c
 @@ -21,6 +21,7 @@
  #include linux/console.h
  #include linux/delay.h
  #include linux/err.h
 +#include linux/irq.h
  #include linux/init.h
  #include linux/types.h
  #include linux/list.h
 @@ -35,6 +36,7 @@
  #include xen/page.h
  #include xen/events.h
  #include xen/interface/io/console.h
 +#include xen/interface/sched.h
  #include xen/hvc-console.h
  #include xen/xenbus.h
  
 diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
 index 0bfc1ef..1d0d95e 100644
 --- a/drivers/xen/grant-table.c
 +++ b/drivers/xen/grant-table.c
 @@ -47,6 +47,7 @@
  #include xen/interface/memory.h
  #include xen/hvc-console.h
  #include asm/xen/hypercall.h
 +#include asm/xen/interface.h
  
  #include asm/pgtable.h
  #include asm/sync_bitops.h
 diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c 
 b/drivers/xen/xenbus/xenbus_probe_frontend.c
 index a31b54d..3159a37 100644
 --- a/drivers/xen/xenbus/xenbus_probe_frontend.c
 +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c
 @@ -21,6 +21,7 @@
  #include xen/xenbus.h
  #include xen/events.h
  #include xen/page.h
 +#include xen/xen.h
  
  #include xen/platform_pci.h
  
 diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h
 index a890804..3871e47 100644
 --- a/include/xen/interface/xen.h
 +++ b/include/xen/interface/xen.h
 @@ -10,7 +10,6 @@
  #define __XEN_PUBLIC_XEN_H__
  
  #include asm/xen/interface.h
 -#include asm/pvclock-abi.h
  
  /*
   * XEN SYSTEM CALLS (a.k.a. HYPERCALLS).
 diff --git a/include/xen/privcmd.h b/include/xen/privcmd.h
 index 17857fb..4d58881 100644
 --- a/include/xen/privcmd.h
 +++ b/include/xen/privcmd.h
 @@ -35,6 +35,7 @@
  
  #include linux/types.h
  #include linux/compiler.h
 +#include xen/interface/xen.h
  
  typedef unsigned long xen_pfn_t;
  
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 07/23] xen/arm: Xen detection and shared_info page mapping

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:10PM +0100, Stefano Stabellini wrote:
 Check for a /xen node in the device tree, if it is present set
 xen_domain_type to XEN_HVM_DOMAIN and continue initialization.
 
 Map the real shared info page using XENMEM_add_to_physmap with
 XENMAPSPACE_shared_info.
 
 Changes in v2:
 
 - replace pr_info with pr_debug.

I second what David mentioned. The other thing is that you are going to
need to rebase this on top of v3.5-rc1, as Olaf's patches have changed
the shared_info_page a bit.

 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/xen/enlighten.c |   52 
 ++
  1 files changed, 52 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 index d27c2a6..102d823 100644
 --- a/arch/arm/xen/enlighten.c
 +++ b/arch/arm/xen/enlighten.c
 @@ -5,6 +5,9 @@
  #include asm/xen/hypervisor.h
  #include asm/xen/hypercall.h
  #include linux/module.h
 +#include linux/of.h
 +#include linux/of_irq.h
 +#include linux/of_address.h
  
  struct start_info _xen_start_info;
  struct start_info *xen_start_info = _xen_start_info;
 @@ -33,3 +36,52 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
   return -ENOSYS;
  }
  EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range);
 +
 +/*
 + * == Xen Device Tree format ==
 + * - /xen node;
 + * - compatible arm,xen;
 + * - one interrupt for Xen event notifications;
 + * - one memory region to map the grant_table.
 + */
 +static int __init xen_guest_init(void)
 +{
 + struct xen_add_to_physmap xatp;
 + static struct shared_info *shared_info_page = 0;
 + struct device_node *node;
 +
 + node = of_find_compatible_node(NULL, NULL, arm,xen);
 + if (!node) {
 + pr_debug(No Xen support\n);
 + return 0;
 + }
 + xen_domain_type = XEN_HVM_DOMAIN;
 +
 + if (!shared_info_page)
 + shared_info_page = (struct shared_info *)
 + get_zeroed_page(GFP_KERNEL);
 + if (!shared_info_page) {
 + pr_err(not enough memory\n);
 + return -ENOMEM;
 + }
 + xatp.domid = DOMID_SELF;
 + xatp.idx = 0;
 + xatp.space = XENMAPSPACE_shared_info;
 + xatp.gpfn = __pa(shared_info_page)  PAGE_SHIFT;
 + if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, xatp))
 + BUG();
 +
 + HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
 +
 + /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info
 +  * page, we use it in the event channel upcall and in some pvclock
 +  * related functions. We don't need the vcpu_info placement
 +  * optimizations because we don't use any pv_mmu or pv_irq op on
 +  * HVM.
 +  * The shared info contains exactly 1 CPU (the boot CPU). The guest
 +  * is required to use VCPUOP_register_vcpu_info to place vcpu info
 +  * for secondary CPUs as they are brought up. */
 + per_cpu(xen_vcpu, 0) = HYPERVISOR_shared_info-vcpu_info[0];
 + return 0;
 +}
 +core_initcall(xen_guest_init);
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 08/23] xen/arm: Introduce xen_pfn_t for pfn and mfn types

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:11PM +0100, Stefano Stabellini wrote:
 All the original Xen headers have xen_pfn_t as mfn and pfn type, however
 when they have been imported in Linux, xen_pfn_t has been replaced with
 unsigned long. That might work for x86 and ia64 but it does not for arm.
 Bring back xen_pfn_t and let each architecture define xen_pfn_t as they
 see fit.

Ack.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/include/asm/xen/interface.h  |4 
  arch/ia64/include/asm/xen/interface.h |5 -
  arch/x86/include/asm/xen/interface.h  |5 +
  include/xen/interface/grant_table.h   |4 ++--
  include/xen/interface/memory.h|6 +++---
  include/xen/interface/platform.h  |4 ++--
  include/xen/interface/xen.h   |6 +++---
  include/xen/privcmd.h |2 --
  8 files changed, 23 insertions(+), 13 deletions(-)
 
 diff --git a/arch/arm/include/asm/xen/interface.h 
 b/arch/arm/include/asm/xen/interface.h
 index ab99270..f904dcc 100644
 --- a/arch/arm/include/asm/xen/interface.h
 +++ b/arch/arm/include/asm/xen/interface.h
 @@ -25,6 +25,9 @@
   } while (0)
  
  #ifndef __ASSEMBLY__
 +/* Explicitly size integers that represent pfns in the interface with
 + * Xen so that we can have one ABI that works for 32 and 64 bit guests. */
 +typedef uint64_t xen_pfn_t;
  /* Guest handles for primitive C types. */
  __DEFINE_GUEST_HANDLE(uchar, unsigned char);
  __DEFINE_GUEST_HANDLE(uint,  unsigned int);
 @@ -35,6 +38,7 @@ DEFINE_GUEST_HANDLE(long);
  DEFINE_GUEST_HANDLE(void);
  DEFINE_GUEST_HANDLE(uint64_t);
  DEFINE_GUEST_HANDLE(uint32_t);
 +DEFINE_GUEST_HANDLE(xen_pfn_t);
  
  /* Maximum number of virtual CPUs in multi-processor guests. */
  #define MAX_VIRT_CPUS 1
 diff --git a/arch/ia64/include/asm/xen/interface.h 
 b/arch/ia64/include/asm/xen/interface.h
 index 09d5f7f..686464e 100644
 --- a/arch/ia64/include/asm/xen/interface.h
 +++ b/arch/ia64/include/asm/xen/interface.h
 @@ -67,6 +67,10 @@
  #define set_xen_guest_handle(hnd, val)   do { (hnd).p = val; } while (0)
  
  #ifndef __ASSEMBLY__
 +/* Explicitly size integers that represent pfns in the public interface
 + * with Xen so that we could have one ABI that works for 32 and 64 bit
 + * guests. */
 +typedef unsigned long xen_pfn_t;
  /* Guest handles for primitive C types. */
  __DEFINE_GUEST_HANDLE(uchar, unsigned char);
  __DEFINE_GUEST_HANDLE(uint, unsigned int);
 @@ -79,7 +83,6 @@ DEFINE_GUEST_HANDLE(void);
  DEFINE_GUEST_HANDLE(uint64_t);
  DEFINE_GUEST_HANDLE(uint32_t);
  
 -typedef unsigned long xen_pfn_t;
  DEFINE_GUEST_HANDLE(xen_pfn_t);
  #define PRI_xen_pfn  lx
  #endif
 diff --git a/arch/x86/include/asm/xen/interface.h 
 b/arch/x86/include/asm/xen/interface.h
 index a93db16..555f94d 100644
 --- a/arch/x86/include/asm/xen/interface.h
 +++ b/arch/x86/include/asm/xen/interface.h
 @@ -47,6 +47,10 @@
  #endif
  
  #ifndef __ASSEMBLY__
 +/* Explicitly size integers that represent pfns in the public interface
 + * with Xen so that on ARM we can have one ABI that works for 32 and 64
 + * bit guests. */
 +typedef unsigned long xen_pfn_t;
  /* Guest handles for primitive C types. */
  __DEFINE_GUEST_HANDLE(uchar, unsigned char);
  __DEFINE_GUEST_HANDLE(uint,  unsigned int);
 @@ -57,6 +61,7 @@ DEFINE_GUEST_HANDLE(long);
  DEFINE_GUEST_HANDLE(void);
  DEFINE_GUEST_HANDLE(uint64_t);
  DEFINE_GUEST_HANDLE(uint32_t);
 +DEFINE_GUEST_HANDLE(xen_pfn_t);
  #endif
  
  #ifndef HYPERVISOR_VIRT_START
 diff --git a/include/xen/interface/grant_table.h 
 b/include/xen/interface/grant_table.h
 index a17d844..7da811b 100644
 --- a/include/xen/interface/grant_table.h
 +++ b/include/xen/interface/grant_table.h
 @@ -338,7 +338,7 @@ DEFINE_GUEST_HANDLE_STRUCT(gnttab_dump_table);
  #define GNTTABOP_transfer4
  struct gnttab_transfer {
  /* IN parameters. */
 -unsigned long mfn;
 +xen_pfn_t mfn;
  domid_t   domid;
  grant_ref_t   ref;
  /* OUT parameters. */
 @@ -375,7 +375,7 @@ struct gnttab_copy {
   struct {
   union {
   grant_ref_t ref;
 - unsigned long   gmfn;
 + xen_pfn_t   gmfn;
   } u;
   domid_t  domid;
   uint16_t offset;
 diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
 index eac3ce1..abbbff0 100644
 --- a/include/xen/interface/memory.h
 +++ b/include/xen/interface/memory.h
 @@ -31,7 +31,7 @@ struct xen_memory_reservation {
   *   OUT: GMFN bases of extents that were allocated
   *   (NB. This command also updates the mach_to_phys translation table)
   */
 -GUEST_HANDLE(ulong) extent_start;
 +GUEST_HANDLE(xen_pfn_t) extent_start;
  
  /* Number of extents, and size/alignment of each (2^extent_order pages). 
 */
  unsigned long  nr_extents;
 @@ -130,7 +130,7 @@ struct xen_machphys_mfn_list {
   * any large discontiguities in the machine address 

Re: [PATCH v2 10/23] xen/arm: compile and run xenbus

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:13PM +0100, Stefano Stabellini wrote:
 bind_evtchn_to_irqhandler can legitimately return 0 (irq 0): it is not
 an error.
 
 If Linux is running as an HVM domain and is running as Dom0, use
 xenstored_local_init to initialize the xenstore page and event channel.
 
 Changes in v2:
 
 - refactor xenbus_init.

Thank you. Lets also CC our friend at NSA who has been doing some work
in that area. Daniel are you OK with this change - will it still make
PV initial domain with with the MiniOS XenBus driver?

Thanks.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  drivers/xen/xenbus/xenbus_comms.c |2 +-
  drivers/xen/xenbus/xenbus_probe.c |   62 +---
  drivers/xen/xenbus/xenbus_xs.c|1 +
  3 files changed, 45 insertions(+), 20 deletions(-)
 
 diff --git a/drivers/xen/xenbus/xenbus_comms.c 
 b/drivers/xen/xenbus/xenbus_comms.c
 index 52fe7ad..c5aa55c 100644
 --- a/drivers/xen/xenbus/xenbus_comms.c
 +++ b/drivers/xen/xenbus/xenbus_comms.c
 @@ -224,7 +224,7 @@ int xb_init_comms(void)
   int err;
   err = bind_evtchn_to_irqhandler(xen_store_evtchn, wake_waiting,
   0, xenbus, xb_waitq);
 - if (err = 0) {
 + if (err  0) {
   printk(KERN_ERR XENBUS request irq failed %i\n, err);
   return err;
   }

 diff --git a/drivers/xen/xenbus/xenbus_probe.c 
 b/drivers/xen/xenbus/xenbus_probe.c
 index b793723..a67ccc0 100644
 --- a/drivers/xen/xenbus/xenbus_probe.c
 +++ b/drivers/xen/xenbus/xenbus_probe.c
 @@ -719,37 +719,61 @@ static int __init xenstored_local_init(void)
   return err;
  }
  
 +enum xenstore_init {
 + UNKNOWN,
 + PV,
 + HVM,
 + LOCAL,
 +};
  static int __init xenbus_init(void)
  {
   int err = 0;
 + enum xenstore_init usage = UNKNOWN;
 + uint64_t v = 0;
  
   if (!xen_domain())
   return -ENODEV;
  
   xenbus_ring_ops_init();
  
 - if (xen_hvm_domain()) {
 - uint64_t v = 0;
 - err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, v);
 - if (err)
 - goto out_error;
 - xen_store_evtchn = (int)v;
 - err = hvm_get_parameter(HVM_PARAM_STORE_PFN, v);
 - if (err)
 - goto out_error;
 - xen_store_mfn = (unsigned long)v;
 - xen_store_interface = ioremap(xen_store_mfn  PAGE_SHIFT, 
 PAGE_SIZE);
 - } else {
 - xen_store_evtchn = xen_start_info-store_evtchn;
 - xen_store_mfn = xen_start_info-store_mfn;
 - if (xen_store_evtchn)
 - xenstored_ready = 1;
 - else {
 + if (xen_pv_domain())
 + usage = PV;
 + if (xen_hvm_domain())
 + usage = HVM;
 + if (xen_hvm_domain()  xen_initial_domain())
 + usage = LOCAL;
 + if (xen_pv_domain()  !xen_start_info-store_evtchn)
 + usage = LOCAL;
 + if (xen_pv_domain()  xen_start_info-store_evtchn)
 + xenstored_ready = 1;
 +
 + switch (usage) {
 + case LOCAL:
   err = xenstored_local_init();
   if (err)
   goto out_error;
 - }
 - xen_store_interface = mfn_to_virt(xen_store_mfn);
 + xen_store_interface = mfn_to_virt(xen_store_mfn);
 + break;
 + case PV:
 + xen_store_evtchn = xen_start_info-store_evtchn;
 + xen_store_mfn = xen_start_info-store_mfn;
 + xen_store_interface = mfn_to_virt(xen_store_mfn);
 + break;
 + case HVM:
 + err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, v);
 + if (err)
 + goto out_error;
 + xen_store_evtchn = (int)v;
 + err = hvm_get_parameter(HVM_PARAM_STORE_PFN, v);
 + if (err)
 + goto out_error;
 + xen_store_mfn = (unsigned long)v;
 + xen_store_interface =
 + ioremap(xen_store_mfn  PAGE_SHIFT, PAGE_SIZE);
 + break;
 + default:
 + pr_warn(Xenstore state unknown\n);
 + break;
   }
  
   /* Initialize the interface to xenstore. */
 diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
 index d1c217b..f7feb3d 100644
 --- a/drivers/xen/xenbus/xenbus_xs.c
 +++ b/drivers/xen/xenbus/xenbus_xs.c
 @@ -44,6 +44,7 @@
  #include linux/rwsem.h
  #include linux/module.h
  #include linux/mutex.h
 +#include asm/xen/hypervisor.h
  #include xen/xenbus.h
  #include xen/xen.h
  #include xenbus_comms.h
 -- 
 1.7.2.5


Re: [PATCH v2 11/23] xen: do not compile manage, balloon, pci, acpi and cpu_hotplug on ARM

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:14PM +0100, Stefano Stabellini wrote:
 Changes in v2:
 
 - make pci.o depend on CONFIG_PCI and acpi.o depend on CONFIG_ACPI.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com

Looks good.
 ---
  drivers/xen/Makefile |   11 ---
  1 files changed, 8 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
 index fc34886..bee02b2 100644
 --- a/drivers/xen/Makefile
 +++ b/drivers/xen/Makefile
 @@ -1,11 +1,17 @@
 -obj-y+= grant-table.o features.o events.o manage.o balloon.o
 +ifneq ($(CONFIG_ARM),y)
 +obj-y+= manage.o balloon.o
 +obj-$(CONFIG_HOTPLUG_CPU)+= cpu_hotplug.o
 +endif
 +obj-y+= grant-table.o features.o events.o
  obj-y+= xenbus/
  
  nostackp := $(call cc-option, -fno-stack-protector)
  CFLAGS_features.o:= $(nostackp)
  
 +obj-$(CONFIG_XEN_DOM0)   += $(dom0-y)
 +dom0-$(CONFIG_PCI) := pci.o
 +dom0-$(CONFIG_ACPI) := acpi.o
  obj-$(CONFIG_BLOCK)  += biomerge.o
 -obj-$(CONFIG_HOTPLUG_CPU)+= cpu_hotplug.o
  obj-$(CONFIG_XEN_XENCOMM)+= xencomm.o
  obj-$(CONFIG_XEN_BALLOON)+= xen-balloon.o
  obj-$(CONFIG_XEN_SELFBALLOONING) += xen-selfballoon.o
 @@ -17,7 +23,6 @@ obj-$(CONFIG_XEN_SYS_HYPERVISOR)+= sys-hypervisor.o
  obj-$(CONFIG_XEN_PVHVM)  += platform-pci.o
  obj-$(CONFIG_XEN_TMEM)   += tmem.o
  obj-$(CONFIG_SWIOTLB_XEN)+= swiotlb-xen.o
 -obj-$(CONFIG_XEN_DOM0)   += pci.o acpi.o
  obj-$(CONFIG_XEN_PCIDEV_BACKEND) += xen-pciback/
  obj-$(CONFIG_XEN_PRIVCMD)+= xen-privcmd.o
  obj-$(CONFIG_XEN_ACPI_PROCESSOR) += xen-acpi-processor.o
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 13/23] xen/arm: get privilege status

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:16PM +0100, Stefano Stabellini wrote:
 Use Xen features to figure out if we are privileged.
 
 XENFEAT_dom0 was introduced by 23735 in xen-unstable.hg.

Looks good.

 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/xen/enlighten.c |7 +++
  include/xen/interface/features.h |3 +++
  2 files changed, 10 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 index 102d823..ac3a2d6 100644
 --- a/arch/arm/xen/enlighten.c
 +++ b/arch/arm/xen/enlighten.c
 @@ -1,6 +1,7 @@
  #include xen/xen.h
  #include xen/interface/xen.h
  #include xen/interface/memory.h
 +#include xen/features.h
  #include xen/platform_pci.h
  #include asm/xen/hypervisor.h
  #include asm/xen/hypercall.h
 @@ -57,6 +58,12 @@ static int __init xen_guest_init(void)
   }
   xen_domain_type = XEN_HVM_DOMAIN;
  
 + xen_setup_features();
 + if (xen_feature(XENFEAT_dom0))
 + xen_start_info-flags |= SIF_INITDOMAIN|SIF_PRIVILEGED;
 + else
 + xen_start_info-flags = ~(SIF_INITDOMAIN|SIF_PRIVILEGED);
 +
   if (!shared_info_page)
   shared_info_page = (struct shared_info *)
   get_zeroed_page(GFP_KERNEL);
 diff --git a/include/xen/interface/features.h 
 b/include/xen/interface/features.h
 index b6ca39a..131a6cc 100644
 --- a/include/xen/interface/features.h
 +++ b/include/xen/interface/features.h
 @@ -50,6 +50,9 @@
  /* x86: pirq can be used by HVM guests */
  #define XENFEAT_hvm_pirqs   10
  
 +/* operation as Dom0 is supported */
 +#define XENFEAT_dom0  11
 +
  #define XENFEAT_NR_SUBMAPS 1
  
  #endif /* __XEN_PUBLIC_FEATURES_H__ */
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 16/23] xen: clear IRQ_NOAUTOEN and IRQ_NOREQUEST

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:19PM +0100, Stefano Stabellini wrote:
 Reset the IRQ_NOAUTOEN and IRQ_NOREQUEST flags that are enabled by
 default on ARM. If IRQ_NOAUTOEN is set, __setup_irq doesn't call
 irq_startup, that is responsible for calling irq_unmask at startup time.
 As a result event channels remain masked.

Acked by me.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  drivers/xen/events.c |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/xen/events.c b/drivers/xen/events.c
 index 5ecb596..8ffb7b7 100644
 --- a/drivers/xen/events.c
 +++ b/drivers/xen/events.c
 @@ -836,6 +836,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
   struct irq_info *info = info_for_irq(irq);
   WARN_ON(info == NULL || info-type != IRQT_EVTCHN);
   }
 + irq_clear_status_flags(irq, IRQ_NOREQUEST|IRQ_NOAUTOEN);
  
  out:
   mutex_unlock(irq_mapping_update_lock);
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 15/23] xen/arm: receive Xen events on ARM

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:18PM +0100, Stefano Stabellini wrote:
 Compile events.c on ARM.
 Parse, map and enable the IRQ to get event notifications from the device
 tree (node /xen).
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/include/asm/xen/events.h |   18 ++
  arch/arm/xen/enlighten.c  |   33 +
  arch/x86/xen/enlighten.c  |1 +
  arch/x86/xen/irq.c|1 +
  arch/x86/xen/xen-ops.h|1 -
  drivers/xen/events.c  |   17 ++---
  include/xen/events.h  |2 ++
  7 files changed, 69 insertions(+), 4 deletions(-)
  create mode 100644 arch/arm/include/asm/xen/events.h
 
 diff --git a/arch/arm/include/asm/xen/events.h 
 b/arch/arm/include/asm/xen/events.h
 new file mode 100644
 index 000..94b4e90
 --- /dev/null
 +++ b/arch/arm/include/asm/xen/events.h
 @@ -0,0 +1,18 @@
 +#ifndef _ASM_ARM_XEN_EVENTS_H
 +#define _ASM_ARM_XEN_EVENTS_H
 +
 +#include asm/ptrace.h
 +
 +enum ipi_vector {
 + XEN_PLACEHOLDER_VECTOR,
 +
 + /* Xen IPIs go here */
 + XEN_NR_IPIS,
 +};
 +
 +static inline int xen_irqs_disabled(struct pt_regs *regs)
 +{
 + return raw_irqs_disabled_flags(regs-ARM_cpsr);
 +}
 +
 +#endif /* _ASM_ARM_XEN_EVENTS_H */
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 index e5e92d5..87b17f0 100644
 --- a/arch/arm/xen/enlighten.c
 +++ b/arch/arm/xen/enlighten.c
 @@ -1,4 +1,5 @@
  #include xen/xen.h
 +#include xen/events.h
  #include xen/grant_table.h
  #include xen/hvm.h
  #include xen/interface/xen.h
 @@ -9,6 +10,8 @@
  #include xen/xenbus.h
  #include asm/xen/hypervisor.h
  #include asm/xen/hypercall.h
 +#include linux/interrupt.h
 +#include linux/irqreturn.h
  #include linux/module.h
  #include linux/of.h
  #include linux/of_irq.h
 @@ -33,6 +36,8 @@ EXPORT_SYMBOL_GPL(xen_have_vector_callback);
  int xen_platform_pci_unplug = XEN_UNPLUG_ALL;
  EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
  
 +static __read_mostly int xen_events_irq = -1;
 +

So this is global..
  int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
  unsigned long addr,
  unsigned long mfn, int nr,
 @@ -66,6 +71,9 @@ static int __init xen_guest_init(void)
   if (of_address_to_resource(node, GRANT_TABLE_PHYSADDR, res))
   return 0;
   xen_hvm_resume_frames = res.start  PAGE_SHIFT;
 + xen_events_irq = irq_of_parse_and_map(node, 0);
 + pr_info(Xen support found, events_irq=%d gnttab_frame_pfn=%lx\n,
 + xen_events_irq, xen_hvm_resume_frames);
   xen_domain_type = XEN_HVM_DOMAIN;
  
   xen_setup_features();
 @@ -107,3 +115,28 @@ static int __init xen_guest_init(void)
   return 0;
  }
  core_initcall(xen_guest_init);
 +
 +static irqreturn_t xen_arm_callback(int irq, void *arg)
 +{
 + xen_hvm_evtchn_do_upcall();
 + return IRQ_HANDLED;
 +}
 +
 +static int __init xen_init_events(void)
 +{
 + if (!xen_domain() || xen_events_irq  0)
 + return -ENODEV;
 +
 + xen_init_IRQ();
 +
 + if (request_percpu_irq(xen_events_irq, xen_arm_callback,
 + events, xen_vcpu)) {

But here you are asking for it to be percpu? What if there are other
interrupts on the _other_ CPUs that conflict with it?
 + pr_err(Error requesting IRQ %d\n, xen_events_irq);
 + return -EINVAL;
 + }
 +
 + enable_percpu_irq(xen_events_irq, 0);

Uh, that is bold. One global to rule them all, eh? Should you make
it at least:
static DEFINE_PER_CPU(int, xen_events_irq);
?

 +
 + return 0;
 +}
 +postcore_initcall(xen_init_events);
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
 index ff962d4..9f8b0ef 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -33,6 +33,7 @@
  #include linux/memblock.h
  
  #include xen/xen.h
 +#include xen/events.h
  #include xen/interface/xen.h
  #include xen/interface/version.h
  #include xen/interface/physdev.h
 diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
 index 1573376..01a4dc0 100644
 --- a/arch/x86/xen/irq.c
 +++ b/arch/x86/xen/irq.c
 @@ -5,6 +5,7 @@
  #include xen/interface/xen.h
  #include xen/interface/sched.h
  #include xen/interface/vcpu.h
 +#include xen/events.h
  
  #include asm/xen/hypercall.h
  #include asm/xen/hypervisor.h
 diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
 index 202d4c1..2368295 100644
 --- a/arch/x86/xen/xen-ops.h
 +++ b/arch/x86/xen/xen-ops.h
 @@ -35,7 +35,6 @@ void xen_set_pat(u64);
  
  char * __init xen_memory_setup(void);
  void __init xen_arch_setup(void);
 -void __init xen_init_IRQ(void);
  void xen_enable_sysenter(void);
  void xen_enable_syscall(void);
  void xen_vcpu_restore(void);
 diff --git a/drivers/xen/events.c b/drivers/xen/events.c
 index 7595581..5ecb596 100644
 --- a/drivers/xen/events.c
 +++ b/drivers/xen/events.c
 @@ -31,14 +31,16 @@
  #include 

Re: [PATCH v2 17/23] xen/arm: implement alloc/free_xenballooned_pages with alloc_pages/kfree

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:20PM +0100, Stefano Stabellini wrote:
 Only until we get the balloon driver to work.

OK. Acked-by be.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/xen/enlighten.c |   18 ++
  1 files changed, 18 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 index 87b17f0..c244583 100644
 --- a/arch/arm/xen/enlighten.c
 +++ b/arch/arm/xen/enlighten.c
 @@ -140,3 +140,21 @@ static int __init xen_init_events(void)
   return 0;
  }
  postcore_initcall(xen_init_events);
 +
 +/* XXX: only until balloon is properly working */
 +int alloc_xenballooned_pages(int nr_pages, struct page **pages, bool highmem)
 +{
 + *pages = alloc_pages(highmem ? GFP_HIGHUSER : GFP_KERNEL,
 + get_order(nr_pages));
 + if (*pages == NULL)
 + return -ENOMEM;
 + return 0;
 +}
 +EXPORT_SYMBOL_GPL(alloc_xenballooned_pages);
 +
 +void free_xenballooned_pages(int nr_pages, struct page **pages)
 +{
 + kfree(*pages);
 + *pages = NULL;
 +}
 +EXPORT_SYMBOL_GPL(free_xenballooned_pages);
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 18/23] xen: allow privcmd for HVM guests

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:21PM +0100, Stefano Stabellini wrote:
 This patch removes the return -ENOSYS for auto_translated_physmap
 guests from privcmd_mmap, thus it allows ARM guests to issue privcmd
 mmap calls. However privcmd mmap calls are still going to fail for HVM
 and hybrid guests on x86 because the xen_remap_domain_mfn_range
 implementation is currently PV only.

Looks good. Ack from me.
 
 Changes in v2:
 
 - better commit message;
 - return -EINVAL from xen_remap_domain_mfn_range if
   auto_translated_physmap.
 
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/x86/xen/mmu.c|3 +++
  drivers/xen/privcmd.c |4 
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
 index 3a73785..885a223 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
 @@ -2310,6 +2310,9 @@ int xen_remap_domain_mfn_range(struct vm_area_struct 
 *vma,
   unsigned long range;
   int err = 0;
  
 + if (xen_feature(XENFEAT_auto_translated_physmap))
 + return -EINVAL;
 +
   prot = __pgprot(pgprot_val(prot) | _PAGE_IOMAP);
  
   BUG_ON(!((vma-vm_flags  (VM_PFNMAP | VM_RESERVED | VM_IO)) ==
 diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
 index ccee0f1..85226cb 100644
 --- a/drivers/xen/privcmd.c
 +++ b/drivers/xen/privcmd.c
 @@ -380,10 +380,6 @@ static struct vm_operations_struct privcmd_vm_ops = {
  
  static int privcmd_mmap(struct file *file, struct vm_area_struct *vma)
  {
 - /* Unsupported for auto-translate guests. */
 - if (xen_feature(XENFEAT_auto_translated_physmap))
 - return -ENOSYS;
 -
   /* DONTCOPY is essential for Xen because copy_page_range doesn't know
* how to recreate these mappings */
   vma-vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 19/23] xen/arm: compile blkfront and blkback

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:22PM +0100, Stefano Stabellini wrote:

OK. Looks good.
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  drivers/block/xen-blkback/blkback.c  |1 +
  include/xen/interface/io/protocols.h |3 +++
  2 files changed, 4 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/block/xen-blkback/blkback.c 
 b/drivers/block/xen-blkback/blkback.c
 index 73f196c..63dd5b9 100644
 --- a/drivers/block/xen-blkback/blkback.c
 +++ b/drivers/block/xen-blkback/blkback.c
 @@ -42,6 +42,7 @@
  
  #include xen/events.h
  #include xen/page.h
 +#include xen/xen.h
  #include asm/xen/hypervisor.h
  #include asm/xen/hypercall.h
  #include common.h
 diff --git a/include/xen/interface/io/protocols.h 
 b/include/xen/interface/io/protocols.h
 index 01fc8ae..0eafaf2 100644
 --- a/include/xen/interface/io/protocols.h
 +++ b/include/xen/interface/io/protocols.h
 @@ -5,6 +5,7 @@
  #define XEN_IO_PROTO_ABI_X86_64 x86_64-abi
  #define XEN_IO_PROTO_ABI_IA64   ia64-abi
  #define XEN_IO_PROTO_ABI_POWERPC64  powerpc64-abi
 +#define XEN_IO_PROTO_ABI_ARMarm-abi
  
  #if defined(__i386__)
  # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_32
 @@ -14,6 +15,8 @@
  # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_IA64
  #elif defined(__powerpc64__)
  # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_POWERPC64
 +#elif defined(__arm__)
 +# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_ARM
  #else
  # error arch fixup needed here
  #endif
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 20/23] xen/arm: compile netback

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:23PM +0100, Stefano Stabellini wrote:
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com

OK. Looks good.
 ---
  arch/arm/include/asm/xen/hypercall.h |   19 +++
  drivers/net/xen-netback/netback.c|1 +
  drivers/net/xen-netfront.c   |1 +
  3 files changed, 21 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/include/asm/xen/hypercall.h 
 b/arch/arm/include/asm/xen/hypercall.h
 index 4ac0624..8a82325 100644
 --- a/arch/arm/include/asm/xen/hypercall.h
 +++ b/arch/arm/include/asm/xen/hypercall.h
 @@ -47,4 +47,23 @@ unsigned long HYPERVISOR_hvm_op(int op, void *arg);
  int HYPERVISOR_memory_op(unsigned int cmd, void *arg);
  int HYPERVISOR_physdev_op(int cmd, void *arg);
  
 +static inline void
 +MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va,
 + unsigned int new_val, unsigned long flags)
 +{
 + BUG();
 +}
 +
 +static inline void
 +MULTI_mmu_update(struct multicall_entry *mcl, struct mmu_update *req,
 +  int count, int *success_count, domid_t domid)
 +{
 + BUG();
 +}
 +
 +static inline int
 +HYPERVISOR_multicall(void *call_list, int nr_calls)
 +{
 + BUG();
 +}
  #endif /* _ASM_ARM_XEN_HYPERCALL_H */
 diff --git a/drivers/net/xen-netback/netback.c 
 b/drivers/net/xen-netback/netback.c
 index f4a6fca..ab4f81c 100644
 --- a/drivers/net/xen-netback/netback.c
 +++ b/drivers/net/xen-netback/netback.c
 @@ -40,6 +40,7 @@
  
  #include net/tcp.h
  
 +#include xen/xen.h
  #include xen/events.h
  #include xen/interface/memory.h
  
 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
 index 3089990..bf4ba2b 100644
 --- a/drivers/net/xen-netfront.c
 +++ b/drivers/net/xen-netfront.c
 @@ -43,6 +43,7 @@
  #include linux/slab.h
  #include net/ip.h
  
 +#include asm/xen/page.h
  #include xen/xen.h
  #include xen/xenbus.h
  #include xen/events.h
 -- 
 1.7.2.5

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev


Re: [PATCH v2 23/23] [HACK] xen/arm: implement xen_remap_domain_mfn_range

2012-08-07 Thread Konrad Rzeszutek Wilk
On Mon, Aug 06, 2012 at 03:27:26PM +0100, Stefano Stabellini wrote:
 From: Ian Campbell ian.campb...@citrix.com
 
 Do not apply!

OK.
 
 This is a simple, hacky implementation of xen_remap_domain_mfn_range,
 using XENMAPSPACE_gmfn_foreign.
 
 It should use same interface as hybrid x86.

Yeah, Mukesh - can you share your patch here please?
 
 Changes in v2:
 
 - retain binary compatibility in xen_add_to_physmap: use a union.
 
 Signed-off-by: Ian Campbell ian.campb...@citrix.com
 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  arch/arm/xen/enlighten.c   |   79 
 +++-
  drivers/xen/privcmd.c  |   16 +
  drivers/xen/xenfs/super.c  |7 
  include/xen/interface/memory.h |   15 ++--
  4 files changed, 105 insertions(+), 12 deletions(-)
 
 diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
 index c244583..20ca1e4 100644
 --- a/arch/arm/xen/enlighten.c
 +++ b/arch/arm/xen/enlighten.c
 @@ -16,6 +16,10 @@
  #include linux/of.h
  #include linux/of_irq.h
  #include linux/of_address.h
 +#include linux/mm.h
 +#include linux/ioport.h
 +
 +#include asm/pgtable.h
  
  struct start_info _xen_start_info;
  struct start_info *xen_start_info = _xen_start_info;
 @@ -38,12 +42,85 @@ EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
  
  static __read_mostly int xen_events_irq = -1;
  
 +#define FOREIGN_MAP_BUFFER 0x9000UL
 +#define FOREIGN_MAP_BUFFER_SIZE 0x1000UL
 +struct resource foreign_map_resource = {
 + .start = FOREIGN_MAP_BUFFER,
 + .end = FOREIGN_MAP_BUFFER + FOREIGN_MAP_BUFFER_SIZE,
 + .name = Xen foreign map buffer,
 + .flags = 0,
 +};
 +
 +static unsigned long foreign_map_buffer_pfn = FOREIGN_MAP_BUFFER  
 PAGE_SHIFT;
 +
 +struct remap_data {
 + struct mm_struct *mm;
 + unsigned long mfn;
 + pgprot_t prot;
 +};
 +
 +static int remap_area_mfn_pte_fn(pte_t *ptep, pgtable_t token,
 +  unsigned long addr, void *data)
 +{
 + struct remap_data *rmd = data;
 + pte_t pte = pfn_pte(rmd-mfn, rmd-prot);
 +
 + if (rmd-mfn  0x90010)
 + pr_crit(%s: ptep %p addr %#lx = %#x / %#lx\n,
 +__func__, ptep, addr, pte_val(pte), rmd-mfn);
 +
 + set_pte_at(rmd-mm, addr, ptep, pte);
 +
 + rmd-mfn++;
 + return 0;
 +}
 +
  int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
  unsigned long addr,
  unsigned long mfn, int nr,
  pgprot_t prot, unsigned domid)
  {
 - return -ENOSYS;
 + int i, rc = 0;
 + struct remap_data rmd = {
 + .mm = vma-vm_mm,
 + .prot = prot,
 + };
 + struct xen_add_to_physmap xatp = {
 + .domid = DOMID_SELF,
 + .space = XENMAPSPACE_gmfn_foreign,
 +
 + .foreign_domid = domid,
 + };
 +
 + if (foreign_map_buffer_pfn + nr  ((FOREIGN_MAP_BUFFER +
 + FOREIGN_MAP_BUFFER_SIZE)PAGE_SHIFT)) {
 + pr_crit(RAM out of foreign map buffers...\n);
 + return -EBUSY;
 + }
 +
 + for (i = 0; i  nr; i++) {
 + xatp.idx = mfn + i;
 + xatp.gpfn = foreign_map_buffer_pfn + i;
 + rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, xatp);
 + if (rc != 0) {
 + pr_crit(foreign map add_to_physmap failed, err=%d\n, 
 rc);
 + goto out;
 + }
 + }
 +
 + rmd.mfn = foreign_map_buffer_pfn;
 + rc = apply_to_page_range(vma-vm_mm,
 +  addr,
 +  (unsigned long)nr  PAGE_SHIFT,
 +  remap_area_mfn_pte_fn, rmd);
 + if (rc != 0) {
 + pr_crit(apply_to_page_range failed rc=%d\n, rc);
 + goto out;
 + }
 +
 + foreign_map_buffer_pfn += nr;
 +out:
 + return rc;
  }
  EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range);
  
 diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
 index 85226cb..3e15c22 100644
 --- a/drivers/xen/privcmd.c
 +++ b/drivers/xen/privcmd.c
 @@ -20,6 +20,8 @@
  #include linux/pagemap.h
  #include linux/seq_file.h
  #include linux/miscdevice.h
 +#include linux/resource.h
 +#include linux/ioport.h
  
  #include asm/pgalloc.h
  #include asm/pgtable.h
 @@ -196,9 +198,6 @@ static long privcmd_ioctl_mmap(void __user *udata)
   LIST_HEAD(pagelist);
   struct mmap_mfn_state state;
  
 - if (!xen_initial_domain())
 - return -EPERM;
 -
   if (copy_from_user(mmapcmd, udata, sizeof(mmapcmd)))
   return -EFAULT;
  
 @@ -286,9 +285,6 @@ static long privcmd_ioctl_mmap_batch(void __user *udata)
   LIST_HEAD(pagelist);
   struct mmap_batch_state state;
  
 - if (!xen_initial_domain())
 - return -EPERM;
 -
   if (copy_from_user(m, udata, sizeof(m)))
   return -EFAULT;
  
 @@ -365,6 +361,11 @@ static 

Re: [PATCH v2 10/23] xen/arm: compile and run xenbus

2012-08-07 Thread Daniel De Graaf
On 08/07/2012 02:21 PM, Konrad Rzeszutek Wilk wrote:
 On Mon, Aug 06, 2012 at 03:27:13PM +0100, Stefano Stabellini wrote:
 bind_evtchn_to_irqhandler can legitimately return 0 (irq 0): it is not
 an error.

 If Linux is running as an HVM domain and is running as Dom0, use
 xenstored_local_init to initialize the xenstore page and event channel.

 Changes in v2:

 - refactor xenbus_init.
 
 Thank you. Lets also CC our friend at NSA who has been doing some work
 in that area. Daniel are you OK with this change - will it still make
 PV initial domain with with the MiniOS XenBus driver?
 
 Thanks.

That case will work, but what this will break is launching the initial domain
with a Xenstore stub domain already running (see below).


 Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 ---
  drivers/xen/xenbus/xenbus_comms.c |2 +-
  drivers/xen/xenbus/xenbus_probe.c |   62 
 +---
  drivers/xen/xenbus/xenbus_xs.c|1 +
  3 files changed, 45 insertions(+), 20 deletions(-)

 diff --git a/drivers/xen/xenbus/xenbus_comms.c 
 b/drivers/xen/xenbus/xenbus_comms.c
 index 52fe7ad..c5aa55c 100644
 --- a/drivers/xen/xenbus/xenbus_comms.c
 +++ b/drivers/xen/xenbus/xenbus_comms.c
 @@ -224,7 +224,7 @@ int xb_init_comms(void)
  int err;
  err = bind_evtchn_to_irqhandler(xen_store_evtchn, wake_waiting,
  0, xenbus, xb_waitq);
 -if (err = 0) {
 +if (err  0) {
  printk(KERN_ERR XENBUS request irq failed %i\n, err);
  return err;
  }
 
 diff --git a/drivers/xen/xenbus/xenbus_probe.c 
 b/drivers/xen/xenbus/xenbus_probe.c
 index b793723..a67ccc0 100644
 --- a/drivers/xen/xenbus/xenbus_probe.c
 +++ b/drivers/xen/xenbus/xenbus_probe.c
 @@ -719,37 +719,61 @@ static int __init xenstored_local_init(void)
  return err;
  }
  
 +enum xenstore_init {
 +UNKNOWN,
 +PV,
 +HVM,
 +LOCAL,
 +};
  static int __init xenbus_init(void)
  {
  int err = 0;
 +enum xenstore_init usage = UNKNOWN;
 +uint64_t v = 0;
  
  if (!xen_domain())
  return -ENODEV;
  
  xenbus_ring_ops_init();
  
 -if (xen_hvm_domain()) {
 -uint64_t v = 0;
 -err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, v);
 -if (err)
 -goto out_error;
 -xen_store_evtchn = (int)v;
 -err = hvm_get_parameter(HVM_PARAM_STORE_PFN, v);
 -if (err)
 -goto out_error;
 -xen_store_mfn = (unsigned long)v;
 -xen_store_interface = ioremap(xen_store_mfn  PAGE_SHIFT, 
 PAGE_SIZE);
 -} else {
 -xen_store_evtchn = xen_start_info-store_evtchn;
 -xen_store_mfn = xen_start_info-store_mfn;
 -if (xen_store_evtchn)
 -xenstored_ready = 1;
 -else {
 +if (xen_pv_domain())
 +usage = PV;
 +if (xen_hvm_domain())
 +usage = HVM;

The above is correct for domUs, and is overridden for dom0s:

 +if (xen_hvm_domain()  xen_initial_domain())
 +usage = LOCAL;
 +if (xen_pv_domain()  !xen_start_info-store_evtchn)
 +usage = LOCAL;

Instead of these checks, I think it should just be:

if (!xen_start_info-store_evtchn)
usage = LOCAL;

Any domain started after xenstore will have store_evtchn set, so if you don't
have this set, you are either going to be running xenstore locally, or will
use the ioctl to change it later (and so should still set up everything as if
it will be running locally).

 +if (xen_pv_domain()  xen_start_info-store_evtchn)
 +xenstored_ready = 1;

This part can now just be moved unconditionally into case PV.

 +
 +switch (usage) {
 +case LOCAL:
  err = xenstored_local_init();
  if (err)
  goto out_error;
 -}
 -xen_store_interface = mfn_to_virt(xen_store_mfn);
 +xen_store_interface = mfn_to_virt(xen_store_mfn);
 +break;
 +case PV:
 +xen_store_evtchn = xen_start_info-store_evtchn;
 +xen_store_mfn = xen_start_info-store_mfn;
 +xen_store_interface = mfn_to_virt(xen_store_mfn);
 +break;
 +case HVM:
 +err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, v);
 +if (err)
 +goto out_error;
 +xen_store_evtchn = (int)v;
 +err = hvm_get_parameter(HVM_PARAM_STORE_PFN, v);
 +if (err)
 +goto out_error;
 +xen_store_mfn = (unsigned long)v;
 +xen_store_interface =
 +ioremap(xen_store_mfn  PAGE_SHIFT, PAGE_SIZE);
 +

Linaro 2012/8/8 Android Platform Team Agenda Posted

2012-08-07 Thread Zach Pfeffer
The agenda has been posted to:

https://wiki.linaro.org/Platform/Android/Meetings/2012-08-08

Please take a look and add to it if you need to.

See everyone tomorrow in #linaro-meeting on irc.freenode.net at 13:00 UTC.

-- 
Zach Pfeffer
Android Platform Team Lead, Linaro Platform Teams
Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linaro
http://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog

___
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev