All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Stefan Haberland <sth@linux.ibm.com>,
	Jan Hoeppner <hoeppner@linux.ibm.com>,
	Jens Axboe <axboe@kernel.dk>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.15 035/317] s390/dasd: add copy pair setup
Date: Sun, 24 Mar 2024 19:30:15 -0400	[thread overview]
Message-ID: <20240324233458.1352854-36-sashal@kernel.org> (raw)
In-Reply-To: <20240324233458.1352854-1-sashal@kernel.org>

From: Stefan Haberland <sth@linux.ibm.com>

[ Upstream commit a91ff09d39f9b6545254839ac91f1ff7bd21d39e ]

A copy relation that is configured on the storage server side needs to be
enabled separately in the device driver. A sysfs interface is created
that allows userspace tooling to control such setup.

The following sysfs entries are added to store and read copy relation
information:

copy_pair
    - Add/Delete a copy pair relation to the DASD device driver
    - Query all previously added copy pair relations
copy_role
    - Query the copy pair role of the device

To add a copy pair to the DASD device driver it has to be specified
through the sysfs attribute copy_pair. Only one secondary device can be
specified at a time together with the primary device. Both, secondary
and primary can be used equally to define the copy pair.
The secondary devices have to be offline when adding the copy relation.
The primary device needs to be specified first followed by the comma
separated secondary device.
Read from the copy_pair attribute to get the current setup and write
"clear" to the attribute to delete any existing setup.

Example:
$ echo 0.0.9700,0.0.9740 > /sys/bus/ccw/devices/0.0.9700/copy_pair
$ cat /sys/bus/ccw/devices/0.0.9700/copy_pair
0.0.9700,0.0.9740

During device online processing the required data will be read from the
storage server and the information will be compared to the setup
requested through the copy_pair attribute. The registration of the
primary and secondary device will be handled accordingly.
A blockdevice is only allocated for copy relation primary devices.

To query the copy role of a device read from the copy_role sysfs
attribute. Possible values are primary, secondary, and none.

Example:
$ cat /sys/bus/ccw/devices/0.0.9700/copy_role
primary

Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
Link: https://lore.kernel.org/r/20220920192616.808070-4-sth@linux.ibm.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Stable-dep-of: c3116e62ddef ("s390/dasd: fix double module refcount decrement")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/s390/block/dasd_devmap.c | 566 ++++++++++++++++++++++++++++++-
 drivers/s390/block/dasd_eckd.c   |  52 ++-
 drivers/s390/block/dasd_eckd.h   |   2 +-
 drivers/s390/block/dasd_int.h    |  20 ++
 4 files changed, 623 insertions(+), 17 deletions(-)

diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
index 2c40fe15da552..6f9f7a0723128 100644
--- a/drivers/s390/block/dasd_devmap.c
+++ b/drivers/s390/block/dasd_devmap.c
@@ -26,7 +26,6 @@
 
 /* This is ugly... */
 #define PRINTK_HEADER "dasd_devmap:"
-#define DASD_BUS_ID_SIZE 20
 #define DASD_MAX_PARAMS 256
 
 #include "dasd_int.h"
@@ -50,6 +49,7 @@ struct dasd_devmap {
         unsigned int devindex;
         unsigned short features;
 	struct dasd_device *device;
+	struct dasd_copy_relation *copy;
 };
 
 /*
@@ -130,7 +130,7 @@ __setup ("dasd=", dasd_call_setup);
 /*
  * Read a device busid/devno from a string.
  */
-static int __init dasd_busid(char *str, int *id0, int *id1, int *devno)
+static int dasd_busid(char *str, int *id0, int *id1, int *devno)
 {
 	unsigned int val;
 	char *tok;
@@ -438,16 +438,12 @@ dasd_add_busid(const char *bus_id, int features)
 	return devmap;
 }
 
-/*
- * Find devmap for device with given bus_id.
- */
 static struct dasd_devmap *
-dasd_find_busid(const char *bus_id)
+dasd_find_busid_locked(const char *bus_id)
 {
 	struct dasd_devmap *devmap, *tmp;
 	int hash;
 
-	spin_lock(&dasd_devmap_lock);
 	devmap = ERR_PTR(-ENODEV);
 	hash = dasd_hash_busid(bus_id);
 	list_for_each_entry(tmp, &dasd_hashlists[hash], list) {
@@ -456,6 +452,19 @@ dasd_find_busid(const char *bus_id)
 			break;
 		}
 	}
+	return devmap;
+}
+
+/*
+ * Find devmap for device with given bus_id.
+ */
+static struct dasd_devmap *
+dasd_find_busid(const char *bus_id)
+{
+	struct dasd_devmap *devmap;
+
+	spin_lock(&dasd_devmap_lock);
+	devmap = dasd_find_busid_locked(bus_id);
 	spin_unlock(&dasd_devmap_lock);
 	return devmap;
 }
@@ -584,6 +593,238 @@ dasd_create_device(struct ccw_device *cdev)
 	return device;
 }
 
