On Tue, Jul 25, 2023 at 02:03:32PM -0400, John Snow wrote:
> This property isn't meant to do much else besides return a list of
> strings, so move this setup back out into _pre_launch().
>
> Signed-off-by: John Snow
> ---
> python/qemu/machine/machine.py | 5 ++---
> 1 file changed, 2 insertions
On Tue, Jul 25, 2023 at 02:03:33PM -0400, John Snow wrote:
> If everything has gone smoothly, we'll already have closed the socket we
> gave to the child during post_launch. The other half of the pair that we
> gave to the QMP connection should, likewise, be definitively closed by
> now.
>
> Howev
On Tue, Jul 25, 2023 at 02:03:34PM -0400, John Snow wrote:
> Useful if we want to use ConsoleSocket() for a socket created by
> socketpair().
>
> Signed-off-by: John Snow
> ---
> python/qemu/machine/console_socket.py | 29 +++
> 1 file changed, 21 insertions(+), 8 deletio
On Tue, Jul 25, 2023 at 02:03:35PM -0400, John Snow wrote:
> Create a socketpair for the console output. This should help eliminate
> race conditions around console text early in the boot process that might
> otherwise have been dropped on the floor before being able to connect to
> QEMU under "ser
Fabiano Rosas writes:
> Peter Xu writes:
>
>> v2:
>> - Patch "migration: Provide explicit error message for file shutdowns"
>> - Touched up qapi doc [Fabiano]
>> - Added Bugzilla link to commit which I didn't even notice that I was
>> fixing a bug.. but rightfully pointed out by Laszlo.
On Tue, Jul 25, 2023 at 02:03:36PM -0400, John Snow wrote:
> Like the QMP and console sockets, begin using socketpairs for the qtest
> connection, too. After this patch, we'll be able to remove the vestigial
> sock_dir argument, but that cleanup is best done in its own patch.
>
> Signed-off-by: Jo
On Tue, Jul 25, 2023 at 02:03:37PM -0400, John Snow wrote:
> By using a socketpair for all of the sockets managed by the VM class and
> its extensions, we don't need the sock_dir argument anymore, so remove
> it.
>
> We only added this argument so that we could specify a second, shorter
> temporar
On Fri, Jul 21, 2023 at 02:49:31PM +, Het Gala wrote:
> MigrateChannelList allows to connect accross multiple interfaces.
> Add MigrateChannelList struct as argument to migration QAPIs.
>
> We plan to include multiple channels in future, to connnect
> multiple interfaces. Hence, we choose 'Mig
On Tue, Jul 25, 2023 at 2:26 PM Daniel P. Berrangé wrote:
>
> On Tue, Jul 25, 2023 at 02:03:37PM -0400, John Snow wrote:
> > By using a socketpair for all of the sockets managed by the VM class and
> > its extensions, we don't need the sock_dir argument anymore, so remove
> > it.
> >
> > We only a
On 7/24/23 07:38, Peter Maydell wrote:
Does it? HCR_EL2 says "behaves as 0 if EL2 is not enabled in the
current Security state". If the current Security state is Root then
EL2 isn't enabled (because there's no such thing as EL2 Root), so the
function should return 0, shouldn't it?
I guess there
On Tue, Jul 25, 2023 at 02:33:36PM -0400, John Snow wrote:
> On Tue, Jul 25, 2023 at 2:26 PM Daniel P. Berrangé
> wrote:
> >
> > On Tue, Jul 25, 2023 at 02:03:37PM -0400, John Snow wrote:
> > > By using a socketpair for all of the sockets managed by the VM class and
> > > its extensions, we don't
On Tue, Jul 25, 2023 at 07:34:09PM +0100, Daniel P. Berrangé wrote:
> On Fri, Jul 21, 2023 at 02:49:31PM +, Het Gala wrote:
> > MigrateChannelList allows to connect accross multiple interfaces.
> > Add MigrateChannelList struct as argument to migration QAPIs.
> >
> > We plan to include multipl
On Fri, Jul 21, 2023 at 02:49:34PM +, Het Gala wrote:
> Integrate MigrateChannelList with all transport backends
> (socket, exec and rdma) for both src and dest migration
> endpoints for qmp migration.
>
> For current series, limit the size of MigrateChannelList
> to single element (single int
From: Fan Ni
With the change, when setting up memory for type3 memory device, we can
create DC regions
A property 'num-dc-regions' is added to ct3_props to allow users to pass the
number of DC regions to create. To make it easier, other region parameters
like region base, length, and block size a
From: Fan Ni
Based on CXL spec 3.0 Table 8-94 (Identify Memory Device Output
Payload), dynamic capacity event log size should be part of
output of the Identify command.
Add dc_event_log_size to the output payload for the host to get the info.
Signed-off-by: Fan Ni
---
hw/cxl/cxl-mailbox-utils.
From: Fan Ni
Per CXL spec 3.0, two mailbox commands are implemented:
Add Dynamic Capacity Response (Opcode 4802h) 8.2.9.8.9.3, and
Release Dynamic Capacity (Opcode 4803h) 8.2.9.8.9.4.
Signed-off-by: Fan Ni
---
hw/cxl/cxl-mailbox-utils.c | 253
include/hw/c
From: Fan Ni
Add dynamic capacity extent list representative to the definition of
CXLType3Dev and add get DC extent list mailbox command per
CXL.spec.3.0:.8.2.9.8.9.2.
Signed-off-by: Fan Ni
---
hw/cxl/cxl-mailbox-utils.c | 71 +
hw/mem/cxl_type3.c
v1[1]->v2:
1. fix a regression issue reported by Ira[2]:
2. fix a compile warning due to uninitialized 'rip' in qmp processing function.
[1]
https://lore.kernel.org/linux-cxl/20230724162313.34196-1-fan...@samsung.com/T/#t
[2]
https://lore.kernel.org/linux-cxl/64bfe7b090843_12757b2945b@iweiny-m
From: Fan Ni
Since fabric manager emulation is not supported yet, the change implements
the functions to add/release dynamic capacity extents as QMP interfaces.
1. Add dynamic capacity extents:
For example, the command to add two continuous extents (each is 128MB long)
to region 0 (starting at
From: Fan Ni
Add (file/memory backed) host backend, all the dynamic capacity regions
will share a single, large enough host backend. Set up address space for
DC regions to support read/write operations to dynamic capacity for DCD.
With the change, following supports are added:
1. add a new prope
From: Fan Ni
Rename mem_size as static_mem_size for type3 memdev to cover static RAM and
pmem capacity, preparing for the introduction of dynamic capacity to support
dynamic capacity devices.
Signed-off-by: Fan Ni
---
hw/cxl/cxl-mailbox-utils.c | 5 +++--
hw/mem/cxl_type3.c | 8 -
From: Fan Ni
Not all dpa range in the dc regions is valid to access until an extent
covering the range has been added. Add a bitmap for each region to
record whether a dc block in the region has been backed by dc extent.
For the bitmap, a bit in the bitmap represents a dc block. When a dc
extent
From: Fan Ni
Per cxl spec 3.0, add dynamic capacity region representative based on
Table 8-126 and extend the cxl type3 device definition to include dc region
information. Also, based on info in 8.2.9.8.9.1, add 'Get Dynamic Capacity
Configuration' mailbox support.
Signed-off-by: Fan Ni
---
hw
On 7/24/23 06:40, Daniel Henrique Barboza wrote:
Hi,
As some of you are already aware the current RVV emulation could be faster.
We have at least one commit (bc0ec52eb2, "target/riscv/vector_helper.c:
skip set tail when vta is zero") that tried to address at least part of the
problem.
Running a
On Tue, Jul 25, 2023 at 3:09 PM Hanna Czenczek wrote:
>
> On 25.07.23 12:03, Eugenio Perez Martin wrote:
> > On Tue, Jul 25, 2023 at 9:53 AM Hanna Czenczek wrote:
> >> On 24.07.23 17:48, Eugenio Perez Martin wrote:
> >>> On Fri, Jul 21, 2023 at 6:07 PM Hanna Czenczek wrote:
> On 21.07.23 17
On Tue, Jul 25, 2023 at 9:04 AM Philippe Mathieu-Daudé
wrote:
>
> Hi Niklas, John, Paolo, Kevin,
>
> On 19/7/23 12:47, Niklas Cassel wrote:
>
> >> Niklas Cassel (8):
> >>hw/ide/ahci: remove stray backslash
> >>hw/ide/core: set ERR_STAT in unsupported command completion
> >>hw/ide/ahci:
On Tue, 25 Jul 2023 at 15:57, Michael Tokarev wrote:
>
> The following changes since commit 3ee44ec72753ec0ff05ad1569dfa609203d722b2:
>
> Merge tag 'pull-request-2023-07-24' of https://gitlab.com/thuth/qemu into
> staging (2023-07-24 18:06:36 +0100)
>
> are available in the Git repository at:
>
;
> are available in the Git repository at:
>
> https://github.com/philmd/qemu.git tags/misc-fixes-20230725
>
> for you to fetch changes up to f8cfdd2038c1823301e6df753242e465b1dc8539:
>
> target/tricore: Rename tricore_feature (2023-07-25 14:42:00 +0200)
>
>
On Tue, 25 Jul 2023 at 17:26, Daniel P. Berrangé wrote:
>
> The following changes since commit a279ca4ea07383314b2d2b2f1d550be9482f148e:
>
> Merge tag 'pull-target-arm-20230725' of
> https://git.linaro.org/people/pmaydell/qemu-arm into staging (2023-07-25
> 12:44
Hi Phil,
On Tue, Jul 25, 2023 at 04:58:29PM +0200, Philippe Mathieu-Daudé wrote:
> From: Bastian Koppelmann
>
> this name is used by capstone and will lead to a build failure of QEMU,
> when capstone is enabled. So we rename it to tricore_has_feature(), to
> match has_feature() in translate.c.
>
On Fri, Jul 21, 2023 at 02:49:35PM +, Het Gala wrote:
> Integrate MigrateChannelList with all transport backends
> (socket, exec and rdma) for both src and dest migration
> endpoints for hmp migration.
>
> Suggested-by: Aravind Retnakaran
> Signed-off-by: Het Gala
> ---
> migration/migratio
On Fri, Jul 21, 2023 at 02:49:37PM +, Het Gala wrote:
> modify multifd tcp common test to incorporate the new QAPI
> syntax defined.
>
> Suggested-by: Aravind Retnakaran
> Signed-off-by: Het Gala
> ---
> tests/qtest/migration-test.c | 7 ++-
> 1 file changed, 6 insertions(+), 1 deletion
On 26/07/23 12:07 am, Daniel P. Berrangé wrote:
On Tue, Jul 25, 2023 at 07:34:09PM +0100, Daniel P. Berrangé wrote:
On Fri, Jul 21, 2023 at 02:49:31PM +, Het Gala wrote:
MigrateChannelList allows to connect accross multiple interfaces.
Add MigrateChannelList struct as argument to migratio
On Tue, Jul 25, 2023 at 12:37:44PM +0200, Stefano Garzarella wrote:
> Until libblkio 1.3.0, virtio-blk drivers had completion eventfd
> notifications enabled from the start, but from the next releases
> this is no longer the case, so we have to explicitly enable them.
>
> In fact, the libblkio doc
On 26/07/23 12:08 am, Daniel P. Berrangé wrote:
On Fri, Jul 21, 2023 at 02:49:34PM +, Het Gala wrote:
Integrate MigrateChannelList with all transport backends
(socket, exec and rdma) for both src and dest migration
endpoints for qmp migration.
For current series, limit the size of Migrate
On 26/07/23 12:45 am, Daniel P. Berrangé wrote:
On Fri, Jul 21, 2023 at 02:49:35PM +, Het Gala wrote:
Integrate MigrateChannelList with all transport backends
(socket, exec and rdma) for both src and dest migration
endpoints for hmp migration.
Suggested-by: Aravind Retnakaran
Signed-off-
Sorry, last reply on this patch was accidently replied only to Daniel.
Pasting the reply again so it is received by all the active maintianers
here. Apologies for the error 😅
On 26/07/23 12:07 am, Daniel P. Berrangé wrote:
On Tue, Jul 25, 2023 at 07:34:09PM +0100, Daniel P. Berrangé wrote:
On
On Mon, Jul 24, 2023 at 05:46:10PM +0200, Stefano Garzarella wrote:
> libblkio 1.3.0 added support of "fd" property for virtio-blk-vhost-vdpa
> driver. In QEMU, starting from commit cad2ccc395 ("block/blkio: use
> qemu_open() to support fd passing for virtio-blk") we are using
> `blkio_get_int(...,
On Mon, Jul 24, 2023 at 05:46:11PM +0200, Stefano Garzarella wrote:
> The way the virtio-blk driver is implemented in libblkio,
> it's much easier to use blkio_set_int() instead of blkio_get_int()
> and have it fail right away to see if `fd` is supported by the
> transport. See https://gitlab.com/l
On Tue, 18 Jul 2023 at 05:42, William Henderson
wrote:
>
> This patch adds live migration to the vfio-user specification, based on the
> new
> VFIO migration interface introduced in the kernel here:
>
> https://lore.kernel.org/all/20220224142024.147653-10-yish...@nvidia.com/
Hi,
This is not an i
On 7/24/23 10:43, Peter Maydell wrote:
Where architecturally one ARM_FEATURE_X flag implies another
ARM_FEATURE_Y, we allow the CPU init function to only set X, and then
set Y for it. Currently we do this in two places -- we set a few
flags in arm_cpu_post_init() because we need them to decide w
Set mc->valid_cpu_{types, models} so that the specified CPU type
can be checked in machine_run_board_init(). We needn't to do the
check by ourselves.
Signed-off-by: Gavin Shan
---
hw/arm/virt.c | 39 ++-
1 file changed, 22 insertions(+), 17 deletions(-)
diff
There are two places where the user specified CPU type is checked to see
if it's supported or allowed by the board: machine_run_board_init() and
mc->init(). We don't have to maintain two duplicate sets of logic. This
series intends to move the check to machine_run_board_init().
PATCH[1-3] Improves
Set mc->valid_cpu_{types, models} so that the specified CPU type
can be checked in machine_run_board_init(). We needn't to do the
check by ourselves.
Signed-off-by: Gavin Shan
---
hw/riscv/shakti_c.c | 17 +++--
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/hw/riscv/
Set mc->valid_cpu_{types, models} so that the specified CPU type
can be checked in machine_run_board_init(). We needn't to do the
check by ourselves.
Signed-off-by: Gavin Shan
---
hw/arm/sbsa-ref.c | 29 -
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git
QEMU will be terminated if the specified CPU type isn't supported
in machine_run_board_init(). The list of supported CPU type is
maintained in mc->valid_cpu_types. The error handling can be used
to propagate error messages, to be consistent how the errors are
handled for other situations in the sam
Set mc->valid_cpu_{types, models} so that the specified CPU type
can be checked in machine_run_board_init(). We needn't to do the
check by ourselves.
Signed-off-by: Gavin Shan
---
hw/arm/bananapi_m2u.c | 18 +++--
hw/arm/cubieboard.c | 18 +++--
hw/arm/mps2-tz.c
The logic of checking if the specified CPU type is supported in
machine_run_board_init() is independent enough. Factor it out into
helper is_cpu_type_supported(). With this, machine_run_board_init()
looks a bit clean. Since we're here, @machine_class is renamed to
@mc to avoid multiple line spannin
The supported CPU models instead of typenames should be printed when
the user specified CPU type isn't supported in is_cpu_type_supported(),
to be consistent with the CPU model specified by user through '-cpu
' option.
Correct the error messages to print CPU models, maintained in the newly
added m
The 'host' CPU model isn't supported until KVM or HVF is enabled.
For example, the following error messages are seen when the guest
is started with option '-cpu cortex-a8'.
qemu-system-aarch64: Invalid CPU type: cortex-a8-arm-cpu
The valid models are: cortex-a7, cortex-a15, cortex-a35,
corte
On Mon, Jul 24, 2023 at 2:56 AM Alyssa Ross wrote:
>
> Gurchetan Singh writes:
>
> > In terms of API stability/versioning/packaging, once this series is
> > reviewed, the plan is to cut a "gfxstream upstream release branch". We
> > will have the same API guarantees as any other QEMU project then
On Wed, Jul 26, 2023 at 2:21 AM Eugenio Pérez wrote:
>
> The device already has a virtio status set by vhost_vdpa_init by the
> time vhost_vdpa_probe_cvq_isolation is called. vhost_vdpa_init set
> S_ACKNOWLEDGE and S_DRIVER, so it is invalid to just reset it.
>
> It is invalid to start the device
Hello,
On behalf of the QEMU Team, I'd like to announce the availability of the
second release candidate for the QEMU 8.1 release. This release is meant
for testing purposes and should not be used in a production environment.
http://download.qemu.org/qemu-8.1.0-rc1.tar.xz
http://download.qemu
On Tue, Jul 25, 2023 at 3:48 PM Hawkins Jiawei wrote:
>
> On 2023/7/25 14:47, Jason Wang wrote:
> > On Sun, Jul 23, 2023 at 5:28 PM Hawkins Jiawei wrote:
> >>
> >> This patch introduces vhost_vdpa_net_load_single_vlan()
> >> and vhost_vdpa_net_load_vlan() to restore the vlan
> >> filtering state
> > 2. I also have some implementations for pieces of CLOCK, namely the
> > HFCLKSTART/HFCLKSTOP events and HFCLKSTARTED event. Should I include that
> > in this patch series, or would you prefer it in a separate series? It is
> > unrelated to DETECT and POWER.
>
>
> If you think they're ready
25.07.2023 22:11, Bastian Koppelmann wrote:
...
Michael Tokarev has already picked it up. See
https://lore.kernel.org/qemu-devel/20230725145829.37782-11-phi...@linaro.org/T/#u
I noticed that too, we did it almost at the same time.
But there's nothing wrong with that. It doesn't matter
how a
Adds qtest_irq_intercept_out_named method, which utilizes a new optional
name parameter to the irq_intercept_out qtest command.
Signed-off-by: Chris Laplante
---
softmmu/qtest.c| 24
tests/qtest/libqtest.c | 6 ++
tests/qtest/libqtest.h | 11 +++
3 f
Signed-off-by: Chris Laplante
---
softmmu/qtest.c | 16 ++--
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/softmmu/qtest.c b/softmmu/qtest.c
index f8d764b719..1c92e5a6a3 100644
--- a/softmmu/qtest.c
+++ b/softmmu/qtest.c
@@ -365,6 +365,15 @@ void qtest_set_command_cb(
This patch series implements the nRF51 DETECT signal
in the GPIO peripheral. A qtest is added exercising the signal.
To implement the test, named out-GPIO IRQ interception had to be added
to the qtest framework. I also took the opportunity to improve IRQ
interception a bit by adding 'FAIL' respons
Exercise the DETECT mechanism of the GPIO peripheral.
Signed-off-by: Chris Laplante
Reviewed-by: Peter Maydell
---
tests/qtest/microbit-test.c | 42 +
1 file changed, 42 insertions(+)
diff --git a/tests/qtest/microbit-test.c b/tests/qtest/microbit-test.c
ind
Named interception of in-GPIOs is not supported yet.
Signed-off-by: Chris Laplante
Reviewed-by: Peter Maydell
---
softmmu/qtest.c | 7 ++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/softmmu/qtest.c b/softmmu/qtest.c
index 7fd8546ed2..1719bbddc3 100644
--- a/softmmu/qtest.c
Implement nRF51 DETECT signal in the GPIO peripheral.
The reference manual makes mention of a per-pin DETECT signal, but these
are not exposed to the user. See
https://devzone.nordicsemi.com/f/nordic-q-a/39858/gpio-per-pin-detect-signal-available
for more information. Currently, I don't see a rea
This is much better than just silently failing with OK.
Signed-off-by: Chris Laplante
Reviewed-by: Peter Maydell
---
softmmu/qtest.c | 13 +++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/softmmu/qtest.c b/softmmu/qtest.c
index 1719bbddc3..c9751f527f 100644
--- a/sof
>On Tue, 25 Jul 2023 at 10:13, Michael Tokarev wrote:
> >
> > 25.07.2023 12:00, dinglimin wrote:
> > > Replaced a call to malloc() and its respective call to free() with
> > > g_malloc() and g_free().
> > >
> > > Signed-off-by: dinglimin
> > >
> > > V1 -> V2:if cpu_memory_rw_debug failed, still
Universal Flash Storage (UFS) is a high-performance mass storage device
with a serial interface. It is primarily used as a high-performance
data storage device for embedded applications.
This commit contains code for UFS device to be recognized
as a UFS PCI device.
Patches to handle UFS logical un
Since v6:
- Add tests/qtest/ufs-test.c to test ufs initialisation and I/O
- Add struct UtpTaskReqDesc to include/block/ufs.h
- Fix ufs_log2() logic
- Fix ufs-lu to use 4K as default block size to match the ufs spec
Since I created a new file, tests/qtest/ufs-test.c, I added Laurent Vivier to
the
This commit adds support for ufs logical unit.
The LU handles processing for the SCSI command,
unit descriptor query request.
This commit enables the UFS device to process
IO requests.
Signed-off-by: Jeuk Kim
---
hw/ufs/lu.c | 1445 ++
hw/ufs/mes
This commit makes the UFS device support query
and nop out transfer requests.
The next patch would be support for UFS logical
unit and scsi command transfer request.
Signed-off-by: Jeuk Kim
---
hw/ufs/trace-events | 1 +
hw/ufs/ufs.c| 980 +++-
This patch includes the following tests
Test mmio read
Test ufs device initialization and ufs-lu recognition
Test I/O (Performs a write followed by a read to verify)
Signed-off-by: Jeuk Kim
---
MAINTAINERS | 1 +
tests/qtest/meson.build | 1 +
tests/qtest/ufs-test.c | 575
Hi!
I tried to build qemu-8.1-rc1 on debian, and immediately faced an
issue with missing ui/keycodemapdb in the release tarball which was
there in 8.0.
Should we include that one into the tarball as before?
Thanks,
/mjt
Peter Xu writes:
> Hi, Markus,
>
> On Tue, Jul 25, 2023 at 01:10:01PM +0200, Markus Armbruster wrote:
[...]
>> For better or worse, we duplicate full documentation between
>> MigrationParameter, MigrateSetParameters, and MigrationParameters. This
>> would be the first instance where we referen
On Wed, Jul 26, 2023 at 4:07 AM Jason Wang wrote:
>
> On Wed, Jul 26, 2023 at 2:21 AM Eugenio Pérez wrote:
> >
> > The device already has a virtio status set by vhost_vdpa_init by the
> > time vhost_vdpa_probe_cvq_isolation is called. vhost_vdpa_init set
> > S_ACKNOWLEDGE and S_DRIVER, so it is i
If holdp returns NULL, you need to execute unuser_lock on hnewp and hnamep when
exiting the function
Signed-off-by: dinglimin
---
bsd-user/freebsd/os-sys.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/bsd-user/freebsd/os-sys.c b/bsd-user/freebsd/os-sys.c
index df3170655
On Wed, 12 Jul 2023 at 02:12, Nicholas Piggin wrote:
>
> On Tue Jul 11, 2023 at 9:03 PM AEST, Matheus Tavares Bernardino wrote:
> > > Nicholas Piggin wrote:
> > >
> > > diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
> > > index 6911b73c07..ce8b42eb15 100644
> > > --- a/gdbstub/gdbstub.c
> > >
26.07.2023 09:20, Michael Tokarev пишет:
Hi!
I tried to build qemu-8.1-rc1 on debian, and immediately faced an
issue with missing ui/keycodemapdb in the release tarball which was
there in 8.0.
Should we include that one into the tarball as before?
This also applies to berkeley-softfloat-3 and
11.05.2023 12:50, Paolo Bonzini wrote:
...
+ printf "%s\n" ' --disable-debug-info Enable debug symbols and other
information'
Hmm? So is it disable or enable? ;)
/mjt
On 25.07.23 20:53, Eugenio Perez Martin wrote:
On Tue, Jul 25, 2023 at 3:09 PM Hanna Czenczek wrote:
On 25.07.23 12:03, Eugenio Perez Martin wrote:
On Tue, Jul 25, 2023 at 9:53 AM Hanna Czenczek wrote:
On 24.07.23 17:48, Eugenio Perez Martin wrote:
On Fri, Jul 21, 2023 at 6:07 PM Hanna Czen
201 - 277 of 277 matches
Mail list logo