Konrad?
On 05/02/2018 05:49 PM, Oleksandr Andrushchenko wrote:
From: Oleksandr Andrushchenko
Add missing string constants for {feature|request}-raw-pointer
to align with the rest of the interface file.
Fixes 7868654ff7fe ("kbdif: Define "feature-raw-pointer"
On Mon, May 7, 2018 at 5:16 AM Jan Beulich wrote:
> While on native entry into the kernel happens on the trampoline stack,
> PV Xen kernels are being entered with the current thread stack right
> away. Hence source and destination stacks are identical in that case,
> and
flight 122628 linux-4.14 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122628/
Failures and problems with tests :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
build-arm64-libvirt broken
On Fri, 6 Apr 2018, Stefano Stabellini wrote:
> > > > > 3) Understand how to address dom0. FreeRTOS Dom0 sounds like a good
> > > > > solution.
> > > > > Next step: reach out to Dornerworks and/or others that worked with
> > > > > FreeRTOS on Xen before. Figure out whether FreeRTOS is actually a
>
flight 122627 xen-4.10-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122627/
Failures and problems with tests :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
build-arm64-pvopsbroken
build-arm64-xsm
From: Suravee Suthikulpanit
Append AVIC related data when IRQ information is dumped with key 'i'.
Here is an example of per-domain statistics being dumped.
*** SVM AVIC Statistics **
>>> Domain 1 <<<
VCPU 0
* incomp_ipi
From: Suravee Suthikulpanit
This patch modifies the hvm_function_table.virtual_intr_delivery_enabled()
to become a bool variable as both VMX and SVM simply return static value.
Also, this patch hooks up virtual_intr_delivery_enabled and
deliver_posted_intr
From: Suravee Suthikulpanit
Introduce AVIC base initialization code. This includes:
* Setting up per-VM data structures.
* Setting up per-vCPU data structure.
* Initializing AVIC-related VMCB bit fields.
Signed-off-by: Suravee Suthikulpanit
From: Suravee Suthikulpanit
Add hooks to manage AVIC data structure during vcpu scheduling.
Signed-off-by: Suravee Suthikulpanit
Signed-off-by: Janakarajan Natarajan
---
xen/arch/x86/hvm/svm/avic.c |
From: Suravee Suthikulpanit
Introduce AVIC-related VMCB fields.
Signed-off-by: Suravee Suthikulpanit
Signed-off-by: Janakarajan Natarajan
---
xen/include/asm-x86/hvm/svm/vmcb.h | 23
From: Suravee Suthikulpanit
Enabling AVIC implicitly disables the V_IRQ, V_INTR_PRIO, V_IGN_TPR,
and V_INTR_VECTOR fields in the VMCB Control Word. Therefore, this patch
introduces new interrupt injection code via AVIC backing page.
Signed-off-by: Suravee
Rename vlapic_read_aligned() to vlapic_reg_read() to make it a pair of
vlapic_reg_write().
Signed-off-by: Janakarajan Natarajan
---
xen/arch/x86/hvm/vlapic.c | 10 +-
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/hvm/vlapic.c
OVERVIEW
This patchset is the first of a two-part patch series to introduce
the AMD Advanced Virtual Interrupt Controller (AVIC) support.
The AVIC hardware virtualizes local APIC registers of each vCPU via
the virtual APIC (vAPIC) backing page. This allows the guest to access
certain
From: Suravee Suthikulpanit
This patch introduces a new Xen command line option to enable/disable
SVM sub-options. Currently, it supports sub-option "avic", which can
be used to enable/disable SVM AVIC feature.
Signed-off-by: Suavee Suthikulpant
From: Suravee Suthikulpanit
AVIC introduces two new #vmexit handlers:
VMEXIT_INCOMP_IPI:
This occurs when an IPI could not be delivered to all targeted guest
virtual processors because at least one guest virtual processor
was not allocated to a physical core at
AMD AVIC code makes use of vlapic_reg_read() and vlapic_reg_write(). To
do this make the functions non-static.
Signed-off-by: Janakarajan Natarajan
---
xen/arch/x86/hvm/vlapic.c| 4 ++--
xen/include/asm-x86/hvm/vlapic.h | 4
2 files changed, 6
On 07/05/2018 20:57, Jason Andryuk wrote:
> commit 4c5d78a10dc89427140a50a1df5a0b8e9f073e82 (x86/pagewalk:
> Re-implement the pagetable walker) removed honoring the
> smap_check_policy of the running VCPU. guest_walk_tables is used by
> copy_{to,from}_guest for HVMs, so it is called when the
commit 4c5d78a10dc89427140a50a1df5a0b8e9f073e82 (x86/pagewalk:
Re-implement the pagetable walker) removed honoring the
smap_check_policy of the running VCPU. guest_walk_tables is used by
copy_{to,from}_guest for HVMs, so it is called when the hypervisor is
copying data and SMAP is inappropriate
On 5/7/18, 11:54 AM, "Boris Ostrovsky" wrote:
OK, fair enough. This should go to stable as well I think (4.12+),
copying them.
Reviewed-by: Boris Ostrovsky
Great, thanks Boris.
Frank
On 05/07/2018 02:00 PM, van der Linden, Frank wrote:
> Hi Boris,
>
> Thanks for the feedback.
>
> On 5/7/18, 8:13 AM, "Boris Ostrovsky" wrote:
>
> > diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
> > index 6b424da1ce75..c78b3e8fb2e5
flight 122642 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122642/
Failures :-/ but no regressions.
Tests which did not succeed, but are not blocking:
test-amd64-amd64-libvirt 13 migrate-support-checkfail never pass
test-arm64-arm64-xl-xsm
Hi Boris,
Thanks for the feedback.
On 5/7/18, 8:13 AM, "Boris Ostrovsky" wrote:
> diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
> index 6b424da1ce75..c78b3e8fb2e5 100644
> --- a/arch/x86/xen/enlighten_hvm.c
> +++
On Mon, May 07, 2018 at 11:00:23AM +0100, Andrew Cooper wrote:
> We don't advertise SVM in CPUID so a PV guest shouldn't be under the
> impression that it can use SVM functionality, but despite this, it really
> shouldn't see SVME set when reading EFER.
>
> On Intel processors, 32bit PV guests
On 05/07/2018 11:49 AM, Andrew Cooper wrote:
> On 07/05/18 16:46, Boris Ostrovsky wrote:
>> On 05/07/2018 11:29 AM, Andrew Cooper wrote:
>>> On 07/05/18 16:25, Jan Beulich wrote:
>>> On 07.05.18 at 16:19, wrote:
> On 07/05/18 15:11, Jan Beulich wrote:
>
>>> On 07.12.17 at 11:09, wrote:
> --- a/xen/arch/x86/x86_64/mm.c
> +++ b/xen/arch/x86/x86_64/mm.c
> @@ -1295,12 +1295,8 @@ static int mem_hotadd_check(unsigned long spfn,
> unsigned long epfn)
> return 0;
>
> /* Make sure the new range is not present
flight 122640 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122640/
Failures and problems with tests :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
build-arm64-xsm broken
On 07/05/18 16:46, Boris Ostrovsky wrote:
> On 05/07/2018 11:29 AM, Andrew Cooper wrote:
>> On 07/05/18 16:25, Jan Beulich wrote:
>> On 07.05.18 at 16:19, wrote:
On 07/05/18 15:11, Jan Beulich wrote:
On 04.05.18 at 17:11, wrote:
>>> On 07.05.18 at 17:46, wrote:
> On 05/07/2018 11:29 AM, Andrew Cooper wrote:
>> On 07/05/18 16:25, Jan Beulich wrote:
>> On 07.05.18 at 16:19, wrote:
On 07/05/18 15:11, Jan Beulich wrote:
On 04.05.18 at 17:11,
On 05/07/2018 11:29 AM, Andrew Cooper wrote:
> On 07/05/18 16:25, Jan Beulich wrote:
> On 07.05.18 at 16:19, wrote:
>>> On 07/05/18 15:11, Jan Beulich wrote:
>>> On 04.05.18 at 17:11, wrote:
> --- a/xen/arch/x86/hvm/svm/entry.S
> +++
>>> On 09.11.17 at 18:09, wrote:
> --- a/xen/drivers/cpufreq/Kconfig
> +++ b/xen/drivers/cpufreq/Kconfig
> @@ -1,3 +1,6 @@
>
> config HAS_CPUFREQ
> bool
> +
> +config HAS_CPU_TURBO
> + bool
This is about cpufreq, so HAS_CPUFREQ_TURBO please.
Also please try to
>>> On 09.11.17 at 18:09, wrote:
> From: Oleksandr Dmytryshyn
>
> Cpufreq driver should be more generalizable (not ACPI-specific).
> Thus this file should be placed to more convenient location.
>
> This is a rebased version of the
Hi Julien,
On Mon, Apr 30, 2018 at 5:58 PM, Julien Grall wrote:
> Hi,
>
>
> On 27/04/18 18:12, Mirela Simonovic wrote:
>>
>> When a CPU is hot-unplugged timer interrupts have to be released
>> in order to free the memory that was allocated when the interrupts
>> were
On 07/05/18 16:25, Jan Beulich wrote:
On 07.05.18 at 16:19, wrote:
>> On 07/05/18 15:11, Jan Beulich wrote:
>> On 04.05.18 at 17:11, wrote:
--- a/xen/arch/x86/hvm/svm/entry.S
+++ b/xen/arch/x86/hvm/svm/entry.S
@@ -61,23 +61,8
>>> On 07.05.18 at 16:19, wrote:
> On 07/05/18 15:11, Jan Beulich wrote:
> On 04.05.18 at 17:11, wrote:
>>> --- a/xen/arch/x86/hvm/svm/entry.S
>>> +++ b/xen/arch/x86/hvm/svm/entry.S
>>> @@ -61,23 +61,8 @@ UNLIKELY_START(ne, nsvm_hap)
>>>
I assume OSS test does not test realworld live migration,
therefore the following regression remained unnoticed:
name="hvm"
builder="hvm"
memory=555
vcpus=4
serial="pty"
boot="c"
disk=[ 'qcow2:/nfs/vdisk.qcow2,hda,w', ]
device_model_version="qemu-xen"
xl create -cf hvm.cfg
sleep N
xl migrate hvm
On Mon, May 7, 2018 at 7:40 AM, Alexandru Isaila
wrote:
> This patch is adding a way to enable/disable inguest pagefault
> events. It introduces the xc_monitor_inguest_pagefault function
> and adds the inguest_pagefault_disabled in the monitor structure.
> This is needed
On 05/04/2018 04:11 PM, van der Linden, Frank wrote:
> This patch fixes crashes during boot for HVM guests on older (pre HVM
> vector callback) Xen versions. Without this, current kernels will always
> fail to boot on those Xen versions.
>
> Sample stack trace:
>
>BUG: unable to handle kernel
Hi Julien,
On Mon, Apr 30, 2018 at 4:47 PM, Julien Grall wrote:
> Hi Mirela,
>
>
> On 27/04/18 18:12, Mirela Simonovic wrote:
>>
>> In existing code the virtual paging for non-boot CPUs is setup only on
>> boot.
>> The setup is triggered from start_xen() after all CPUs are
This run is configured for baseline tests only.
flight 74690 ovmf real [real]
http://osstest.xs.citrite.net/~osstest/testlogs/logs/74690/
Perfect :-)
All tests in this flight passed as required
version targeted for testing:
ovmf a4c35dedd92f2b9b7c68e9bd0490bc14b96457ef
baseline
On 07/05/18 15:11, Jan Beulich wrote:
On 04.05.18 at 17:11, wrote:
>> --- a/xen/arch/x86/hvm/svm/entry.S
>> +++ b/xen/arch/x86/hvm/svm/entry.S
>> @@ -61,23 +61,8 @@ UNLIKELY_START(ne, nsvm_hap)
>> jmp .Lsvm_do_resume
>> __UNLIKELY_END(nsvm_hap)
>>
>> -
>>> On 04.05.18 at 17:11, wrote:
> --- a/xen/arch/x86/hvm/svm/entry.S
> +++ b/xen/arch/x86/hvm/svm/entry.S
> @@ -61,23 +61,8 @@ UNLIKELY_START(ne, nsvm_hap)
> jmp .Lsvm_do_resume
> __UNLIKELY_END(nsvm_hap)
>
> -call svm_asid_handle_vmrun
> -
> -cmpb
flight 122636 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122636/
Regressions :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
test-arm64-arm64-xl-xsm broken
test-arm64-arm64-xl-xsm 4
This patch is adding a way to enable/disable inguest pagefault
events. It introduces the xc_monitor_inguest_pagefault function
and adds the inguest_pagefault_disabled in the monitor structure.
This is needed by the introspection so it will only get gla
faults and not get spammed with other faults.
flight 122624 xen-4.7-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122624/
Failures and problems with tests :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
build-arm64-xsm broken
build-arm64
flight 122625 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122625/
Perfect :-)
All tests in this flight passed as required
version targeted for testing:
ovmf a4c35dedd92f2b9b7c68e9bd0490bc14b96457ef
baseline version:
ovmf
Hi Jason,
On Sun, May 6, 2018 at 11:45 AM, Jason Cooper wrote:
> Hi Marek,
>
> On Sat, May 05, 2018 at 01:03:15AM +0200, Marek Marczykowski-Górecki wrote:
>> On Fri, May 04, 2018 at 06:13:25PM -0400, Rich Persaud wrote:
>> > > On May 1, 2018, at 08:53, Jason Cooper
While on native entry into the kernel happens on the trampoline stack,
PV Xen kernels are being entered with the current thread stack right
away. Hence source and destination stacks are identical in that case,
and special care is needed.
Other than in sync_regs() the copying done on the INT80
flight 122635 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122635/
Failures :-/ but no regressions.
Tests which did not succeed, but are not blocking:
test-amd64-amd64-libvirt 13 migrate-support-checkfail never pass
test-arm64-arm64-xl-xsm
On 07/05/18 11:43, Jan Beulich wrote:
On 07.05.18 at 12:00, wrote:
>> --- a/xen/arch/x86/pv/emul-priv-op.c
>> +++ b/xen/arch/x86/pv/emul-priv-op.c
>> @@ -867,9 +867,16 @@ static int read_msr(unsigned int reg, uint64_t *val,
>> return X86EMUL_OKAY;
>>
>>
On 07/05/18 12:37, Andrew Cooper wrote:
> On 07/05/18 11:30, Juergen Gross wrote:
>> On 07/05/18 12:23, Andrew Cooper wrote:
>>> On 07/05/18 11:16, Juergen Gross wrote:
"make -C docs all" fails due to incorrect markdown syntax in
livepatch.markdown. Correct it.
>>> Which version of
>>> On 07.05.18 at 12:00, wrote:
> --- a/xen/arch/x86/pv/emul-priv-op.c
> +++ b/xen/arch/x86/pv/emul-priv-op.c
> @@ -867,9 +867,16 @@ static int read_msr(unsigned int reg, uint64_t *val,
> return X86EMUL_OKAY;
>
> case MSR_EFER:
> -*val =
> -Original Message-
> From: Jan Beulich
> Sent: Monday, May 7, 2018 4:24 PM
> To: David Wang
> Cc: xen-devel ; Fiona Li(BJ-RD)
>
> Subject: Re: [PATCH v4] x86/cpu: Add supports for zhaoxin
On 07/05/18 11:30, Juergen Gross wrote:
> On 07/05/18 12:23, Andrew Cooper wrote:
>> On 07/05/18 11:16, Juergen Gross wrote:
>>> "make -C docs all" fails due to incorrect markdown syntax in
>>> livepatch.markdown. Correct it.
>> Which version of markdown, ooi? Version 1.0.1 seems fine with this.
On 07/05/18 12:26, Andrew Cooper wrote:
> On 07/05/18 11:16, Juergen Gross wrote:
>> "make -C docs all" fails due to incorrect markdown syntax in
>> feature-levelling.pandoc. Correct it.
>>
>> Signed-off-by: Juergen Gross
>
> What is trying to render this as markdown? It's
>>> On 07.05.18 at 12:11, wrote:
>> -Original Message-
>> From: Jan Beulich
>> Sent: Monday, May 7, 2018 4:24 PM
>>
>> >>> On 07.05.18 at 03:37, wrote:
>> > --- a/xen/arch/x86/cpu/intel_cacheinfo.c
>> > +++
On 07/05/18 12:23, Andrew Cooper wrote:
> On 07/05/18 11:16, Juergen Gross wrote:
>> "make -C docs all" fails due to incorrect markdown syntax in
>> livepatch.markdown. Correct it.
>
> Which version of markdown, ooi? Version 1.0.1 seems fine with this.
>
...
/usr/bin/pandoc --number-sections
On 07/05/18 11:16, Juergen Gross wrote:
> credit2_cap_period_ms isn't mentioned in xen-command-line.markdown.
> Add a description.
>
> Signed-off-by: Juergen Gross
Acked-by: Andrew Cooper
___
Xen-devel
On 07/05/18 11:16, Juergen Gross wrote:
> "make -C docs all" fails due to incorrect markdown syntax in
> livepatch.markdown. Correct it.
Which version of markdown, ooi? Version 1.0.1 seems fine with this.
___
Xen-devel mailing list
On 07/05/18 11:16, Juergen Gross wrote:
> Many of the architecture specific boot parameters are not qualified
> as such. Correct that.
You also rearrange PKU to be in order.
> Signed-off-by: Juergen Gross
Acked-by: Andrew Cooper
"make -C docs all" fails due to incorrect markdown syntax in
livepatch.markdown. Correct it.
Signed-off-by: Juergen Gross
Reviewed-by: Konrad Rzeszutek Wilk
---
docs/misc/livepatch.markdown | 590 ---
1 file
docs/misc/xen-command-line.markdown has several issues regarding
missing architecture qualifiers and missing documentation of one
parameter. Fix those.
Some other documents have syntax issues, too, which show up when
trying to do "make all" in the docs directory. Fix those as well.
Changes in
credit2_cap_period_ms isn't mentioned in xen-command-line.markdown.
Add a description.
Signed-off-by: Juergen Gross
---
docs/misc/xen-command-line.markdown | 10 ++
1 file changed, 10 insertions(+)
diff --git a/docs/misc/xen-command-line.markdown
Many of the architecture specific boot parameters are not qualified
as such. Correct that.
Signed-off-by: Juergen Gross
---
docs/misc/xen-command-line.markdown | 184 ++--
1 file changed, 92 insertions(+), 92 deletions(-)
diff --git
"make -C docs all" fails due to incorrect markdown syntax in
feature-levelling.pandoc. Correct it.
Signed-off-by: Juergen Gross
---
docs/features/feature-levelling.pandoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/features/feature-levelling.pandoc
"make -C docs all" fails due to incorrect markdown syntax in
intel_psr_cat_cdp.pandoc. Correct it.
Signed-off-by: Juergen Gross
---
docs/features/intel_psr_cat_cdp.pandoc | 366 -
1 file changed, 175 insertions(+), 191 deletions(-)
diff --git
flight 74689 distros-debian-sid real [real]
http://osstest.xs.citrite.net/~osstest/testlogs/logs/74689/
Failures :-/ but no regressions.
Tests which did not succeed, but are not blocking:
test-amd64-i386-i386-sid-netboot-pvgrub 10 debian-di-install fail like 74650
flight 122632 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/122632/
Regressions :-(
Tests which did not succeed and are blocking,
including tests which could not be run:
build-armhf broken
build-armhf 5
>>> On 07.05.18 at 03:37, wrote:
> --- a/xen/arch/x86/cpu/intel_cacheinfo.c
> +++ b/xen/arch/x86/cpu/intel_cacheinfo.c
> @@ -176,7 +176,9 @@ unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c)
>* Don't use cpuid2 if cpuid4 is supported. For P4, we use cpuid2
This patch introduces save_one() functions. They will be called in the
*save() so we can extract data for a single instance.
Signed-off-by: Alexandru Isaila
---
Changes since V3:
- Rb to the lateste staging version
- Split the patch into 2 patches.
---
This patch adds a vcpu param for all the *save() fucntions. The *save()
functions now handle only one instance. The for_each loop is transferred
to the caller.
Signed-off-by: Alexandru Isaila
---
Changes since V3:
- Rb to the lateste staging version
-
On 07/05/2018 08:09, Jan Beulich wrote:
On 07.05.18 at 03:06, wrote:
>> When I'm performing some hypercalls with some "unexpected" parameters
>> (robustness test) sometimes the guest is explicitly "killed" by xen
>> calling the domain_crash(), but sometimes the guest
On 07/05/2018 09:00, Jan Beulich wrote:
On 07.05.18 at 09:30, wrote:
>> On 07/05/2018 08:03, Jan Beulich wrote:
>> On 04.05.18 at 19:28, wrote:
--- a/xen/arch/x86/pv/emul-priv-op.c
+++ b/xen/arch/x86/pv/emul-priv-op.c
>>> On 07.05.18 at 09:30, wrote:
> On 07/05/2018 08:03, Jan Beulich wrote:
> On 04.05.18 at 19:28, wrote:
>>> --- a/xen/arch/x86/pv/emul-priv-op.c
>>> +++ b/xen/arch/x86/pv/emul-priv-op.c
>>> @@ -867,7 +867,9 @@ static int
On 07/05/2018 08:03, Jan Beulich wrote:
On 04.05.18 at 19:28, wrote:
>> --- a/xen/arch/x86/pv/emul-priv-op.c
>> +++ b/xen/arch/x86/pv/emul-priv-op.c
>> @@ -867,7 +867,9 @@ static int read_msr(unsigned int reg, uint64_t *val,
>> return X86EMUL_OKAY;
>>
>>
>>> On 07.05.18 at 03:06, wrote:
> When I'm performing some hypercalls with some "unexpected" parameters
> (robustness test) sometimes the guest is explicitly "killed" by xen
> calling the domain_crash(), but sometimes the guest just crash without any
> explicit message on
>>> On 04.05.18 at 19:28, wrote:
> --- a/xen/arch/x86/pv/emul-priv-op.c
> +++ b/xen/arch/x86/pv/emul-priv-op.c
> @@ -867,7 +867,9 @@ static int read_msr(unsigned int reg, uint64_t *val,
> return X86EMUL_OKAY;
>
> case MSR_EFER:
> -*val =
On 04/05/18 17:11, Jan Beulich wrote:
> Neither the register values copying nor the trace entry generation need
> doing in assembly. The VMLOAD invocation can also be further deferred
> (and centralized). Therefore replace the svm_asid_handle_vmrun()
> invocation with one of the new helper.
>
>
On 04/05/18 17:10, Jan Beulich wrote:
> While the main problem to be addressed here is the issue of what so far
> was named "vmcb_in_sync" starting out with the wrong value (should have
> been true instead of false, to prevent performing a VMSAVE without ever
> having VMLOADed the vCPU's state),
On 04/05/18 19:28, Andrew Cooper wrote:
> We don't advertise SVM in CPUID so a PV guest shouldn't be under the
> impression that it can use SVM functionality, but despite this, it really
> shouldn't see SVME set when reading EFER.
>
> Introduce EFER_KNOWN_MASK to whitelist the features Xen knows
On Fri, 4 May 2018 15:38:49 +
Lars Kurth wrote:
[...]
>Julien: where would the reset code live then?
>Christopher: would want to avoid Dom0 having access to the config space. The
>VM hosting
>the toolstack will need to exercise control over access to the config space.
80 matches
Mail list logo