+/*
+ * allocate a PPRC data structure and call the discipline function to fill
+ */
+static int dasd_devmap_get_pprc_status(struct dasd_device *device,
+				       struct dasd_pprc_data_sc4 **data)
+{
+	struct dasd_pprc_data_sc4 *temp;
+
+	if (!device->discipline || !device->discipline->pprc_status) {
+		dev_warn(&device->cdev->dev, "Unable to query copy relation status\n");
+		return -EOPNOTSUPP;
+	}
+	temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+	if (!temp)
+		return -ENOMEM;
+
+	/* get PPRC information from storage */
+	if (device->discipline->pprc_status(device, temp)) {
+		dev_warn(&device->cdev->dev, "Error during copy relation status query\n");
+		kfree(temp);
+		return -EINVAL;
+	}
+	*data = temp;
+
+	return 0;
+}
+
+/*
+ * find an entry in a PPRC device_info array by a given UID
+ * depending on the primary/secondary state of the device it has to be
+ * matched with the respective fields
+ */
+static int dasd_devmap_entry_from_pprc_data(struct dasd_pprc_data_sc4 *data,
+					    struct dasd_uid uid,
+					    bool primary)
+{
+	int i;
+
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (primary) {
+			if (data->dev_info[i].prim_cu_ssid == uid.ssid &&
+			    data->dev_info[i].primary == uid.real_unit_addr)
+				return i;
+		} else {
+			if (data->dev_info[i].sec_cu_ssid == uid.ssid &&
+			    data->dev_info[i].secondary == uid.real_unit_addr)
+				return i;
+		}
+	}
+	return -1;
+}
+
+/*
+ * check the consistency of a specified copy relation by checking
+ * the following things:
+ *
+ *   - is the given device part of a copy pair setup
+ *   - does the state of the device match the state in the PPRC status data
+ *   - does the device UID match with the UID in the PPRC status data
+ *   - to prevent misrouted IO check if the given device is present in all
+ *     related PPRC status data
+ */
+static int dasd_devmap_check_copy_relation(struct dasd_device *device,
+					   struct dasd_copy_entry *entry,
+					   struct dasd_pprc_data_sc4 *data,
+					   struct dasd_copy_relation *copy)
+{
+	struct dasd_pprc_data_sc4 *tmp_dat;
+	struct dasd_device *tmp_dev;
+	struct dasd_uid uid;
+	int i, j;
+
+	if (!device->discipline || !device->discipline->get_uid ||
+	    device->discipline->get_uid(device, &uid))
+		return 1;
+
+	i = dasd_devmap_entry_from_pprc_data(data, uid, entry->primary);
+	if (i < 0) {
+		dev_warn(&device->cdev->dev, "Device not part of a copy relation\n");
+		return 1;
+	}
+
+	/* double check which role the current device has */
+	if (entry->primary) {
+		if (data->dev_info[i].flags & 0x80) {
+			dev_warn(&device->cdev->dev, "Copy pair secondary is setup as primary\n");
+			return 1;
+		}
+		if (data->dev_info[i].prim_cu_ssid != uid.ssid ||
+		    data->dev_info[i].primary != uid.real_unit_addr) {
+			dev_warn(&device->cdev->dev,
+				 "Primary device %s does not match copy pair status primary device %04x\n",
+				 dev_name(&device->cdev->dev),
+				 data->dev_info[i].prim_cu_ssid |
+				 data->dev_info[i].primary);
+			return 1;
+		}
+	} else {
+		if (!(data->dev_info[i].flags & 0x80)) {
+			dev_warn(&device->cdev->dev, "Copy pair primary is setup as secondary\n");
+			return 1;
+		}
+		if (data->dev_info[i].sec_cu_ssid != uid.ssid ||
+		    data->dev_info[i].secondary != uid.real_unit_addr) {
+			dev_warn(&device->cdev->dev,
+				 "Secondary device %s does not match copy pair status secondary device %04x\n",
+				 dev_name(&device->cdev->dev),
+				 data->dev_info[i].sec_cu_ssid |
+				 data->dev_info[i].secondary);
+			return 1;
+		}
+	}
+
+	/*
+	 * the current device has to be part of the copy relation of all
+	 * entries to prevent misrouted IO to another copy pair
+	 */
+	for (j = 0; j < DASD_CP_ENTRIES; j++) {
+		if (entry == &copy->entry[j])
+			tmp_dev = device;
+		else
+			tmp_dev = copy->entry[j].device;
+
+		if (!tmp_dev)
+			continue;
+
+		if (dasd_devmap_get_pprc_status(tmp_dev, &tmp_dat))
+			return 1;
+
+		if (dasd_devmap_entry_from_pprc_data(tmp_dat, uid, entry->primary) < 0) {
+			dev_warn(&tmp_dev->cdev->dev,
+				 "Copy pair relation does not contain device: %s\n",
+				 dev_name(&device->cdev->dev));
+			kfree(tmp_dat);
+			return 1;
+		}
+		kfree(tmp_dat);
+	}
+	return 0;
+}
+
+/* delete device from copy relation entry */
+static void dasd_devmap_delete_copy_relation_device(struct dasd_device *device)
+{
+	struct dasd_copy_relation *copy;
+	int i;
+
+	if (!device->copy)
+		return;
+
+	copy = device->copy;
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].device == device)
+			copy->entry[i].device = NULL;
+	}
+	dasd_put_device(device);
+	device->copy = NULL;
+}
+
+/*
+ * read all required information for a copy relation setup and setup the device
+ * accordingly
+ */
+int dasd_devmap_set_device_copy_relation(struct ccw_device *cdev,
+					 bool pprc_enabled)
+{
+	struct dasd_pprc_data_sc4 *data = NULL;
+	struct dasd_copy_entry *entry = NULL;
+	struct dasd_copy_relation *copy;
+	struct dasd_devmap *devmap;
+	struct dasd_device *device;
+	int i, rc = 0;
+
+	devmap = dasd_devmap_from_cdev(cdev);
+	if (IS_ERR(devmap))
+		return PTR_ERR(devmap);
+
+	device = devmap->device;
+	if (!device)
+		return -ENODEV;
+
+	copy = devmap->copy;
+	/* no copy pair setup for this device */
+	if (!copy)
+		goto out;
+
+	rc = dasd_devmap_get_pprc_status(device, &data);
+	if (rc)
+		return rc;
+
+	/* print error if PPRC is requested but not enabled on storage server */
+	if (!pprc_enabled) {
+		dev_err(&cdev->dev, "Copy relation not enabled on storage server\n");
+		rc = -EINVAL;
+		goto out;
+	}
+
+	if (!data->dev_info[0].state) {
+		dev_warn(&device->cdev->dev, "Copy pair setup requested for device not in copy relation\n");
+		rc = -EINVAL;
+		goto out;
+	}
+	/* find entry */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].configured &&
+		    strncmp(dev_name(&cdev->dev),
+			    copy->entry[i].busid, DASD_BUS_ID_SIZE) == 0) {
+			entry = &copy->entry[i];
+			break;
+		}
+	}
+	if (!entry) {
+		dev_warn(&device->cdev->dev, "Copy relation entry not found\n");
+		rc = -EINVAL;
+		goto out;
+	}
+	/* check if the copy relation is valid */
+	if (dasd_devmap_check_copy_relation(device, entry, data, copy)) {
+		dev_warn(&device->cdev->dev, "Copy relation faulty\n");
+		rc = -EINVAL;
+		goto out;
+	}
+
+	dasd_get_device(device);
+	copy->entry[i].device = device;
+	device->copy = copy;
+out:
+	kfree(data);
+	return rc;
+}
+EXPORT_SYMBOL_GPL(dasd_devmap_set_device_copy_relation);
+
 /*
  * Wait queue for dasd_delete_device waits.
  */
@@ -617,6 +858,8 @@ dasd_delete_device(struct dasd_device *device)
 	dev_set_drvdata(&device->cdev->dev, NULL);
 	spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
 
