* [PATCH v3 5/5] KVM: selftests: Remove __NR_userfaultfd syscall fallback
From: Sean Christopherson @ 2021-09-01 20:30 UTC (permalink / raw)
To: Russell King, Catalin Marinas, Will Deacon, Guo Ren,
Thomas Bogendoerfer, Michael Ellerman, Steven Rostedt,
Ingo Molnar, Oleg Nesterov, Thomas Gleixner, Peter Zijlstra,
Andy Lutomirski, Mathieu Desnoyers, Paul E. McKenney, Boqun Feng,
Paolo Bonzini, Shuah Khan
Cc: kvm, Ben Gardon, linux-kernel, linux-csky, linux-mips,
Peter Foley, Paul Mackerras, linux-kselftest, Sean Christopherson,
Shakeel Butt, linuxppc-dev, linux-arm-kernel
In-Reply-To: <20210901203030.1292304-1-seanjc@google.com>
Revert the __NR_userfaultfd syscall fallback added for KVM selftests now
that x86's unistd_{32,63}.h overrides are under uapi/ and thus not in
KVM sefltests' search path, i.e. now that KVM gets x86 syscall numbers
from the installed kernel headers.
No functional change intended.
Reviewed-by: Ben Gardon <bgardon@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
tools/arch/x86/include/uapi/asm/unistd_64.h | 3 ---
1 file changed, 3 deletions(-)
diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h
index 4205ed4158bf..cb52a3a8b8fc 100644
--- a/tools/arch/x86/include/uapi/asm/unistd_64.h
+++ b/tools/arch/x86/include/uapi/asm/unistd_64.h
@@ -1,7 +1,4 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef __NR_userfaultfd
-#define __NR_userfaultfd 282
-#endif
#ifndef __NR_perf_event_open
# define __NR_perf_event_open 298
#endif
--
2.33.0.153.gba50c8fa24-goog
^ permalink raw reply related
* [PATCH 06/10] block/rsxx: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/rsxx/core.c | 4 +++-
drivers/block/rsxx/dev.c | 12 +++++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 83636714b8d7..8d9d69f5dfbc 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -935,7 +935,9 @@ static int rsxx_pci_probe(struct pci_dev *dev,
card->size8 = 0;
}
- rsxx_attach_dev(card);
+ st = rsxx_attach_dev(card);
+ if (st)
+ goto failed_create_dev;
/************* Setup Debugfs *************/
rsxx_debugfs_dev_new(card);
diff --git a/drivers/block/rsxx/dev.c b/drivers/block/rsxx/dev.c
index 1cc40b0ea761..b2d3ac3efce2 100644
--- a/drivers/block/rsxx/dev.c
+++ b/drivers/block/rsxx/dev.c
@@ -192,6 +192,8 @@ static bool rsxx_discard_supported(struct rsxx_cardinfo *card)
int rsxx_attach_dev(struct rsxx_cardinfo *card)
{
+ int err = 0;
+
mutex_lock(&card->dev_lock);
/* The block device requires the stripe size from the config. */
@@ -200,13 +202,17 @@ int rsxx_attach_dev(struct rsxx_cardinfo *card)
set_capacity(card->gendisk, card->size8 >> 9);
else
set_capacity(card->gendisk, 0);
- device_add_disk(CARD_TO_DEV(card), card->gendisk, NULL);
- card->bdev_attached = 1;
+ err = device_add_disk(CARD_TO_DEV(card), card->gendisk, NULL);
+ if (err == 0)
+ card->bdev_attached = 1;
}
mutex_unlock(&card->dev_lock);
- return 0;
+ if (err)
+ blk_cleanup_disk(card->gendisk);
+
+ return err;
}
void rsxx_detach_dev(struct rsxx_cardinfo *card)
--
2.30.2
^ permalink raw reply related
* [PATCH 03/10] ps3disk: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/ps3disk.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
index 8d51efbe045d..3054adf77460 100644
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -467,9 +467,13 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
gendisk->disk_name, priv->model, priv->raw_capacity >> 11,
get_capacity(gendisk) >> 11);
- device_add_disk(&dev->sbd.core, gendisk, NULL);
- return 0;
+ error = device_add_disk(&dev->sbd.core, gendisk, NULL);
+ if (error)
+ goto fail_cleanup_disk;
+ return 0;
+fail_cleanup_disk:
+ blk_cleanup_disk(gendisk);
fail_free_tag_set:
blk_mq_free_tag_set(&priv->tag_set);
fail_teardown:
--
2.30.2
^ permalink raw reply related
* [PATCH 10/10] mtd/ubi/block: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/mtd/ubi/block.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c
index e003b4b44ffa..062e6c2c45f5 100644
--- a/drivers/mtd/ubi/block.c
+++ b/drivers/mtd/ubi/block.c
@@ -447,12 +447,18 @@ int ubiblock_create(struct ubi_volume_info *vi)
list_add_tail(&dev->list, &ubiblock_devices);
/* Must be the last step: anyone can call file ops from now on */
- add_disk(dev->gd);
+ ret = add_disk(dev->gd);
+ if (ret)
+ goto out_destroy_wq;
+
dev_info(disk_to_dev(dev->gd), "created from ubi%d:%d(%s)",
dev->ubi_num, dev->vol_id, vi->name);
mutex_unlock(&devices_mutex);
return 0;
+out_destroy_wq:
+ list_del(&dev->list);
+ destroy_workqueue(dev->wq);
out_remove_minor:
idr_remove(&ubiblock_minor_idr, gd->first_minor);
out_cleanup_disk:
--
2.30.2
^ permalink raw reply related
* [PATCH 07/10] block/sunvdc: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
We re-use the same free tag call, so we also add a label for
that as well.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/sunvdc.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
index 4d4bb810c2ae..6f45a53f7cbf 100644
--- a/drivers/block/sunvdc.c
+++ b/drivers/block/sunvdc.c
@@ -826,8 +826,8 @@ static int probe_disk(struct vdc_port *port)
if (IS_ERR(g)) {
printk(KERN_ERR PFX "%s: Could not allocate gendisk.\n",
port->vio.name);
- blk_mq_free_tag_set(&port->tag_set);
- return PTR_ERR(g);
+ err = PTR_ERR(g);
+ goto out_free_tag;
}
port->disk = g;
@@ -879,9 +879,17 @@ static int probe_disk(struct vdc_port *port)
port->vdisk_size, (port->vdisk_size >> (20 - 9)),
port->vio.ver.major, port->vio.ver.minor);
- device_add_disk(&port->vio.vdev->dev, g, NULL);
+ err = device_add_disk(&port->vio.vdev->dev, g, NULL);
+ if (err)
+ goto out_cleanup_disk;
return 0;
+
+out_cleanup_disk:
+ blk_cleanup_disk(g);
+out_free_tag:
+ blk_mq_free_tag_set(&port->tag_set);
+ return err;
}
static struct ldc_channel_config vdc_ldc_cfg = {
--
2.30.2
^ permalink raw reply related
* [PATCH 05/10] rnbd: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/rnbd/rnbd-clt.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c
index bd4a41afbbfc..1ba1c868535a 100644
--- a/drivers/block/rnbd/rnbd-clt.c
+++ b/drivers/block/rnbd/rnbd-clt.c
@@ -1384,8 +1384,10 @@ static void setup_request_queue(struct rnbd_clt_dev *dev)
blk_queue_write_cache(dev->queue, dev->wc, dev->fua);
}
-static void rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
+static int rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
{
+ int err;
+
dev->gd->major = rnbd_client_major;
dev->gd->first_minor = idx << RNBD_PART_BITS;
dev->gd->minors = 1 << RNBD_PART_BITS;
@@ -1410,7 +1412,11 @@ static void rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
if (!dev->rotational)
blk_queue_flag_set(QUEUE_FLAG_NONROT, dev->queue);
- add_disk(dev->gd);
+ err = add_disk(dev->gd);
+ if (err)
+ blk_cleanup_disk(dev->gd);
+
+ return err;
}
static int rnbd_client_setup_device(struct rnbd_clt_dev *dev)
@@ -1426,8 +1432,7 @@ static int rnbd_client_setup_device(struct rnbd_clt_dev *dev)
rnbd_init_mq_hw_queues(dev);
setup_request_queue(dev);
- rnbd_clt_setup_gen_disk(dev, idx);
- return 0;
+ return rnbd_clt_setup_gen_disk(dev, idx);
}
static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess,
--
2.30.2
^ permalink raw reply related
* [PATCH 09/10] pf: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/paride/pf.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c
index f471d48a87bc..380d80e507c7 100644
--- a/drivers/block/paride/pf.c
+++ b/drivers/block/paride/pf.c
@@ -962,7 +962,9 @@ static int __init pf_init_unit(struct pf_unit *pf, bool autoprobe, int port,
if (pf_probe(pf))
goto out_pi_release;
- add_disk(disk);
+ ret = add_disk(disk);
+ if (ret)
+ goto out_pi_release;
pf->present = 1;
return 0;
--
2.30.2
^ permalink raw reply related
* [PATCH 08/10] block/sx8: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
A completion is used to notify the initial probe what is
happening and so we must defer error handling on completion.
Do this by remembering the error and using the shared cleanup
function.
The tags are shared and so are hanlded later for the
driver already.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/sx8.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c
index 420cd952ddc4..1c79248c4826 100644
--- a/drivers/block/sx8.c
+++ b/drivers/block/sx8.c
@@ -297,6 +297,7 @@ struct carm_host {
struct work_struct fsm_task;
+ int probe_err;
struct completion probe_comp;
};
@@ -1181,8 +1182,11 @@ static void carm_fsm_task (struct work_struct *work)
struct gendisk *disk = port->disk;
set_capacity(disk, port->capacity);
- add_disk(disk);
- activated++;
+ host->probe_err = add_disk(disk);
+ if (!host->probe_err)
+ activated++;
+ else
+ break;
}
printk(KERN_INFO DRV_NAME "(%s): %d ports activated\n",
@@ -1192,11 +1196,9 @@ static void carm_fsm_task (struct work_struct *work)
reschedule = 1;
break;
}
-
case HST_PROBE_FINISHED:
complete(&host->probe_comp);
break;
-
case HST_ERROR:
/* FIXME: TODO */
break;
@@ -1507,7 +1509,10 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
goto err_out_free_irq;
DPRINTK("waiting for probe_comp\n");
+ host->probe_err = -ENODEV;
wait_for_completion(&host->probe_comp);
+ if (host->probe_err)
+ goto err_out_free_irq;
printk(KERN_INFO "%s: pci %s, ports %d, io %llx, irq %u, major %d\n",
host->name, pci_name(pdev), (int) CARM_MAX_PORTS,
--
2.30.2
^ permalink raw reply related
* [PATCH 00/10] block: fourth batch of add_disk() error handling conversions
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
The full set of changes can be found on my branch titled
20210901-for-axboe-add-disk-error-handling [0] which is
now based on axboe/master.
[0] https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux-next.git/log/?h=20210901-for-axboe-add-disk-error-handling
Luis Chamberlain (10):
mtip32xx: add error handling support for add_disk()
pktcdvd: add error handling support for add_disk()
ps3disk: add error handling support for add_disk()
ps3vram: add error handling support for add_disk()
rnbd: add error handling support for add_disk()
block/rsxx: add error handling support for add_disk()
block/sunvdc: add error handling support for add_disk()
block/sx8: add error handling support for add_disk()
pf: add error handling support for add_disk()
mtd/ubi/block: add error handling support for add_disk()
drivers/block/mtip32xx/mtip32xx.c | 4 +++-
drivers/block/paride/pf.c | 4 +++-
drivers/block/pktcdvd.c | 4 +++-
drivers/block/ps3disk.c | 8 ++++++--
drivers/block/ps3vram.c | 7 ++++++-
drivers/block/rnbd/rnbd-clt.c | 13 +++++++++----
drivers/block/rsxx/core.c | 4 +++-
drivers/block/rsxx/dev.c | 12 +++++++++---
drivers/block/sunvdc.c | 14 +++++++++++---
drivers/block/sx8.c | 13 +++++++++----
drivers/mtd/ubi/block.c | 8 +++++++-
11 files changed, 69 insertions(+), 22 deletions(-)
--
2.30.2
^ permalink raw reply
* [PATCH 01/10] mtip32xx: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
The read_capacity_error error label already does what we need,
so just re-use that.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/mtip32xx/mtip32xx.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 901855717cb5..d0b40309f47e 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -3633,7 +3633,9 @@ static int mtip_block_initialize(struct driver_data *dd)
set_capacity(dd->disk, capacity);
/* Enable the block device and add it to /dev */
- device_add_disk(&dd->pdev->dev, dd->disk, mtip_disk_attr_groups);
+ rv = device_add_disk(&dd->pdev->dev, dd->disk, mtip_disk_attr_groups);
+ if (rv)
+ goto read_capacity_error;
if (dd->mtip_svc_handler) {
set_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag);
--
2.30.2
^ permalink raw reply related
* [PATCH 02/10] pktcdvd: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
The out_mem2 error label already does what we need so
re-use that.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/pktcdvd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 0f26b2510a75..415248962e67 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -2729,7 +2729,9 @@ static int pkt_setup_dev(dev_t dev, dev_t* pkt_dev)
/* inherit events of the host device */
disk->events = pd->bdev->bd_disk->events;
- add_disk(disk);
+ ret = add_disk(disk);
+ if (ret)
+ goto out_mem2;
pkt_sysfs_dev_new(pd);
pkt_debugfs_dev_new(pd);
--
2.30.2
^ permalink raw reply related
* [PATCH 04/10] ps3vram: add error handling support for add_disk()
From: Luis Chamberlain @ 2021-09-01 21:00 UTC (permalink / raw)
To: axboe, bhelgaas, liushixin2, thunder.leizhen, lee.jones, geoff,
mpe, benh, paulus, jim, haris.iqbal, jinpu.wang, josh.h.morris,
pjk1939, tim, richard, miquel.raynal, vigneshr
Cc: linux-block, linuxppc-dev, Luis Chamberlain, linux-mtd,
linux-kernel
In-Reply-To: <20210901210028.1750956-1-mcgrof@kernel.org>
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
drivers/block/ps3vram.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index c7b19e128b03..af2a0d09c598 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -755,9 +755,14 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev)
dev_info(&dev->core, "%s: Using %llu MiB of GPU memory\n",
gendisk->disk_name, get_capacity(gendisk) >> 11);
- device_add_disk(&dev->core, gendisk, NULL);
+ error = device_add_disk(&dev->core, gendisk, NULL);
+ if (error)
+ goto out_cleanup_disk;
+
return 0;
+out_cleanup_disk:
+ blk_cleanup_disk(gendisk);
out_cache_cleanup:
remove_proc_entry(DEVICE_NAME, NULL);
ps3vram_cache_cleanup(dev);
--
2.30.2
^ permalink raw reply related
* Re: [PATCH 0/5] KVM: PPC: Book3S: Modules cleanup and unification
From: David Gibson @ 2021-09-02 1:28 UTC (permalink / raw)
To: Fabiano Rosas; +Cc: linuxppc-dev, npiggin, kvm-ppc
In-Reply-To: <20210901173357.3183658-1-farosas@linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 3261 bytes --]
On Wed, Sep 01, 2021 at 02:33:52PM -0300, Fabiano Rosas wrote:
> This series merges our three kvm modules kvm.ko, kvm-hv.ko and
> kvm-pr.ko into one kvm.ko module.
That doesn't sound like a good idea to me. People who aren't on BookS
servers don't want - and can't use - kvm-hv. Almost nobody wants
kvm-pr. It's also kind of inconsistent with x86, which has the
separate AMD and Intel modules.
> The main reason for this is to deal with the issue that kvm.ko can be
> loaded on its own without any of the other modules present. This can
> happen if one or both of the modules fail to init or if the user loads
> kvm.ko only.
>
> With only kvm.ko loaded, the userspace can call any of the KVM ioctls
> which will fail more or less gracefully depending on what kind of
> verification we do in powerpc.c.
I see that that's awkward, but I'm not sure it justifies compromising
the actual natural structure of the dependencies.
> Instead of adding a check to every entry point or finding a hack to
> link the modules so that when one fails (hv/pr), the other (kvm)
> exits, I think it is cleaner to just make them all a single module.
>
> The two KVM implementations are already selected by Kconfig options,
> so the only thing that changes is that they are now in the same
> module. I also kept kvm-hv and kvm-pr as aliases to kvm, so that
> people don't get too surprised with the change.
>
> There is a possible issue with the larger module size for kernel
> builds that should support both HV-only and PR-only environments, but
> PR is usually not used in production so I'm not sure if that is a real
> issue.
>
> Patches 1,2,3 are standalone cleanups.
> Patches 4,5 are the unification work.
>
> Fabiano Rosas (5):
> KVM: PPC: Book3S HV: Check return value of kvmppc_radix_init
> KVM: PPC: Book3S HV: Delay setting of kvm ops
> KVM: PPC: Book3S HV: Free allocated memory if module init fails
> KVM: PPC: Book3S: Unify kvm-hv and kvm-pr modules
> KVM: PPC: Book3S: Stop exporting non-builtin symbols
>
> arch/powerpc/configs/powernv_defconfig | 2 +-
> arch/powerpc/configs/ppc64_defconfig | 2 +-
> arch/powerpc/configs/pseries_defconfig | 2 +-
> arch/powerpc/kvm/Kconfig | 72 ++++++++++++--------------
> arch/powerpc/kvm/Makefile | 11 ++--
> arch/powerpc/kvm/book3s.c | 61 ++++++++++++++--------
> arch/powerpc/kvm/book3s.h | 19 +++++++
> arch/powerpc/kvm/book3s_64_mmu_radix.c | 3 --
> arch/powerpc/kvm/book3s_64_vio.c | 3 --
> arch/powerpc/kvm/book3s_hv.c | 38 ++++++++------
> arch/powerpc/kvm/book3s_pr.c | 13 -----
> arch/powerpc/kvm/book3s_rtas.c | 1 -
> arch/powerpc/kvm/book3s_xics.c | 4 --
> arch/powerpc/kvm/book3s_xive.c | 6 ---
> arch/powerpc/kvm/emulate.c | 1 -
> arch/powerpc/kvm/powerpc.c | 14 -----
> kernel/irq/irqdesc.c | 2 +-
> 17 files changed, 125 insertions(+), 129 deletions(-)
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply
* Re: [PATCH v2 2/2] selftests/powerpc: Add scv versions of the basic TM syscall tests
From: Nicholas Piggin @ 2021-09-02 3:27 UTC (permalink / raw)
To: Christophe Leroy, linuxppc-dev; +Cc: Eirik Fuller
In-Reply-To: <f99fa6c6-cebe-c261-0971-0f485cbcea2d@csgroup.eu>
Excerpts from Christophe Leroy's message of September 2, 2021 3:15 am:
>
>
> Le 01/09/2021 à 18:54, Nicholas Piggin a écrit :
>> The basic TM vs syscall test code hard codes an sc instruction for the
>> system call, which fails to cover scv even when the userspace libc has
>> support for it.
>>
>> Duplicate the tests with hard coded scv variants so both are tested
>> when possible.
>>
>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> ---
>> .../selftests/powerpc/tm/tm-syscall-asm.S | 46 +++++++++++++++++++
>> .../testing/selftests/powerpc/tm/tm-syscall.c | 36 ++++++++++++---
>> 2 files changed, 75 insertions(+), 7 deletions(-)
>>
>> diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>> index bd1ca25febe4..849316831e6a 100644
>> --- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>> +++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>> @@ -2,6 +2,10 @@
>> #include <ppc-asm.h>
>> #include <asm/unistd.h>
>>
>> +/* ppc-asm.h does not define r0 or r1 */
>> +#define r0 0
>> +#define r1 1
>> +
>
> See https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/ppc-asm.h
>
> It doesn't not define r1 but it defines r0.
Oops, I'll fix that.
> And it defines 'sp' as register 1.
Does userspace code typically use that? Kernel code AFAIKS does not.
Thanks,
Nick
^ permalink raw reply
* Re: [PATCH v2 1/2] powerpc/64s: system call scv tabort fix for corrupt irq soft-mask state
From: Nicholas Piggin @ 2021-09-02 3:33 UTC (permalink / raw)
To: Christophe Leroy, linuxppc-dev; +Cc: Eirik Fuller
In-Reply-To: <65ed1ac8-f4af-742a-1d2a-e5db7e71a920@csgroup.eu>
Excerpts from Christophe Leroy's message of September 2, 2021 3:21 am:
>
>
> Le 01/09/2021 à 18:54, Nicholas Piggin a écrit :
>> If a system call is made with a transaction active, the kernel
>> immediately aborts it and returns. scv system calls disable irqs even
>> earlier in their interrupt handler, and tabort_syscall does not fix this
>> up.
>>
>> This can result in irq soft-mask state being messed up on the next
>> kernel entry, and crashing at BUG_ON(arch_irq_disabled_regs(regs)) in
>> the kernel exit handlers, or possibly worse.
>>
>> Fix this by having tabort_syscall setting irq soft-mask back to enabled
>> (which requires MSR[EE] be disabled first).
>>
>> Reported-by: Eirik Fuller <efuller@redhat.com>
>> Fixes: 7fa95f9adaee7 ("powerpc/64s: system call support for scv/rfscv instructions")
>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> ---
>>
>> Tested the wrong kernel before sending v1 and missed a bug, sorry.
>>
>> arch/powerpc/kernel/interrupt_64.S | 8 +++++++-
>> 1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/powerpc/kernel/interrupt_64.S b/arch/powerpc/kernel/interrupt_64.S
>> index d4212d2ff0b5..9c31d65b4851 100644
>> --- a/arch/powerpc/kernel/interrupt_64.S
>> +++ b/arch/powerpc/kernel/interrupt_64.S
>> @@ -428,16 +428,22 @@ RESTART_TABLE(.Lsyscall_rst_start, .Lsyscall_rst_end, syscall_restart)
>> #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
>> tabort_syscall:
>> _ASM_NOKPROBE_SYMBOL(tabort_syscall)
>> - /* Firstly we need to enable TM in the kernel */
>> + /* We need to enable TM in the kernel, and disable EE (for scv) */
>> mfmsr r10
>> li r9, 1
>> rldimi r10, r9, MSR_TM_LG, 63-MSR_TM_LG
>> + LOAD_REG_IMMEDIATE(r9, MSR_EE)
>> + andc r10, r10, r9
>
> Why not use 'rlwinm' to mask out MSR_EE ?
>
> Something like
>
> rlwinm r10, r10, 0, ~MSR_EE
Mainly because I'm bad at powerpc assembly. Why do you think I'm trying
to change as much as possible to C?
Actually there should really be no need for mfmsr either, I wanted to
rewrite the thing entirely as
ld r10,PACAKMSR(r13)
LOAD_REG_IMMEDIATE(r9, MSR_TM)
or r10,r10,r9
mtmsrd r10
But I thought that's not a minimal bug fix.
Thanks,
Nick
>
>> mtmsrd r10, 0
>>
>> /* tabort, this dooms the transaction, nothing else */
>> li r9, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
>> TABORT(R9)
>>
>> + /* scv has disabled irqs so must re-enable. sc just remains enabled */
>> + li r9,IRQS_ENABLED
>> + stb r9,PACAIRQSOFTMASK(r13)
>> +
>> /*
>> * Return directly to userspace. We have corrupted user register state,
>> * but userspace will never see that register state. Execution will
>>
>
^ permalink raw reply
* Re: [PATCH v2 2/2] selftests/powerpc: Add scv versions of the basic TM syscall tests
From: Michael Ellerman @ 2021-09-02 3:44 UTC (permalink / raw)
To: Nicholas Piggin, Christophe Leroy, linuxppc-dev; +Cc: Eirik Fuller
In-Reply-To: <1630553190.fkqnk0by89.astroid@bobo.none>
Nicholas Piggin <npiggin@gmail.com> writes:
> Excerpts from Christophe Leroy's message of September 2, 2021 3:15 am:
>> Le 01/09/2021 à 18:54, Nicholas Piggin a écrit :
>>> The basic TM vs syscall test code hard codes an sc instruction for the
>>> system call, which fails to cover scv even when the userspace libc has
>>> support for it.
>>>
>>> Duplicate the tests with hard coded scv variants so both are tested
>>> when possible.
>>>
>>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>>> ---
>>> .../selftests/powerpc/tm/tm-syscall-asm.S | 46 +++++++++++++++++++
>>> .../testing/selftests/powerpc/tm/tm-syscall.c | 36 ++++++++++++---
>>> 2 files changed, 75 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>>> index bd1ca25febe4..849316831e6a 100644
>>> --- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>>> +++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
>>> @@ -2,6 +2,10 @@
>>> #include <ppc-asm.h>
>>> #include <asm/unistd.h>
>>>
>>> +/* ppc-asm.h does not define r0 or r1 */
>>> +#define r0 0
>>> +#define r1 1
>>> +
>>
>> See https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/ppc-asm.h
>>
>> It doesn't not define r1 but it defines r0.
>
> Oops, I'll fix that.
>
>> And it defines 'sp' as register 1.
>
> Does userspace code typically use that? Kernel code AFAIKS does not.
Some does, but it's not used consistently IME.
I'd prefer you just use %r1.
cheers
^ permalink raw reply
* Re: [PATCH kernel] KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots
From: Alexey Kardashevskiy @ 2021-09-02 4:25 UTC (permalink / raw)
To: Fabiano Rosas, linuxppc-dev; +Cc: kvm-ppc
In-Reply-To: <87fsuouysc.fsf@linux.ibm.com>
On 02/09/2021 00:59, Fabiano Rosas wrote:
> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>
>> The userspace can trigger "vmalloc size %lu allocation failure: exceeds
>> total pages" via the KVM_SET_USER_MEMORY_REGION ioctl.
>>
>> This silences the warning by checking the limit before calling vzalloc()
>> and returns ENOMEM if failed.
>>
>> This does not call underlying valloc helpers as __vmalloc_node() is only
>> exported when CONFIG_TEST_VMALLOC_MODULE and __vmalloc_node_range() is not
>> exported at all.
>>
>> Spotted by syzkaller.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> ---
>> arch/powerpc/kvm/book3s_hv.c | 8 ++++++--
>> 1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
>> index 474c0cfde384..a59f1cccbcf9 100644
>> --- a/arch/powerpc/kvm/book3s_hv.c
>> +++ b/arch/powerpc/kvm/book3s_hv.c
>> @@ -4830,8 +4830,12 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
>> unsigned long npages = mem->memory_size >> PAGE_SHIFT;
>>
>> if (change == KVM_MR_CREATE) {
>> - slot->arch.rmap = vzalloc(array_size(npages,
>> - sizeof(*slot->arch.rmap)));
>> + unsigned long cb = array_size(npages, sizeof(*slot->arch.rmap));
>
> What does cb mean?
"count of bytes"
This is from my deep Windows past :)
https://docs.microsoft.com/en-us/windows/win32/stg/coding-style-conventions
>
>> +
>> + if ((cb >> PAGE_SHIFT) > totalram_pages())
>> + return -ENOMEM;
>> +
>> + slot->arch.rmap = vzalloc(cb);
>> if (!slot->arch.rmap)
>> return -ENOMEM;
>> }
--
Alexey
^ permalink raw reply
* Re: [PATCH kernel] KVM: PPC: Book3S HV: Make unique debugfs nodename
From: Alexey Kardashevskiy @ 2021-09-02 5:31 UTC (permalink / raw)
To: Fabiano Rosas, Michael Ellerman; +Cc: linuxppc-dev, linux-kernel, kvm-ppc
In-Reply-To: <87lf4gv0hf.fsf@linux.ibm.com>
On 02/09/2021 00:23, Fabiano Rosas wrote:
> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>
>> On 24/08/2021 18:37, Alexey Kardashevskiy wrote:
>>>
>>>
>>> On 18/08/2021 08:20, Fabiano Rosas wrote:
>>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>>>
>>>>> On 07/07/2021 14:13, Alexey Kardashevskiy wrote:
>>>>
>>>>> alternatively move this debugfs stuff under the platform-independent
>>>>> directory, how about that?
>>>>
>>>> That's a good idea. I only now realized we have two separate directories
>>>> for the same guest:
>>>>
>>>> $ ls /sys/kernel/debug/kvm/ | grep $pid
>>>> 19062-11
>>>> vm19062
>>>>
>>>> Looks like we would have to implement kvm_arch_create_vcpu_debugfs for
>>>> the vcpu information and add a similar hook for the vm.
>>>
>>> Something like that. From the git history, it looks like the ppc folder
>>> was added first and then the generic kvm folder was added but apparently
>>> they did not notice the ppc one due to natural reasons :)
>>>
>>> If you are not too busy, can you please merge the ppc one into the
>>> generic one and post the patch, so we won't need to fix these
>>> duplication warnings again? Thanks,
>>
>>
>>
>> Turns out it is not that straight forward as I thought as the common KVM
>> debugfs entry is created after PPC HV KVM created its own and there is
>> no obvious way to change the order (no "post init" hook in
>> kvmppc_ops).
>
> That is why I mentioned creating a hook similar to
> kvm_create_vcpu_debugfs in the common KVM code. kvm_create_vm_debugfs or
> something.
ah sorry I missed that :-/
> Alternatively, maybe kvm_create_vm_debugfs could be moved earlier into
> kvm_create_vm, before kvm_arch_post_init_vm and we could move our code
> into kvm_arch_post_init_vm.
kvm_arch_create_vcpu_debugfs() or kvm_arch_post_init_vm() will still
require hooks in kvmppc_ops and such bikeshedding may take a while :)
>>
>> Also, unlike the common KVM debugfs setup, we do not allocate structures
>> to support debugfs nodes so we do not leak anything to bother with a
>> mutex like 85cd39af14f4 did.
>>
>> So I'd stick to the original patch to reduce the noise in the dmesg, and
>> it also exposes lpid which I find rather useful for finding the right
>> partition scope tree in partition_tb.
>>
>> Michael?
>>
>>
>>>
>>>
>>>
>>>>>> ---
>>>>>> arch/powerpc/kvm/book3s_hv.c | 2 +-
>>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/arch/powerpc/kvm/book3s_hv.c
>>>>>> b/arch/powerpc/kvm/book3s_hv.c
>>>>>> index 1d1fcc290fca..0223ddc0eed0 100644
>>>>>> --- a/arch/powerpc/kvm/book3s_hv.c
>>>>>> +++ b/arch/powerpc/kvm/book3s_hv.c
>>>>>> @@ -5227,7 +5227,7 @@ static int kvmppc_core_init_vm_hv(struct kvm
>>>>>> *kvm)
>>>>>> /*
>>>>>> * Create a debugfs directory for the VM
>>>>>> */
>>>>>> - snprintf(buf, sizeof(buf), "vm%d", current->pid);
>>>>>> + snprintf(buf, sizeof(buf), "vm%d-lp%ld", current->pid, lpid);
>>>>>> kvm->arch.debugfs_dir = debugfs_create_dir(buf,
>>>>>> kvm_debugfs_dir);
>>>>>> kvmppc_mmu_debugfs_init(kvm);
>>>>>> if (radix_enabled())
>>>>>>
>>>
--
Alexey
^ permalink raw reply
* Re: [PATCH 05/10] rnbd: add error handling support for add_disk()
From: Jinpu Wang @ 2021-09-02 5:32 UTC (permalink / raw)
To: Luis Chamberlain
Cc: Jens Axboe, linux-block, Vignesh Raghavendra, Geoff Levand,
pjk1939, Miquel Raynal, linuxppc-dev, jim, open list, Liu Shixin,
Richard Weinberger, paulus, linux-mtd, Zhen Lei, Bjorn Helgaas,
Haris Iqbal, Lee Jones, josh.h.morris, Tim Waugh
In-Reply-To: <20210901210028.1750956-6-mcgrof@kernel.org>
On Wed, Sep 1, 2021 at 11:01 PM Luis Chamberlain <mcgrof@kernel.org> wrote:
>
> We never checked for errors on add_disk() as this function
> returned void. Now that this is fixed, use the shiny new
> error handling.
>
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
looks good to me.
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/block/rnbd/rnbd-clt.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c
> index bd4a41afbbfc..1ba1c868535a 100644
> --- a/drivers/block/rnbd/rnbd-clt.c
> +++ b/drivers/block/rnbd/rnbd-clt.c
> @@ -1384,8 +1384,10 @@ static void setup_request_queue(struct rnbd_clt_dev *dev)
> blk_queue_write_cache(dev->queue, dev->wc, dev->fua);
> }
>
> -static void rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
> +static int rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
> {
> + int err;
> +
> dev->gd->major = rnbd_client_major;
> dev->gd->first_minor = idx << RNBD_PART_BITS;
> dev->gd->minors = 1 << RNBD_PART_BITS;
> @@ -1410,7 +1412,11 @@ static void rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev, int idx)
>
> if (!dev->rotational)
> blk_queue_flag_set(QUEUE_FLAG_NONROT, dev->queue);
> - add_disk(dev->gd);
> + err = add_disk(dev->gd);
> + if (err)
> + blk_cleanup_disk(dev->gd);
> +
> + return err;
> }
>
> static int rnbd_client_setup_device(struct rnbd_clt_dev *dev)
> @@ -1426,8 +1432,7 @@ static int rnbd_client_setup_device(struct rnbd_clt_dev *dev)
> rnbd_init_mq_hw_queues(dev);
>
> setup_request_queue(dev);
> - rnbd_clt_setup_gen_disk(dev, idx);
> - return 0;
> + return rnbd_clt_setup_gen_disk(dev, idx);
> }
>
> static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess,
> --
> 2.30.2
>
^ permalink raw reply
* Re: [PATCH v2 2/2] selftests/powerpc: Add scv versions of the basic TM syscall tests
From: Michael Ellerman @ 2021-09-02 5:36 UTC (permalink / raw)
To: Nicholas Piggin, linuxppc-dev; +Cc: Eirik Fuller, Nicholas Piggin
In-Reply-To: <20210901165418.1412891-2-npiggin@gmail.com>
Nicholas Piggin <npiggin@gmail.com> writes:
> The basic TM vs syscall test code hard codes an sc instruction for the
> system call, which fails to cover scv even when the userspace libc has
> support for it.
>
> Duplicate the tests with hard coded scv variants so both are tested
> when possible.
>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
> .../selftests/powerpc/tm/tm-syscall-asm.S | 46 +++++++++++++++++++
> .../testing/selftests/powerpc/tm/tm-syscall.c | 36 ++++++++++++---
> 2 files changed, 75 insertions(+), 7 deletions(-)
>
> diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
> index bd1ca25febe4..849316831e6a 100644
> --- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
> +++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
> @@ -2,6 +2,10 @@
> #include <ppc-asm.h>
> #include <asm/unistd.h>
>
> +/* ppc-asm.h does not define r0 or r1 */
> +#define r0 0
> +#define r1 1
> +
> .text
> FUNC_START(getppid_tm_active)
> tbegin.
> @@ -26,3 +30,45 @@ FUNC_START(getppid_tm_suspended)
> 1:
> li r3, -1
> blr
> +
> +FUNC_START(getppid_scv_tm_active)
> + mflr r0
> + std r0,16(r1)
> + stdu r1,-32(r1)
> + tbegin.
> + beq 1f
> + li r0, __NR_getppid
> + scv 0
> + tend.
> + addi r1,r1,32
> + ld r0,16(r1)
> + mtlr r0
> + blr
> +1:
> + li r3, -1
> + addi r1,r1,32
> + ld r0,16(r1)
> + mtlr r0
> + blr
There's some macros in tools/testing/selftests/powerpc/include/basic_asm.h
that can do some of this boiler plate stack setup/teardown.
Incremental diff below to use them, only build tested.
cheers
diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
index 849316831e6a..a73694daca71 100644
--- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
+++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S
@@ -1,10 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#include <ppc-asm.h>
-#include <asm/unistd.h>
-
-/* ppc-asm.h does not define r0 or r1 */
-#define r0 0
-#define r1 1
+#include <basic_asm.h>
.text
FUNC_START(getppid_tm_active)
@@ -32,29 +27,21 @@ FUNC_START(getppid_tm_suspended)
blr
FUNC_START(getppid_scv_tm_active)
- mflr r0
- std r0,16(r1)
- stdu r1,-32(r1)
+ PUSH_BASIC_STACK(0)
tbegin.
beq 1f
li r0, __NR_getppid
scv 0
tend.
- addi r1,r1,32
- ld r0,16(r1)
- mtlr r0
+ POP_BASIC_STACK(0)
blr
1:
li r3, -1
- addi r1,r1,32
- ld r0,16(r1)
- mtlr r0
+ POP_BASIC_STACK(0)
blr
FUNC_START(getppid_scv_tm_suspended)
- mflr r0
- std r0,16(r1)
- stdu r1,-32(r1)
+ PUSH_BASIC_STACK(0)
tbegin.
beq 1f
li r0, __NR_getppid
@@ -62,13 +49,9 @@ FUNC_START(getppid_scv_tm_suspended)
scv 0
tresume.
tend.
- addi r1,r1,32
- ld r0,16(r1)
- mtlr r0
+ POP_BASIC_STACK(0)
blr
1:
li r3, -1
- addi r1,r1,32
- ld r0,16(r1)
- mtlr r0
+ POP_BASIC_STACK(0)
blr
^ permalink raw reply related
* [powerpc:merge] BUILD SUCCESS 8730add30d990f766cf2e469721d56e203efd063
From: kernel test robot @ 2021-09-02 6:04 UTC (permalink / raw)
To: Michael Ellerman; +Cc: linuxppc-dev
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git merge
branch HEAD: 8730add30d990f766cf2e469721d56e203efd063 Automatic merge of 'next' into merge (2021-09-01 21:54)
elapsed time: 967m
configs tested: 136
configs skipped: 3
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
i386 randconfig-c001-20210831
i386 randconfig-c001-20210901
powerpc socrates_defconfig
sh shx3_defconfig
arm sunxi_defconfig
arm cm_x300_defconfig
powerpc sequoia_defconfig
mips e55_defconfig
sh sh7785lcr_32bit_defconfig
sh rts7751r2dplus_defconfig
arc defconfig
sparc alldefconfig
arm lpc32xx_defconfig
powerpc eiger_defconfig
mips nlm_xlp_defconfig
arm moxart_defconfig
sh edosk7760_defconfig
riscv alldefconfig
arm pxa168_defconfig
sh edosk7705_defconfig
mips sb1250_swarm_defconfig
nios2 3c120_defconfig
sh urquell_defconfig
mips maltaup_defconfig
arm pxa910_defconfig
powerpc iss476-smp_defconfig
arm davinci_all_defconfig
powerpc tqm5200_defconfig
riscv nommu_virt_defconfig
arm h5000_defconfig
arc alldefconfig
sh ul2_defconfig
powerpc64 defconfig
sh se7712_defconfig
powerpc bamboo_defconfig
ia64 alldefconfig
powerpc mpc837x_rdb_defconfig
x86_64 allnoconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 allnoconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
x86_64 randconfig-a005-20210831
x86_64 randconfig-a001-20210831
x86_64 randconfig-a003-20210831
x86_64 randconfig-a002-20210831
x86_64 randconfig-a004-20210831
x86_64 randconfig-a006-20210831
i386 randconfig-a005-20210831
i386 randconfig-a002-20210831
i386 randconfig-a003-20210831
i386 randconfig-a006-20210831
i386 randconfig-a004-20210831
i386 randconfig-a001-20210831
x86_64 randconfig-a016-20210901
x86_64 randconfig-a011-20210901
x86_64 randconfig-a012-20210901
x86_64 randconfig-a015-20210901
x86_64 randconfig-a014-20210901
x86_64 randconfig-a013-20210901
arc randconfig-r043-20210831
riscv nommu_k210_defconfig
riscv allyesconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 rhel-8.3-kselftests
um x86_64_defconfig
um i386_defconfig
x86_64 allyesconfig
x86_64 defconfig
x86_64 rhel-8.3
x86_64 kexec
clang tested configs:
i386 randconfig-c001-20210831
s390 randconfig-c005-20210831
riscv randconfig-c006-20210831
powerpc randconfig-c003-20210831
mips randconfig-c004-20210831
arm randconfig-c002-20210831
x86_64 randconfig-c007-20210831
s390 randconfig-c005-20210901
mips randconfig-c004-20210901
x86_64 randconfig-c007-20210901
powerpc randconfig-c003-20210901
i386 randconfig-c001-20210901
arm randconfig-c002-20210901
riscv randconfig-c006-20210901
x86_64 randconfig-a014-20210831
x86_64 randconfig-a015-20210831
x86_64 randconfig-a013-20210831
x86_64 randconfig-a016-20210831
x86_64 randconfig-a012-20210831
x86_64 randconfig-a011-20210831
i386 randconfig-a016-20210831
i386 randconfig-a011-20210831
i386 randconfig-a015-20210831
i386 randconfig-a014-20210831
i386 randconfig-a012-20210831
i386 randconfig-a013-20210831
hexagon randconfig-r045-20210901
hexagon randconfig-r041-20210901
s390 randconfig-r044-20210831
hexagon randconfig-r041-20210831
hexagon randconfig-r045-20210831
riscv randconfig-r042-20210831
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
^ permalink raw reply
* Re: [PATCH v2 1/5] powerpc/signal64: Access function descriptor with user access block
From: Christoph Hellwig @ 2021-09-02 6:49 UTC (permalink / raw)
To: Christophe Leroy; +Cc: Paul Mackerras, linuxppc-dev, linux-kernel
In-Reply-To: <fd7938d94008711d441551c06b25a033669a0618.1629732940.git.christophe.leroy@csgroup.eu>
On Mon, Aug 23, 2021 at 03:35:51PM +0000, Christophe Leroy wrote:
> Access the function descriptor of the handler within a
> user access block.
>
> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> ---
> arch/powerpc/kernel/signal_64.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
> index 1831bba0582e..790c450c2de8 100644
> --- a/arch/powerpc/kernel/signal_64.c
> +++ b/arch/powerpc/kernel/signal_64.c
> @@ -936,8 +936,18 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
> func_descr_t __user *funct_desc_ptr =
> (func_descr_t __user *) ksig->ka.sa.sa_handler;
>
> - err |= get_user(regs->ctr, &funct_desc_ptr->entry);
> - err |= get_user(regs->gpr[2], &funct_desc_ptr->toc);
> + if (user_read_access_begin(funct_desc_ptr, sizeof(func_descr_t))) {
> + unsafe_get_user(regs->ctr, &funct_desc_ptr->entry, bad_funct_desc_block);
> + unsafe_get_user(regs->gpr[2], &funct_desc_ptr->toc, bad_funct_desc_block);
> + } else {
> + goto bad_funct_desc;
> +bad_funct_desc_block:
> + user_read_access_end();
> +bad_funct_desc:
> + signal_fault(current, regs, __func__, funct_desc_ptr);
> + return 1;
> + }
> + user_read_access_end();
Having a goto after an ele block, an then labels jumping into it is just
weird.
To make this somewhat readable just split it into a helper function:
static inline bool put_func_descr(func_descr_t __user *funct_desc_ptr,
struct pt_regs *regs)
{
if (!user_read_access_begin(funct_desc_ptr, sizeof(func_descr_t)))
goto fault;
unsafe_get_user(regs->ctr, &funct_desc_ptr->entry, uaccess_end);
unsafe_get_user(regs->gpr[2], &funct_desc_ptr->toc, uaccess_end);
user_read_access_end();
return false;
uaccess_end:
user_read_access_end();
fault:
signal_fault(current, regs, __func__, funct_desc_ptr);
return true;
}
^ permalink raw reply
* Re: [PATCH v2 3/5] signal: Add unsafe_copy_siginfo_to_user()
From: Christoph Hellwig @ 2021-09-02 6:54 UTC (permalink / raw)
To: Christophe Leroy
Cc: Peter Zijlstra, linux-kernel, Linus Torvalds, Paul Mackerras,
Josh Poimboeuf, linuxppc-dev
In-Reply-To: <a94be61f008ab29c231b805e1a97e9dab35cb0cc.1629732940.git.christophe.leroy@csgroup.eu>
On Mon, Aug 23, 2021 at 03:35:53PM +0000, Christophe Leroy wrote:
> In the same spirit as commit fb05121fd6a2 ("signal: Add
> unsafe_get_compat_sigset()"), implement an 'unsafe' version of
> copy_siginfo_to_user() in order to use it within user access blocks.
>
> For that, also add an 'unsafe' version of clear_user().
I'm a little worried about all these unsafe helper in powerpc and the
ever increasing scope of the unsafe sections. Can you at least at
powerpc support to objtool to verify them? objtool verifications has
helped to find quite a few bugs in unsafe sections on x86.
>
> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> ---
> include/linux/signal.h | 15 +++++++++++++++
> include/linux/uaccess.h | 1 +
> kernel/signal.c | 5 -----
> 3 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/include/linux/signal.h b/include/linux/signal.h
> index 3454c7ff0778..659bd43daf10 100644
> --- a/include/linux/signal.h
> +++ b/include/linux/signal.h
> @@ -35,6 +35,21 @@ static inline void copy_siginfo_to_external(siginfo_t *to,
> int copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from);
> int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from);
>
> +static __always_inline char __user *si_expansion(const siginfo_t __user *info)
> +{
> + return ((char __user *)info) + sizeof(struct kernel_siginfo);
> +}
> +
> +#define unsafe_copy_siginfo_to_user(to, from, label) do { \
> + siginfo_t __user *__ucs_to = to; \
> + const kernel_siginfo_t *__ucs_from = from; \
> + char __user *__ucs_expansion = si_expansion(__ucs_to); \
> + \
> + unsafe_copy_to_user(__ucs_to, __ucs_from, \
> + sizeof(struct kernel_siginfo), label); \
> + unsafe_clear_user(__ucs_expansion, SI_EXPANSION_SIZE, label); \
> +} while (0)
> +
> enum siginfo_layout {
> SIL_KILL,
> SIL_TIMER,
> diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
> index c05e903cef02..37073caac474 100644
> --- a/include/linux/uaccess.h
> +++ b/include/linux/uaccess.h
> @@ -398,6 +398,7 @@ long strnlen_user_nofault(const void __user *unsafe_addr, long count);
> #define unsafe_put_user(x,p,e) unsafe_op_wrap(__put_user(x,p),e)
> #define unsafe_copy_to_user(d,s,l,e) unsafe_op_wrap(__copy_to_user(d,s,l),e)
> #define unsafe_copy_from_user(d,s,l,e) unsafe_op_wrap(__copy_from_user(d,s,l),e)
> +#define unsafe_clear_user(d, l, e) unsafe_op_wrap(__clear_user(d, l), e)
> static inline unsigned long user_access_save(void) { return 0UL; }
> static inline void user_access_restore(unsigned long flags) { }
> #endif
> diff --git a/kernel/signal.c b/kernel/signal.c
> index a3229add4455..83b5971e4304 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -3261,11 +3261,6 @@ enum siginfo_layout siginfo_layout(unsigned sig, int si_code)
> return layout;
> }
>
> -static inline char __user *si_expansion(const siginfo_t __user *info)
> -{
> - return ((char __user *)info) + sizeof(struct kernel_siginfo);
> -}
> -
> int copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from)
> {
> char __user *expansion = si_expansion(to);
> --
> 2.25.0
>
---end quoted text---
^ permalink raw reply
* Re: [PATCH 0/2] powerpc/perf: Add instruction and data address registers to extended regs
From: kajoljain @ 2021-09-02 7:34 UTC (permalink / raw)
To: Athira Rajeev, mpe, acme, jolsa; +Cc: maddy, linuxppc-dev, rnsastry
In-Reply-To: <1624200360-1429-1-git-send-email-atrajeev@linux.vnet.ibm.com>
On 6/20/21 8:15 PM, Athira Rajeev wrote:
> Patch set adds PMU registers namely Sampled Instruction Address Register
> (SIAR) and Sampled Data Address Register (SDAR) as part of extended regs
> in PowerPC. These registers provides the instruction/data address and
> adding these to extended regs helps in debug purposes.
>
> Patch 1/2 adds SIAR and SDAR as part of the extended regs mask.
> Patch 2/2 includes perf tools side changes to add the SPRs to
> sample_reg_mask to use with -I? option.
>
> Athira Rajeev (2):
> powerpc/perf: Expose instruction and data address registers as part of
> extended regs
> tools/perf: Add perf tools support to expose instruction and data
> address registers as part of extended regs
>
Patchset looks good to me.
Reviewed-By: kajol Jain<kjain@linux.ibm.com>
Thanks,
Kajol Jain
> arch/powerpc/include/uapi/asm/perf_regs.h | 12 +++++++-----
> arch/powerpc/perf/perf_regs.c | 4 ++++
> tools/arch/powerpc/include/uapi/asm/perf_regs.h | 12 +++++++-----
> tools/perf/arch/powerpc/include/perf_regs.h | 2 ++
> tools/perf/arch/powerpc/util/perf_regs.c | 2 ++
> 5 files changed, 22 insertions(+), 10 deletions(-)
>
^ permalink raw reply
* Re: [PATCH kernel] KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots
From: Fabiano Rosas @ 2021-09-02 13:08 UTC (permalink / raw)
To: Alexey Kardashevskiy, linuxppc-dev; +Cc: kvm-ppc
In-Reply-To: <a72edcd2-a990-a549-2f31-dab134bef6a6@ozlabs.ru>
Alexey Kardashevskiy <aik@ozlabs.ru> writes:
> On 02/09/2021 00:59, Fabiano Rosas wrote:
>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>
>>> The userspace can trigger "vmalloc size %lu allocation failure: exceeds
>>> total pages" via the KVM_SET_USER_MEMORY_REGION ioctl.
>>>
>>> This silences the warning by checking the limit before calling vzalloc()
>>> and returns ENOMEM if failed.
>>>
>>> This does not call underlying valloc helpers as __vmalloc_node() is only
>>> exported when CONFIG_TEST_VMALLOC_MODULE and __vmalloc_node_range() is not
>>> exported at all.
>>>
>>> Spotted by syzkaller.
>>>
>>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>>> ---
>>> arch/powerpc/kvm/book3s_hv.c | 8 ++++++--
>>> 1 file changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
>>> index 474c0cfde384..a59f1cccbcf9 100644
>>> --- a/arch/powerpc/kvm/book3s_hv.c
>>> +++ b/arch/powerpc/kvm/book3s_hv.c
>>> @@ -4830,8 +4830,12 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
>>> unsigned long npages = mem->memory_size >> PAGE_SHIFT;
>>>
>>> if (change == KVM_MR_CREATE) {
>>> - slot->arch.rmap = vzalloc(array_size(npages,
>>> - sizeof(*slot->arch.rmap)));
>>> + unsigned long cb = array_size(npages, sizeof(*slot->arch.rmap));
>>
>> What does cb mean?
>
> "count of bytes"
>
> This is from my deep Windows past :)
>
> https://docs.microsoft.com/en-us/windows/win32/stg/coding-style-conventions
=D How interesting! And according to that link 'sz' means "Zero terminated
String". Imagine the confusion.. haha
>>
>>> +
>>> + if ((cb >> PAGE_SHIFT) > totalram_pages())
>>> + return -ENOMEM;
>>> +
>>> + slot->arch.rmap = vzalloc(cb);
>>> if (!slot->arch.rmap)
>>> return -ENOMEM;
>>> }
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox