From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Jason Wang" <jasowang@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
qemu-devel@nongnu.org, "Kevin Wolf" <kwolf@redhat.com>,
"qemu trival" <qemu-trivial@nongnu.org>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [Qemu-devel] [PATCH 68/88] virtio: use g_new() family of functions
Date: Fri, 6 Oct 2017 20:50:03 -0300 [thread overview]
Message-ID: <20171006235023.11952-69-f4bug@amsat.org> (raw)
In-Reply-To: <20171006235023.11952-1-f4bug@amsat.org>
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
[PMD: more changes/files]
---
hw/char/virtio-serial-bus.c | 6 ++----
hw/display/virtio-gpu.c | 4 ++--
hw/net/virtio-net.c | 4 ++--
hw/virtio/vhost.c | 2 +-
hw/virtio/virtio-crypto.c | 2 +-
hw/virtio/virtio.c | 2 +-
tests/libqos/virtio-mmio.c | 4 ++--
tests/libqos/virtio-pci.c | 4 ++--
8 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 9470bd7be7..fe739bb773 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -1054,10 +1054,8 @@ static void virtio_serial_device_realize(DeviceState *dev, Error **errp)
QTAILQ_INIT(&vser->ports);
vser->bus.max_nr_ports = vser->serial.max_virtserial_ports;
- vser->ivqs = g_malloc(vser->serial.max_virtserial_ports
- * sizeof(VirtQueue *));
- vser->ovqs = g_malloc(vser->serial.max_virtserial_ports
- * sizeof(VirtQueue *));
+ vser->ivqs = g_new(VirtQueue *, vser->serial.max_virtserial_ports);
+ vser->ovqs = g_new(VirtQueue *, vser->serial.max_virtserial_ports);
/* Add a queue for host to guest transfers for port 0 (backward compat) */
vser->ivqs[0] = virtio_add_queue(vdev, 128, handle_input);
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 43bbe09ea0..fb3884220b 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -676,9 +676,9 @@ int virtio_gpu_create_mapping_iov(struct virtio_gpu_resource_attach_backing *ab,
return -1;
}
- *iov = g_malloc0(sizeof(struct iovec) * ab->nr_entries);
+ *iov = g_new0(struct iovec, ab->nr_entries);
if (addr) {
- *addr = g_malloc0(sizeof(uint64_t) * ab->nr_entries);
+ *addr = g_new0(uint64_t, ab->nr_entries);
}
for (i = 0; i < ab->nr_entries; i++) {
uint64_t a = le64_to_cpu(ents[i].addr);
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 150fd0748e..ce488b63d5 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -359,7 +359,7 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc)
strList *str_list, *entry;
int i;
- info = g_malloc0(sizeof(*info));
+ info = g_new0(RxFilterInfo, 1);
info->name = g_strdup(nc->name);
info->promiscuous = n->promisc;
@@ -1978,7 +1978,7 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
virtio_cleanup(vdev);
return;
}
- n->vqs = g_malloc0(sizeof(VirtIONetQueue) * n->max_queues);
+ n->vqs = g_new0(VirtIONetQueue, n->max_queues);
n->curr_queues = 1;
n->tx_timeout = n->net_conf.txtimer;
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 5fd69f0b2e..f4abc1d26d 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -742,7 +742,7 @@ static void vhost_iommu_region_add(MemoryListener *listener,
return;
}
- iommu = g_malloc0(sizeof(*iommu));
+ iommu = g_new0(struct vhost_iommu, 1);
end = int128_add(int128_make64(section->offset_within_region),
section->size);
end = int128_sub(end, int128_one());
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
index 19c82e0432..9544ea92ef 100644
--- a/hw/virtio/virtio-crypto.c
+++ b/hw/virtio/virtio-crypto.c
@@ -798,7 +798,7 @@ static void virtio_crypto_device_realize(DeviceState *dev, Error **errp)
virtio_init(vdev, "virtio-crypto", VIRTIO_ID_CRYPTO, vcrypto->config_size);
vcrypto->curr_queues = 1;
- vcrypto->vqs = g_malloc0(sizeof(VirtIOCryptoQueue) * vcrypto->max_queues);
+ vcrypto->vqs = g_new0(VirtIOCryptoQueue, vcrypto->max_queues);
for (i = 0; i < vcrypto->max_queues; i++) {
vcrypto->vqs[i].dataq =
virtio_add_queue(vdev, 1024, virtio_crypto_handle_dataq_bh);
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 311929e9df..9a38fe695a 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2245,7 +2245,7 @@ void virtio_init(VirtIODevice *vdev, const char *name,
atomic_set(&vdev->isr, 0);
vdev->queue_sel = 0;
vdev->config_vector = VIRTIO_NO_VECTOR;
- vdev->vq = g_malloc0(sizeof(VirtQueue) * VIRTIO_QUEUE_MAX);
+ vdev->vq = g_new0(VirtQueue, VIRTIO_QUEUE_MAX);
vdev->vm_running = runstate_is_running();
vdev->broken = false;
for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
diff --git a/tests/libqos/virtio-mmio.c b/tests/libqos/virtio-mmio.c
index 7aa8383338..a48fecab63 100644
--- a/tests/libqos/virtio-mmio.c
+++ b/tests/libqos/virtio-mmio.c
@@ -127,7 +127,7 @@ static QVirtQueue *qvirtio_mmio_virtqueue_setup(QVirtioDevice *d,
QVirtQueue *vq;
uint64_t addr;
- vq = g_malloc0(sizeof(*vq));
+ vq = g_new0(QVirtQueue, 1);
qvirtio_mmio_queue_select(d, index);
writel(dev->addr + QVIRTIO_MMIO_QUEUE_ALIGN, dev->page_size);
@@ -191,7 +191,7 @@ QVirtioMMIODevice *qvirtio_mmio_init_device(uint64_t addr, uint32_t page_size)
{
QVirtioMMIODevice *dev;
uint32_t magic;
- dev = g_malloc0(sizeof(*dev));
+ dev = g_new0(QVirtioMMIODevice, 1);
magic = readl(addr + QVIRTIO_MMIO_MAGIC_VALUE);
g_assert(magic == ('v' | 'i' << 8 | 'r' << 16 | 't' << 24));
diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c
index 7ac15c04e1..02d5e0853e 100644
--- a/tests/libqos/virtio-pci.c
+++ b/tests/libqos/virtio-pci.c
@@ -38,7 +38,7 @@ void qvirtio_pci_device_free(QVirtioPCIDevice *dev)
static QVirtioPCIDevice *qpcidevice_to_qvirtiodevice(QPCIDevice *pdev)
{
QVirtioPCIDevice *vpcidev;
- vpcidev = g_malloc0(sizeof(*vpcidev));
+ vpcidev = g_new0(QVirtioPCIDevice, 1);
if (pdev) {
vpcidev->pdev = pdev;
@@ -229,7 +229,7 @@ static QVirtQueue *qvirtio_pci_virtqueue_setup(QVirtioDevice *d,
uint64_t addr;
QVirtQueuePCI *vqpci;
- vqpci = g_malloc0(sizeof(*vqpci));
+ vqpci = g_new0(QVirtQueuePCI, 1);
feat = qvirtio_pci_get_guest_features(d);
qvirtio_pci_queue_select(d, index);
--
2.14.2
next prev parent reply other threads:[~2017-10-06 23:54 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-06 23:48 [Qemu-devel] [PATCH 00/88] use g_new() family of functions Philippe Mathieu-Daudé
2017-10-06 23:48 ` [Qemu-devel] [PATCH 01/88] cocci: script to use g_new() & friends Philippe Mathieu-Daudé
2017-10-09 7:24 ` Markus Armbruster
2017-11-02 4:16 ` Philippe Mathieu-Daudé
2017-10-06 23:48 ` [Qemu-devel] [PATCH 02/88] cocci: add more g_new() transformations Philippe Mathieu-Daudé
2017-10-09 7:28 ` Markus Armbruster
2017-10-06 23:48 ` [Qemu-devel] [PATCH 03/88] cocci: extract typeof() from g_new() Philippe Mathieu-Daudé
2017-10-06 23:48 ` [Qemu-devel] [PATCH 04/88] cocci: avoid use of g_new0() Philippe Mathieu-Daudé
2017-10-07 3:41 ` Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 05/88] cocci: use g_strfreev() Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 06/88] ARM: use g_new() family of functions Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 07/88] Audio: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 08/88] BT: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 09/88] Bootdevice: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 10/88] Character devices: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 11/88] Cryptodev Backends: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 12/88] backends/hostmem: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 13/88] Dirty Bitmaps: " Philippe Mathieu-Daudé
2017-10-07 15:45 ` John Snow
2017-10-06 23:49 ` [Qemu-devel] [PATCH 14/88] ui/vnc: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 15/88] ui/spice: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 16/88] Main loop: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 17/88] Memory API: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 18/88] memory: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 19/88] exec: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 20/88] Migration: " Philippe Mathieu-Daudé
2017-10-07 10:15 ` Juan Quintela
2017-10-06 23:49 ` [Qemu-devel] [PATCH 21/88] NBD: " Philippe Mathieu-Daudé
2017-10-09 17:55 ` Eric Blake
2017-10-06 23:49 ` [Qemu-devel] [PATCH 22/88] LM32: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 23/88] M68K: " Philippe Mathieu-Daudé
2017-10-07 5:51 ` Thomas Huth
2017-10-06 23:49 ` [Qemu-devel] [PATCH 24/88] MIPS: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 25/88] OpenRISC: " Philippe Mathieu-Daudé
2017-10-07 0:15 ` Stafford Horne
2017-10-06 23:49 ` [Qemu-devel] [PATCH 26/88] S390: " Philippe Mathieu-Daudé
2017-10-09 9:36 ` Cornelia Huck
2017-10-10 13:25 ` Cornelia Huck
2017-10-06 23:49 ` [Qemu-devel] [PATCH 27/88] SH4: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 28/88] disas: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 29/88] SPARC: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 30/88] QEMU Guest Agent: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 31/88] QMP: " Philippe Mathieu-Daudé
2017-10-09 7:38 ` Markus Armbruster
2017-10-09 8:11 ` Dr. David Alan Gilbert
2017-10-09 18:04 ` Eric Blake
2017-10-06 23:49 ` [Qemu-devel] [PATCH 32/88] QObject: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 33/88] qom: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 34/88] qapi: " Philippe Mathieu-Daudé
2017-10-09 17:59 ` Eric Blake
2017-10-06 23:49 ` [Qemu-devel] [PATCH 35/88] Record/replay: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 36/88] SLIRP: " Philippe Mathieu-Daudé
2017-10-08 22:20 ` Samuel Thibault
2017-10-06 23:49 ` [Qemu-devel] [PATCH 37/88] TCG: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 38/88] VFIO: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 39/88] hw/i386: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 40/88] hw/xen: " Philippe Mathieu-Daudé
2017-10-10 15:55 ` Anthony PERARD
2017-10-06 23:49 ` [Qemu-devel] [PATCH 41/88] target/i386: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 42/88] XTFPGA: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 43/88] hw/core: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 44/88] hw/core/loader: " Philippe Mathieu-Daudé
2017-10-10 0:03 ` Alistair Francis
2017-10-06 23:49 ` [Qemu-devel] [PATCH 45/88] hw/display: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 46/88] hw/display/vga: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 47/88] hw/i2c: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 48/88] hw/input: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 49/88] hw/misc: " Philippe Mathieu-Daudé
2017-10-09 14:21 ` Gabriel L. Somlo
2017-10-06 23:49 ` [Qemu-devel] [PATCH 50/88] ivshmem: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 51/88] hw/timer: " Philippe Mathieu-Daudé
2017-10-07 0:46 ` xiaoqiang zhao
2017-10-07 0:52 ` xiaoqiang zhao
2017-10-06 23:49 ` [Qemu-devel] [PATCH 52/88] i.MX31: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 53/88] iSCSI: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 54/88] KVM: " Philippe Mathieu-Daudé
2017-10-09 14:21 ` Gabriel L. Somlo
2017-10-06 23:49 ` [Qemu-devel] [PATCH 55/88] PReP: " Philippe Mathieu-Daudé
2017-10-07 4:38 ` David Gibson
2017-10-06 23:49 ` [Qemu-devel] [PATCH 56/88] PowerPC: " Philippe Mathieu-Daudé
2017-10-07 4:39 ` David Gibson
2017-10-06 23:49 ` [Qemu-devel] [PATCH 57/88] ppc: " Philippe Mathieu-Daudé
2017-10-07 4:40 ` David Gibson
2017-10-06 23:49 ` [Qemu-devel] [PATCH 58/88] ppc4xx: " Philippe Mathieu-Daudé
2017-10-07 5:15 ` David Gibson
2017-10-06 23:49 ` [Qemu-devel] [PATCH 59/88] ppce500: " Philippe Mathieu-Daudé
2017-10-07 5:16 ` David Gibson
2017-10-06 23:49 ` [Qemu-devel] [PATCH 60/88] sPAPR: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 61/88] tests: " Philippe Mathieu-Daudé
2017-10-09 6:46 ` Thomas Huth
2017-10-09 16:36 ` John Snow
2017-10-06 23:49 ` [Qemu-devel] [PATCH 62/88] user: " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 63/88] bsd-user/syscall: fix a memory leak on EFAULT, use g_new() Philippe Mathieu-Daudé
2017-10-07 8:48 ` [Qemu-devel] [Qemu-trivial] " Kamil Rytarowski
2017-11-06 19:06 ` [Qemu-devel] " Philippe Mathieu-Daudé
2017-10-06 23:49 ` [Qemu-devel] [PATCH 64/88] user: use g_strfreev() Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 65/88] util: use g_new() family of functions Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 66/88] util/qemu-thread-win32: " Philippe Mathieu-Daudé
2017-10-07 6:47 ` Stefan Weil
2017-10-06 23:50 ` [Qemu-devel] [PATCH 67/88] util/coroutine: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` Philippe Mathieu-Daudé [this message]
2017-10-06 23:50 ` [Qemu-devel] [PATCH 69/88] virtio-9p: " Philippe Mathieu-Daudé
2017-10-07 12:51 ` Greg Kurz
2017-10-06 23:50 ` [Qemu-devel] [PATCH 70/88] block: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 71/88] block: avoid use of g_new0() Philippe Mathieu-Daudé
2017-10-07 3:44 ` Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 72/88] hw/block/nvme: use g_new() family of functions Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 73/88] hw/block/xen_disk: avoid use of g_new0() Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 74/88] balloon: use g_new() family of functions Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 75/88] decnumber: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 76/88] dma: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 77/88] dump: " Philippe Mathieu-Daudé
2017-10-09 9:38 ` Cornelia Huck
2017-10-06 23:50 ` [Qemu-devel] [PATCH 78/88] gdb: " Philippe Mathieu-Daudé
2017-10-09 9:38 ` Alex Bennée
2017-10-06 23:50 ` [Qemu-devel] [PATCH 79/88] hmp: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 80/88] numa: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 81/88] hw/acpi: " Philippe Mathieu-Daudé
2017-10-09 15:42 ` Ben Warren
2017-10-06 23:50 ` [Qemu-devel] [PATCH 82/88] hw/ipmi: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 83/88] hw/pci: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 84/88] hw/scsi: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 85/88] hw/usb: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 86/88] net/hub: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 87/88] hw/net/rocker: " Philippe Mathieu-Daudé
2017-10-06 23:50 ` [Qemu-devel] [PATCH 88/88] scripts/coverity-model: " Philippe Mathieu-Daudé
2017-10-09 6:46 ` Markus Armbruster
2017-11-02 4:11 ` Philippe Mathieu-Daudé
2017-10-07 0:04 ` [Qemu-devel] [PATCH 00/88] " Philippe Mathieu-Daudé
2017-10-07 1:26 ` no-reply
2017-10-07 1:27 ` no-reply
2017-10-07 14:18 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171006235023.11952-69-f4bug@amsat.org \
--to=f4bug@amsat.org \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowang@redhat.com \
--cc=kwolf@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).