+	/* Removve copy relation */
+	dasd_devmap_delete_copy_relation_device(device);
 	/*
 	 * Drop ref_count by 3, one for the devmap reference, one for
 	 * the cdev reference and one for the passed reference.
@@ -1683,6 +1926,313 @@ dasd_path_fcs_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
 static struct kobj_attribute path_fcs_attribute =
 	__ATTR(fc_security, 0444, dasd_path_fcs_show, NULL);
 
+/*
+ * print copy relation in the form
+ * primary,secondary[1] primary,secondary[2], ...
+ */
+static ssize_t
+dasd_copy_pair_show(struct device *dev,
+		    struct device_attribute *attr, char *buf)
+{
+	char prim_busid[DASD_BUS_ID_SIZE];
+	struct dasd_copy_relation *copy;
+	struct dasd_devmap *devmap;
+	int len = 0;
+	int i;
+
+	devmap = dasd_find_busid(dev_name(dev));
+	if (IS_ERR(devmap))
+		return -ENODEV;
+
+	if (!devmap->copy)
+		return -ENODEV;
+
+	copy = devmap->copy;
+	/* find primary */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].configured && copy->entry[i].primary) {
+			strscpy(prim_busid, copy->entry[i].busid,
+				DASD_BUS_ID_SIZE);
+			break;
+		}
+	}
+	if (!copy->entry[i].primary)
+		goto out;
+
+	/* print all secondary */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].configured && !copy->entry[i].primary)
+			len += sysfs_emit_at(buf, len, "%s,%s ", prim_busid,
+					     copy->entry[i].busid);
+	}
+
+	len += sysfs_emit_at(buf, len, "\n");
+out:
+	return len;
+}
+
+static int dasd_devmap_set_copy_relation(struct dasd_devmap *devmap,
+					 struct dasd_copy_relation *copy,
+					 char *busid, bool primary)
+{
+	int i;
+
+	/* find free entry */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		/* current bus_id already included, nothing to do */
+		if (copy->entry[i].configured &&
+		    strncmp(copy->entry[i].busid, busid, DASD_BUS_ID_SIZE) == 0)
+			return 0;
+
+		if (!copy->entry[i].configured)
+			break;
+	}
+	if (i == DASD_CP_ENTRIES)
+		return -EINVAL;
+
+	copy->entry[i].configured = true;
+	strscpy(copy->entry[i].busid, busid, DASD_BUS_ID_SIZE);
+	if (primary) {
+		copy->active = &copy->entry[i];
+		copy->entry[i].primary = true;
+	}
+	if (!devmap->copy)
+		devmap->copy = copy;
+
+	return 0;
+}
+
+static void dasd_devmap_del_copy_relation(struct dasd_copy_relation *copy,
+					  char *busid)
+{
+	int i;
+
+	spin_lock(&dasd_devmap_lock);
+	/* find entry */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].configured &&
+		    strncmp(copy->entry[i].busid, busid, DASD_BUS_ID_SIZE) == 0)
+			break;
+	}
+	if (i == DASD_CP_ENTRIES || !copy->entry[i].configured) {
+		spin_unlock(&dasd_devmap_lock);
+		return;
+	}
+
+	copy->entry[i].configured = false;
+	memset(copy->entry[i].busid, 0, DASD_BUS_ID_SIZE);
+	if (copy->active == &copy->entry[i]) {
+		copy->active = NULL;
+		copy->entry[i].primary = false;
+	}
+	spin_unlock(&dasd_devmap_lock);
+}
+
+static int dasd_devmap_clear_copy_relation(struct device *dev)
+{
+	struct dasd_copy_relation *copy;
+	struct dasd_devmap *devmap;
+	int i, rc = 1;
+
+	devmap = dasd_devmap_from_cdev(to_ccwdev(dev));
+	if (IS_ERR(devmap))
+		return 1;
+
+	spin_lock(&dasd_devmap_lock);
+	if (!devmap->copy)
+		goto out;
+
+	copy = devmap->copy;
+	/* first check if all secondary devices are offline*/
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (!copy->entry[i].configured)
+			continue;
+
+		if (copy->entry[i].device == copy->active->device)
+			continue;
+
+		if (copy->entry[i].device)
+			goto out;
+	}
+	/* clear all devmap entries */
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (strlen(copy->entry[i].busid) == 0)
+			continue;
+		if (copy->entry[i].device) {
+			dasd_put_device(copy->entry[i].device);
+			copy->entry[i].device->copy = NULL;
+			copy->entry[i].device = NULL;
+		}
+		devmap = dasd_find_busid_locked(copy->entry[i].busid);
+		devmap->copy = NULL;
+		memset(copy->entry[i].busid, 0, DASD_BUS_ID_SIZE);
+	}
+	kfree(copy);
+	rc = 0;
+out:
+	spin_unlock(&dasd_devmap_lock);
+	return rc;
+}
+
+/*
+ * parse BUSIDs from a copy pair
+ */
+static int dasd_devmap_parse_busid(const char *buf, char *prim_busid,
+				   char *sec_busid)
+{
+	char *primary, *secondary, *tmp, *pt;
+	int id0, id1, id2;
+
+	pt =  kstrdup(buf, GFP_KERNEL);
+	tmp = pt;
+	if (!tmp)
+		return -ENOMEM;
+
+	primary = strsep(&tmp, ",");
+	if (!primary) {
+		kfree(pt);
+		return -EINVAL;
+	}
+	secondary = strsep(&tmp, ",");
+	if (!secondary) {
+		kfree(pt);
+		return -EINVAL;
+	}
+	if (dasd_busid(primary, &id0, &id1, &id2)) {
+		kfree(pt);
+		return -EINVAL;
+	}
+	sprintf(prim_busid, "%01x.%01x.%04x", id0, id1, id2);
+	if (dasd_busid(secondary, &id0, &id1, &id2)) {
+		kfree(pt);
+		return -EINVAL;
+	}
+	sprintf(sec_busid, "%01x.%01x.%04x", id0, id1, id2);
+	kfree(pt);
+
+	return 0;
+}
+
+static ssize_t dasd_copy_pair_store(struct device *dev,
+				    struct device_attribute *attr,
+				    const char *buf, size_t count)
+{
+	struct dasd_devmap *prim_devmap, *sec_devmap;
+	char prim_busid[DASD_BUS_ID_SIZE];
+	char sec_busid[DASD_BUS_ID_SIZE];
+	struct dasd_copy_relation *copy;
+	struct dasd_device *device;
+	bool pprc_enabled;
+	int rc;
+
+	if (strncmp(buf, "clear", strlen("clear")) == 0) {
+		if (dasd_devmap_clear_copy_relation(dev))
+			return -EINVAL;
+		return count;
+	}
+
+	rc = dasd_devmap_parse_busid(buf, prim_busid, sec_busid);
+	if (rc)
+		return rc;
+
+	if (strncmp(dev_name(dev), prim_busid, DASD_BUS_ID_SIZE) != 0 &&
+	    strncmp(dev_name(dev), sec_busid, DASD_BUS_ID_SIZE) != 0)
+		return -EINVAL;
+
+	/* allocate primary devmap if needed */
+	prim_devmap = dasd_find_busid(prim_busid);
+	if (IS_ERR(prim_devmap))
+		prim_devmap = dasd_add_busid(prim_busid, DASD_FEATURE_DEFAULT);
+
+	/* allocate secondary devmap if needed */
+	sec_devmap = dasd_find_busid(sec_busid);
+	if (IS_ERR(sec_devmap))
+		sec_devmap = dasd_add_busid(sec_busid, DASD_FEATURE_DEFAULT);
+
+	/* setting copy relation is only allowed for offline secondary */
+	if (sec_devmap->device)
+		return -EINVAL;
+
+	if (prim_devmap->copy) {
+		copy = prim_devmap->copy;
+	} else if (sec_devmap->copy) {
+		copy = sec_devmap->copy;
+	} else {
+		copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+		if (!copy)
+			return -ENOMEM;
+	}
+	spin_lock(&dasd_devmap_lock);
+	rc = dasd_devmap_set_copy_relation(prim_devmap, copy, prim_busid, true);
+	if (rc) {
+		spin_unlock(&dasd_devmap_lock);
+		return rc;
+	}
+	rc = dasd_devmap_set_copy_relation(sec_devmap, copy, sec_busid, false);
+	if (rc) {
+		spin_unlock(&dasd_devmap_lock);
+		return rc;
+	}
+	spin_unlock(&dasd_devmap_lock);
+
+	/* if primary device is already online call device setup directly */
+	if (prim_devmap->device && !prim_devmap->device->copy) {
+		device = prim_devmap->device;
+		if (device->discipline->pprc_enabled) {
+			pprc_enabled = device->discipline->pprc_enabled(device);
+			rc = dasd_devmap_set_device_copy_relation(device->cdev,
+								  pprc_enabled);
+		} else {
+			rc = -EOPNOTSUPP;
+		}
+	}
+	if (rc) {
+		dasd_devmap_del_copy_relation(copy, prim_busid);
+		dasd_devmap_del_copy_relation(copy, sec_busid);
+		count = rc;
+	}
+
+	return count;
+}
+static DEVICE_ATTR(copy_pair, 0644, dasd_copy_pair_show,
+		   dasd_copy_pair_store);
+
+static ssize_t
+dasd_copy_role_show(struct device *dev,
+		    struct device_attribute *attr, char *buf)
+{
+	struct dasd_copy_relation *copy;
+	struct dasd_device *device;
+	int len, i;
+
+	device = dasd_device_from_cdev(to_ccwdev(dev));
+	if (IS_ERR(device))
+		return -ENODEV;
+
+	if (!device->copy) {
+		len = sysfs_emit(buf, "none\n");
+		goto out;
+	}
+	copy = device->copy;
+	/* only the active device is primary */
+	if (copy->active->device == device) {
+		len = sysfs_emit(buf, "primary\n");
+		goto out;
+	}
+	for (i = 0; i < DASD_CP_ENTRIES; i++) {
+		if (copy->entry[i].device == device) {
+			len = sysfs_emit(buf, "secondary\n");
+			goto out;
+		}
+	}
+	/* not in the list, no COPY role */
+	len = sysfs_emit(buf, "none\n");
+out:
+	dasd_put_device(device);
+	return len;
+}
+static DEVICE_ATTR(copy_role, 0444, dasd_copy_role_show, NULL);
+
 #define DASD_DEFINE_ATTR(_name, _func)					\
 static ssize_t dasd_##_name##_show(struct device *dev,			\
 				   struct device_attribute *attr,	\
@@ -1739,6 +2289,8 @@ static struct attribute * dasd_attrs[] = {
 	&dev_attr_hpf.attr,
 	&dev_attr_ese.attr,
 	&dev_attr_fc_security.attr,
+	&dev_attr_copy_pair.attr,
+	&dev_attr_copy_role.attr,
 	NULL,
 };
 
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 76f861c2ce614..59b11950fb60c 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -2028,11 +2028,28 @@ static void dasd_eckd_kick_validate_server(struct dasd_device *device)
 		dasd_put_device(device);
 }
 
+/*
+ * return if the device is the copy relation primary if a copy relation is active
+ */
+static int dasd_device_is_primary(struct dasd_device *device)
+{
+	if (!device->copy)
+		return 1;
+
+	if (device->copy->active->device == device)
+		return 1;
+
+	return 0;
+}
+
 static int dasd_eckd_alloc_block(struct dasd_device *device)
 {
 	struct dasd_block *block;
 	struct dasd_uid temp_uid;
 
+	if (!dasd_device_is_primary(device))
+		return 0;
+
 	dasd_eckd_get_uid(device, &temp_uid);
 	if (temp_uid.type == UA_BASE_DEVICE) {
 		block = dasd_alloc_block();
@@ -2047,6 +2064,13 @@ static int dasd_eckd_alloc_block(struct dasd_device *device)
 	return 0;
 }
 
+static bool dasd_eckd_pprc_enabled(struct dasd_device *device)
+{
+	struct dasd_eckd_private *private = device->private;
+
+	return private->rdc_data.facilities.PPRC_enabled;
+}
+
 /*
  * Check device characteristics.
  * If the device is accessible using ECKD discipline, the device is enabled.
@@ -2112,6 +2136,24 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
 			device->default_expires = value;
 	}
 
+	/* Read Device Characteristics */
+	rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC,
+					 &private->rdc_data, 64);
+	if (rc) {
+		DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
+				"Read device characteristic failed, rc=%d", rc);
+		goto out_err1;
+	}
+
+	/* setup PPRC for device from devmap */
+	rc = dasd_devmap_set_device_copy_relation(device->cdev,
+						  dasd_eckd_pprc_enabled(device));
+	if (rc) {
+		DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
+				"copy relation setup failed, rc=%d", rc);
+		goto out_err1;
+	}
+
 	/* check if block device is needed and allocate in case */
 	rc = dasd_eckd_alloc_block(device);
 	if (rc)
@@ -2140,15 +2182,6 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
 	/* Read Extent Pool Information */
 	dasd_eckd_read_ext_pool_info(device);
 
-	/* Read Device Characteristics */
-	rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC,
-					 &private->rdc_data, 64);
-	if (rc) {
-		DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
-				"Read device characteristic failed, rc=%d", rc);
-		goto out_err3;
-	}
-
 	if ((device->features & DASD_FEATURE_USERAW) &&
 	    !(private->rdc_data.facilities.RT_in_LR)) {
 		dev_err(&device->cdev->dev, "The storage server does not "
@@ -6789,6 +6822,7 @@ static struct dasd_discipline dasd_eckd_discipline = {
 	.ese_format = dasd_eckd_ese_format,
 	.ese_read = dasd_eckd_ese_read,
 	.pprc_status = dasd_eckd_query_pprc_status,
+	.pprc_enabled = dasd_eckd_pprc_enabled,
 };
 
 static int __init
diff --git a/drivers/s390/block/dasd_eckd.h b/drivers/s390/block/dasd_eckd.h
index ed83a9a55191b..4b869c2bd5195 100644
--- a/drivers/s390/block/dasd_eckd.h
+++ b/drivers/s390/block/dasd_eckd.h
@@ -267,7 +267,7 @@ struct dasd_eckd_characteristics {
 		unsigned char reserved3:8;
 		unsigned char defect_wr:1;
 		unsigned char XRC_supported:1;
-		unsigned char reserved4:1;
+		unsigned char PPRC_enabled:1;
 		unsigned char striping:1;
 		unsigned char reserved5:4;
 		unsigned char cfw:1;
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h
index 2ee8bc035b34a..d743d1d2b38e9 100644
--- a/drivers/s390/block/dasd_int.h
+++ b/drivers/s390/block/dasd_int.h
@@ -291,6 +291,24 @@ struct dasd_pprc_data_sc4 {
 	struct dasd_pprc_dev_info dev_info[5];
 } __packed;
 
+#define DASD_BUS_ID_SIZE 20
+#define DASD_CP_ENTRIES 5
+
+struct dasd_copy_entry {
+	char busid[DASD_BUS_ID_SIZE];
+	struct dasd_device *device;
+	bool primary;
+	bool configured;
+};
+
+struct dasd_copy_relation {
+	struct dasd_copy_entry entry[DASD_CP_ENTRIES];
+	struct dasd_copy_entry *active;
+};
+
+int dasd_devmap_set_device_copy_relation(struct ccw_device *,
+					 bool pprc_enabled);
+
 /*
  * the struct dasd_discipline is
  * sth like a table of virtual functions, if you think of dasd_eckd
@@ -420,6 +438,7 @@ struct dasd_discipline {
 					   struct dasd_ccw_req *, struct irb *);
 	int (*ese_read)(struct dasd_ccw_req *, struct irb *);
 	int (*pprc_status)(struct dasd_device *, struct	dasd_pprc_data_sc4 *);
+	bool (*pprc_enabled)(struct dasd_device *);
 };
 
 extern struct dasd_discipline *dasd_diag_discipline_pointer;
@@ -616,6 +635,7 @@ struct dasd_device {
 	struct dasd_profile profile;
 	struct dasd_format_entry format_entry;
 	struct kset *paths_info;
+	struct dasd_copy_relation *copy;
 };
 
 struct dasd_block {
-- 
2.43.0


  parent reply	other threads:[~2024-03-24 23:35 UTC|newest]

Thread overview: 334+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-24 23:29 [PATCH 5.15 000/317] 5.15.153-rc1 review Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 001/317] io_uring/unix: drop usage of io_uring socket Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 002/317] io_uring: drop any code related to SCM_RIGHTS Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 003/317] rcu-tasks: Provide rcu_trace_implies_rcu_gp() Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 004/317] bpf: Defer the free of inner map when necessary Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 005/317] btrfs: add and use helper to check if block group is used Sasha Levin
2024-03-25 18:25   ` David Sterba
2024-03-26 19:23     ` Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 006/317] selftests: tls: use exact comparison in recv_partial Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 007/317] ASoC: rt5645: Make LattePanda board DMI match more precise Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 008/317] x86/xen: Add some null pointer checking to smp.c Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 009/317] MIPS: Clear Cause.BD in instruction_pointer_set Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 010/317] HID: multitouch: Add required quirk for Synaptics 0xcddc device Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 011/317] gen_compile_commands: fix invalid escape sequence warning Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 012/317] RDMA/mlx5: Fix fortify source warning while accessing Eth segment Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 013/317] RDMA/mlx5: Relax DEVX access upon modify commands Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 014/317] riscv: dts: sifive: add missing #interrupt-cells to pmic Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 015/317] x86/mm: Move is_vsyscall_vaddr() into asm/vsyscall.h Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 016/317] x86/mm: Disallow vsyscall page read for copy_from_kernel_nofault() Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 017/317] net/iucv: fix the allocation size of iucv_path_table array Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 018/317] parisc/ftrace: add missing CONFIG_DYNAMIC_FTRACE check Sasha Levin
2024-03-24 23:29 ` [PATCH 5.15 019/317] block: sed-opal: handle empty atoms when parsing response Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 020/317] dm-verity, dm-crypt: align "struct bvec_iter" correctly Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 021/317] scsi: mpt3sas: Prevent sending diag_reset when the controller is ready Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 022/317] ALSA: hda/realtek - ALC285 reduce pop noise from Headphone port Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 023/317] drm/amdgpu: Enable gpu reset for S3 abort cases on Raven series Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 024/317] Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 025/317] firewire: core: use long bus reset on gap count error Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 026/317] ASoC: Intel: bytcr_rt5640: Add an extra entry for the Chuwi Vi8 tablet Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 027/317] Input: gpio_keys_polled - suppress deferred probe error for gpio Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 028/317] ASoC: wm8962: Enable oscillator if selecting WM8962_FLL_OSC Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 029/317] ASoC: wm8962: Enable both SPKOUTR_ENA and SPKOUTL_ENA in mono mode Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 030/317] ASoC: wm8962: Fix up incorrect error message in wm8962_set_fll Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 031/317] do_sys_name_to_handle(): use kzalloc() to fix kernel-infoleak Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 032/317] f2fs: implement iomap operations Sasha Levin
2024-03-25  3:37   ` Eric Biggers
2024-03-25  3:40     ` Eric Biggers
2024-03-25 11:09     ` Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 033/317] s390/dasd: put block allocation in separate function Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 034/317] s390/dasd: add query PPRC function Sasha Levin
2024-03-24 23:30 ` Sasha Levin [this message]
2024-03-24 23:30 ` [PATCH 5.15 036/317] s390/dasd: add autoquiesce feature Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 037/317] s390/dasd: Use dev_*() for device log messages Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 038/317] s390/dasd: fix double module refcount decrement Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 039/317] nbd: null check for nla_nest_start Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 040/317] fs/select: rework stack allocation hack for clang Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 041/317] md: Don't clear MD_CLOSING when the raid is about to stop Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 042/317] lib/cmdline: Fix an invalid format specifier in an assertion msg Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 043/317] time: test: Fix incorrect format specifier Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 044/317] rtc: test: Fix invalid " Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 045/317] aoe: fix the potential use-after-free problem in aoecmd_cfg_pkts Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 046/317] timekeeping: Fix cross-timestamp interpolation on counter wrap Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 047/317] timekeeping: Fix cross-timestamp interpolation corner case decision Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 048/317] timekeeping: Fix cross-timestamp interpolation for non-x86 Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 049/317] sched/fair: Take the scheduling domain into account in select_idle_core() Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 050/317] wifi: ath10k: fix NULL pointer dereference in ath10k_wmi_tlv_op_pull_mgmt_tx_compl_ev() Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 051/317] wifi: b43: Stop/wake correct queue in DMA Tx path when QoS is disabled Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 052/317] wifi: b43: Stop/wake correct queue in PIO " Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 053/317] wifi: b43: Stop correct queue in DMA worker " Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 054/317] wifi: b43: Disable QoS for bcm4331 Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 055/317] wifi: wilc1000: fix declarations ordering Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 056/317] wifi: wilc1000: fix RCU usage in connect path Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 057/317] wifi: rtl8xxxu: add cancel_work_sync() for c2hcmd_work Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 058/317] wifi: wilc1000: fix multi-vif management when deleting a vif Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 059/317] wifi: mwifiex: debugfs: Drop unnecessary error check for debugfs_create_dir() Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 060/317] ARM: dts: renesas: r8a73a4: Fix external clocks and clock rate Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 061/317] cpufreq: brcmstb-avs-cpufreq: add check for cpufreq_cpu_get's return value Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 062/317] cpufreq: Explicitly include correct DT includes Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 063/317] cpufreq: mediatek-hw: Wait for CPU supplies before probing Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 064/317] sock_diag: annotate data-races around sock_diag_handlers[family] Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 065/317] inet_diag: annotate data-races around inet_diag_table[] Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 066/317] bpftool: Silence build warning about calloc() Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 067/317] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 068/317] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 069/317] af_unix: Annotate data-race of gc_in_progress in wait_for_unix_gc() Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 070/317] cpufreq: mediatek-hw: Don't error out if supply is not found Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 071/317] arm64: dts: imx8mm-kontron: Disable pullups for I2C signals on SL/BL i.MX8MM Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 072/317] arm64: dts: imx8mm-kontron: Disable pullups for onboard UART signals on BL board Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 073/317] arm64: dts: imx8mm-kontron: Add support for ultra high speed modes on SD card Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 074/317] arm64: dts: imx8mm-kontron: Use the VSELECT signal to switch SD card IO voltage Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 075/317] arm64: dts: imx8mm-kontron: Disable pull resistors for SD card signals on BL board Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 076/317] wifi: ath9k: delay all of ath9k_wmi_event_tasklet() until init is complete Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 077/317] wifi: iwlwifi: mvm: report beacon protection failures Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 078/317] wifi: iwlwifi: dbg-tlv: ensure NUL termination Sasha Levin
2024-03-24 23:30 ` [PATCH 5.15 079/317] wifi: iwlwifi: fix EWRD table validity check Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 080/317] arm64: dts: imx8mm-venice-gw71xx: fix USB OTG VBUS Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 081/317] pwm: atmel-hlcdc: Convert to platform remove callback returning void Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 082/317] pwm: atmel-hlcdc: Use consistent variable naming Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 083/317] pwm: atmel-hlcdc: Fix clock imbalance related to suspend support Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 084/317] net: blackhole_dev: fix build warning for ethh set but not used Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 085/317] wifi: libertas: fix some memleaks in lbs_allocate_cmd_buffer() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 086/317] arm64: dts: qcom: msm8996: Move '#clock-cells' to QMP PHY child node Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 087/317] arm64: dts: qcom: msm8998: drop USB PHY clock index Sasha Levin
2024-03-25  7:42   ` Johan Hovold
2024-03-24 23:31 ` [PATCH 5.15 088/317] arm64: dts: qcom: msm8998: switch USB QMP PHY to new style of bindings Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 089/317] arm64: dts: qcom: msm8998: declare VLS CLAMP register for USB3 PHY Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 090/317] printk: Add panic_in_progress helper Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 091/317] printk: Disable passing console lock owner completely during panic() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 092/317] pwm: sti: Implement .apply() callback Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 093/317] pwm: sti: Fix capture for st,pwm-num-chan < st,capture-num-chan Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 094/317] wifi: iwlwifi: mvm: don't set replay counters to 0xff Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 095/317] s390/vdso: drop '-fPIC' from LDFLAGS Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 096/317] ipv6: mcast: remove one synchronize_net() barrier in ipv6_mc_down() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 097/317] arm64: dts: mt8183: kukui: Add Type C node Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 098/317] arm64: dts: mt8183: kukui: Split out keyboard node and describe detachables Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 099/317] arm64: dts: mt8183: Move CrosEC base detection node to kukui-based DTs Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 100/317] arm64: dts: mediatek: mt7622: add missing "device_type" to memory nodes Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 101/317] bpf: Mark bpf_spin_{lock,unlock}() helpers with notrace correctly Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 102/317] wireless: Remove redundant 'flush_workqueue()' calls Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 103/317] wifi: wilc1000: prevent use-after-free on vif when cleaning up all interfaces Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 104/317] ACPI: processor_idle: Fix memory leak in acpi_processor_power_exit() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 105/317] bus: tegra-aconnect: Update dependency to ARCH_TEGRA Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 106/317] iommu/amd: Mark interrupt as managed Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 107/317] wifi: brcmsmac: avoid function pointer casts Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 108/317] net: ena: Remove ena_select_queue Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 109/317] ARM: dts: arm: realview: Fix development chip ROM compatible value Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 110/317] arm64: dts: renesas: r8a779a0: Update to R-Car Gen4 compatible values Sasha Levin
2024-03-25  8:43   ` Geert Uytterhoeven
2024-03-26 19:18     ` Sasha Levin
2024-03-27  9:41       ` Geert Uytterhoeven
2024-03-27 13:39         ` Greg KH
2024-04-02  8:57   ` Geert Uytterhoeven
2024-04-02 23:11     ` Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 111/317] arm64: dts: renesas: r8a779a0: Correct avb[01] reg sizes Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 112/317] ARM: dts: imx6dl-yapp4: Move phy reset into switch node Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 113/317] ARM: dts: imx6dl-yapp4: Fix typo in the QCA switch register address Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 114/317] ARM: dts: imx6dl-yapp4: Move the internal switch PHYs under the switch node Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 115/317] arm64: dts: marvell: reorder crypto interrupts on Armada SoCs Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 116/317] ACPI: resource: Add Infinity laptops to irq1_edge_low_force_override Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 117/317] ACPI: resource: Do IRQ override on Lunnen Ground laptops Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 118/317] ACPI: resource: Add MAIBENBEN X577 to irq1_edge_low_force_override Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 119/317] ACPI: scan: Fix device check notification handling Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 120/317] x86, relocs: Ignore relocations in .notes section Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 121/317] SUNRPC: fix some memleaks in gssx_dec_option_array Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 122/317] mmc: wmt-sdmmc: remove an incorrect release_mem_region() call in the .remove function Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 123/317] wifi: rtw88: 8821c: Fix false alarm count Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 124/317] PCI: Make pci_dev_is_disconnected() helper public for other drivers Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 125/317] iommu/vt-d: Don't issue ATS Invalidation request when device is disconnected Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 126/317] igb: move PEROUT and EXTTS isr logic to separate functions Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 127/317] igb: Fix missing time sync events Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 128/317] Bluetooth: Remove superfluous call to hci_conn_check_pending() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 129/317] Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855 Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 130/317] Bluetooth: hci_qca: don't use IS_ERR_OR_NULL() with gpiod_get_optional() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 131/317] Bluetooth: hci_core: Fix possible buffer overflow Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 132/317] sr9800: Add check for usbnet_get_endpoints Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 133/317] bpf: Fix DEVMAP_HASH overflow check on 32-bit arches Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 134/317] bpf: Fix hashtab " Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 135/317] bpf: Fix stackmap " Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 136/317] ipv6: fib6_rules: flush route cache when rule is changed Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 137/317] net: ip_tunnel: make sure to pull inner header in ip_tunnel_rcv() Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 138/317] net: phy: fix phy_get_internal_delay accessing an empty array Sasha Levin
2024-03-24 23:31 ` [PATCH 5.15 139/317] net: hns3: fix kernel crash when 1588 is received on HIP08 devices Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 140/317] net: hns3: fix port duplex configure error in IMP reset Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 141/317] net: phy: DP83822: enable rgmii mode if phy_interface_is_rgmii Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 142/317] net: phy: dp83822: Fix RGMII TX delay configuration Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 143/317] OPP: debugfs: Fix warning around icc_get_name() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 144/317] tcp: fix incorrect parameter validation in the do_tcp_getsockopt() function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 145/317] net: Change sock_getsockopt() to take the sk ptr instead of the sock ptr Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 146/317] bpf: net: Change sk_getsockopt() to take the sockptr_t argument Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 147/317] bpf: net: Change do_ip_getsockopt() " Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 148/317] ipmr: fix incorrect parameter validation in the ip_mroute_getsockopt() function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 149/317] l2tp: fix incorrect parameter validation in the pppol2tp_getsockopt() function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 150/317] udp: fix incorrect parameter validation in the udp_lib_getsockopt() function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 151/317] net: kcm: fix incorrect parameter validation in the kcm_getsockopt) function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 152/317] net/x25: fix incorrect parameter validation in the x25_getsockopt() function Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 153/317] nfp: flower: handle acti_netdevs allocation failure Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 154/317] dm raid: fix false positive for requeue needed during reshape Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 155/317] dm: call the resume method on internal suspend Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 156/317] drm/tegra: dsi: Add missing check for of_find_device_by_node Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 157/317] drm/tegra: dpaux: Populate AUX bus Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 158/317] drm/tegra: dpaux: Fix PM disable depth imbalance in tegra_dpaux_probe Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 159/317] drm/tegra: dsi: Make use of the helper function dev_err_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 160/317] drm/tegra: dsi: Fix some error handling paths in tegra_dsi_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 161/317] drm/tegra: dsi: Fix missing pm_runtime_disable() in the error handling path of tegra_dsi_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 162/317] drm/tegra: dc: rgb: Allow changing PLLD rate on Tegra30+ Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 163/317] drm/tegra: rgb: Fix some error handling paths in tegra_dc_rgb_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 164/317] drm/tegra: rgb: Fix missing clk_put() in the error handling paths of tegra_dc_rgb_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 165/317] drm/tegra: output: Fix missing i2c_put_adapter() in the error handling paths of tegra_output_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 166/317] drm/rockchip: inno_hdmi: Fix video timing Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 167/317] drm: Don't treat 0 as -1 in drm_fixp2int_ceil Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 168/317] drm/ttm: add ttm_resource_fini v2 Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 169/317] drm/vmwgfx: fix a memleak in vmw_gmrid_man_get_node Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 170/317] drm/rockchip: lvds: do not overwrite error code Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 171/317] drm/rockchip: lvds: do not print scary message when probing defer Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 172/317] drm/lima: fix a memleak in lima_heap_alloc Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 173/317] dmaengine: tegra210-adma: Update dependency to ARCH_TEGRA Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 174/317] media: tc358743: register v4l2 async device only after successful setup Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 175/317] PCI/DPC: Print all TLP Prefixes, not just the first Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 176/317] perf record: Fix possible incorrect free in record__switch_output() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 177/317] HID: lenovo: Add middleclick_workaround sysfs knob for cptkbd Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 178/317] drm/amd/display: Fix a potential buffer overflow in 'dp_dsc_clock_en_read()' Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 179/317] drm/amd/display: Fix potential NULL pointer dereferences in 'dcn10_set_output_transfer_func()' Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 180/317] perf evsel: Fix duplicate initialization of data->id in evsel__parse_sample() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 181/317] PCI/AER: Fix rootport attribute paths in ABI docs Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 182/317] clk: meson: Add missing clocks to axg_clk_regmaps Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 183/317] media: em28xx: annotate unchecked call to media_device_register() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 184/317] media: v4l2-tpg: fix some memleaks in tpg_alloc Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 185/317] media: v4l2-mem2mem: fix a memleak in v4l2_m2m_register_entity Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 186/317] media: edia: dvbdev: fix a use-after-free Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 187/317] pinctrl: mediatek: Drop bogus slew rate register range for MT8192 Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 188/317] clk: qcom: reset: Commonize the de/assert functions Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 189/317] clk: qcom: reset: Ensure write completion on reset de/assertion Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 190/317] quota: simplify drop_dquot_ref() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 191/317] quota: Fix potential NULL pointer dereference Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 192/317] quota: Fix rcu annotations of inode dquot pointers Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 193/317] PCI/P2PDMA: Fix a sleeping issue in a RCU read section Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 194/317] PCI: switchtec: Fix an error handling path in switchtec_pci_probe() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 195/317] crypto: xilinx - call finalize with bh disabled Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 196/317] perf thread_map: Free strlist on normal path in thread_map__new_by_tid_str() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 197/317] drm/radeon/ni: Fix wrong firmware size logging in ni_init_microcode() Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 198/317] ALSA: seq: fix function cast warnings Sasha Levin
2024-03-24 23:32 ` [PATCH 5.15 199/317] perf stat: Avoid metric-only segv Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 200/317] ASoC: meson: Use dev_err_probe() helper Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 201/317] ASoC: meson: aiu: fix function pointer type mismatch Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 202/317] ASoC: meson: t9015: " Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 203/317] powerpc: Force inlining of arch_vmap_p{u/m}d_supported() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 204/317] PCI: endpoint: Support NTB transfer between RC and EP Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 205/317] NTB: EPF: fix possible memory leak in pci_vntb_probe() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 206/317] NTB: fix possible name leak in ntb_register_device() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 207/317] media: sun8i-di: Fix coefficient writes Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 208/317] media: sun8i-di: Fix power on/off sequences Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 209/317] media: sun8i-di: Fix chroma difference threshold Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 210/317] media: imx: csc/scaler: fix v4l2_ctrl_handler memory leak Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 211/317] media: go7007: add check of return value of go7007_read_addr() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 212/317] media: pvrusb2: remove redundant NULL check Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 213/317] media: pvrusb2: fix pvr2_stream_callback casts Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 214/317] clk: qcom: dispcc-sdm845: Adjust internal GDSC wait times Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 215/317] drm/mediatek: dsi: Fix DSI RGB666 formats and definitions Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 216/317] PCI: Mark 3ware-9650SE Root Port Extended Tags as broken Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 217/317] clk: hisilicon: hi3519: Release the correct number of gates in hi3519_clk_unregister() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 218/317] clk: hisilicon: hi3559a: Fix an erroneous devm_kfree() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 219/317] drm/tegra: put drm_gem_object ref on error in tegra_fb_create Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 220/317] mfd: syscon: Call of_node_put() only when of_parse_phandle() takes a ref Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 221/317] mfd: altera-sysmgr: " Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 222/317] crypto: arm/sha - fix function cast warnings Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 223/317] drm/tidss: Fix initial plane zpos values Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 224/317] mtd: maps: physmap-core: fix flash size larger than 32-bit Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 225/317] mtd: rawnand: lpc32xx_mlc: fix irq handler prototype Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 226/317] ASoC: meson: axg-tdm-interface: fix mclk setup without mclk-fs Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 227/317] ASoC: meson: axg-tdm-interface: add frame rate constraint Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 228/317] HID: amd_sfh: Update HPD sensor structure elements Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 229/317] drm/amdgpu: Fix missing break in ATOM_ARG_IMM Case of atom_get_src_int() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 230/317] media: pvrusb2: fix uaf in pvr2_context_set_notify Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 231/317] media: dvb-frontends: avoid stack overflow warnings with clang Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 232/317] media: go7007: fix a memleak in go7007_load_encoder Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 233/317] media: ttpci: fix two memleaks in budget_av_attach Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 234/317] media: mediatek: vcodec: avoid -Wcast-function-type-strict warning Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 235/317] drm/mediatek: Fix a null pointer crash in mtk_drm_crtc_finish_page_flip Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 236/317] powerpc/hv-gpci: Fix the H_GET_PERF_COUNTER_INFO hcall return value checks Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 237/317] drm/msm/dpu: add division of drm_display_mode's hskew parameter Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 238/317] module: Add support for default value for module async_probe Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 239/317] modules: wait do_free_init correctly Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 240/317] powerpc/embedded6xx: Fix no previous prototype for avr_uart_send() etc Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 241/317] leds: aw2013: Unlock mutex before destroying it Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 242/317] leds: sgm3140: Add missing timer cleanup and flash gpio control Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 243/317] backlight: lm3630a: Initialize backlight_properties on init Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 244/317] backlight: lm3630a: Don't set bl->props.brightness in get_brightness Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 245/317] backlight: da9052: Fully initialize backlight_properties during probe Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 246/317] backlight: lm3639: " Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 247/317] backlight: lp8788: " Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 248/317] arch/powerpc: Remove <linux/fb.h> from backlight code Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 249/317] sparc32: Fix section mismatch in leon_pci_grpci Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 250/317] clk: Fix clk_core_get NULL dereference Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 251/317] clk: zynq: Prevent null pointer dereference caused by kmalloc failure Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 252/317] ALSA: hda/realtek: fix ALC285 issues on HP Envy x360 laptops Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 253/317] ALSA: usb-audio: Stop parsing channels bits when all channels are found Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 254/317] RDMA/srpt: Do not register event handler until srpt device is fully setup Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 255/317] f2fs: multidevice: support direct IO Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 256/317] f2fs: invalidate META_MAPPING before IPU/DIO write Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 257/317] f2fs: replace congestion_wait() calls with io_schedule_timeout() Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 258/317] f2fs: fix to invalidate META_MAPPING before DIO write Sasha Levin
2024-03-24 23:33 ` [PATCH 5.15 259/317] f2fs: invalidate meta pages only for post_read required inode Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 260/317] f2fs: reduce stack memory cost by using bitfield in struct f2fs_io_info Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 261/317] f2fs: compress: fix to cover normal cluster write with cp_rwsem Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 262/317] f2fs: compress: fix to check unreleased compressed cluster Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 263/317] scsi: csiostor: Avoid function pointer casts Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 264/317] RDMA/device: Fix a race between mad_client and cm_client init Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 265/317] RDMA/rtrs-clt: Check strnlen return len in sysfs mpath_policy_store() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 266/317] scsi: bfa: Fix function pointer type mismatch for hcb_qe->cbfn Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 267/317] net: sunrpc: Fix an off by one in rpc_sockaddr2uaddr() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 268/317] NFSv4.2: fix nfs4_listxattr kernel BUG at mm/usercopy.c:102 Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 269/317] NFSv4.2: fix listxattr maximum XDR buffer size Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 270/317] watchdog: stm32_iwdg: initialize default timeout Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 271/317] NFS: Fix an off by one in root_nfs_cat() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 272/317] f2fs: compress: fix reserve_cblocks counting error when out of space Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 273/317] afs: Revert "afs: Hide silly-rename files from userspace" Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 274/317] comedi: comedi_test: Prevent timers rescheduling during deletion Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 275/317] remoteproc: stm32: use correct format strings on 64-bit Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 276/317] remoteproc: stm32: Fix incorrect type in assignment for va Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 277/317] remoteproc: stm32: Fix incorrect type assignment returned by stm32_rproc_get_loaded_rsc_tablef Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 278/317] tty: vt: fix 20 vs 0x20 typo in EScsiignore Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 279/317] serial: max310x: fix syntax error in IRQ error message Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 280/317] tty: serial: samsung: fix tx_empty() to return TIOCSER_TEMT Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 281/317] arm64: dts: broadcom: bcmbca: bcm4908: drop invalid switch cells Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 282/317] kconfig: fix infinite loop when expanding a macro at the end of file Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 283/317] rtc: mt6397: select IRQ_DOMAIN instead of depending on it Sasha Levin
2024-03-24 23:34   ` Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 284/317] serial: 8250_exar: Don't remove GPIO device on suspend Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 285/317] staging: greybus: fix get_channel_from_mode() failure path Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 286/317] usb: gadget: net2272: Use irqflags in the call to net2272_probe_fin Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 287/317] io_uring: don't save/restore iowait state Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 288/317] nouveau: reset the bo resource bus info after an eviction Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 289/317] octeontx2-af: Use matching wake_up API variant in CGX command interface Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 290/317] s390/vtime: fix average steal time calculation Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 291/317] soc: fsl: dpio: fix kcalloc() argument order Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 292/317] hsr: Fix uninit-value access in hsr_get_node() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 293/317] net: mtk_eth_soc: move MAC_MCR setting to mac_finish() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 294/317] net: mediatek: mtk_eth_soc: clear MAC_MCR_FORCE_LINK only when MAC is up Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 295/317] net: ethernet: mtk_eth_soc: fix PPE hanging issue Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 296/317] packet: annotate data-races around ignore_outgoing Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 297/317] net: veth: do not manipulate GRO when using XDP Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 298/317] net: dsa: mt7530: prevent possible incorrect XTAL frequency selection Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 299/317] vdpa/mlx5: Allow CVQ size changes Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 300/317] wireguard: receive: annotate data-race around receiving_counter.counter Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 301/317] rds: introduce acquire/release ordering in acquire/release_in_xmit() Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 302/317] hsr: Handle failures in module init Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 303/317] net: phy: fix phy_read_poll_timeout argument type in genphy_loopback Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 304/317] net/bnx2x: Prevent access to a freed page in page_pool Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 305/317] octeontx2-af: Use separate handlers for interrupts Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 306/317] netfilter: nft_set_pipapo: release elements in clone only from destroy path Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 307/317] netfilter: nf_tables: do not compare internal table flags on updates Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 308/317] rcu: add a helper to report consolidated flavor QS Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 309/317] net: report RCU QS on threaded NAPI repolling Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 310/317] bpf: report RCU QS in cpumap kthread Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 311/317] net: dsa: mt7530: fix handling of LLDP frames Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 312/317] net: dsa: mt7530: fix handling of 802.1X PAE frames Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 313/317] net: dsa: mt7530: fix link-local frames that ingress vlan filtering ports Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 314/317] net: dsa: mt7530: fix handling of all link-local frames Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 315/317] spi: spi-mt65xx: Fix NULL pointer access in interrupt handler Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 316/317] regmap: Add missing map->bus check Sasha Levin
2024-03-24 23:34 ` [PATCH 5.15 317/317] Linux 5.15.153-rc1 Sasha Levin
2024-03-25  5:52 ` [PATCH 5.15 000/317] 5.15.153-rc1 review Harshit Mogalapalli
2024-03-25  9:10 ` Naresh Kamboju
2024-03-25  9:28 ` Naresh Kamboju

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=20240324233458.1352854-36-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=hoeppner@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=sth@linux.ibm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.