commit:     ec4e6ed176fc62390cc62641acf5ad2a33517c8b
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 24 16:42:59 2024 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Jul 24 16:42:59 2024 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=ec4e6ed1

Linux patch 6.10.1

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README             |   4 +
 1001_linux-6.10.1.patch | 342 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 346 insertions(+)

diff --git a/0000_README b/0000_README
index f46d7e17..b671bc06 100644
--- a/0000_README
+++ b/0000_README
@@ -43,6 +43,10 @@ EXPERIMENTAL
 Individual Patch Descriptions:
 --------------------------------------------------------------------------
 
+Patch:  1000_linux-6.10.1.patch
+From:   https://www.kernel.org
+Desc:   Linux 6.10.1
+
 Patch:  1510_fs-enable-link-security-restrictions-by-default.patch
 From:   
http://sources.debian.net/src/linux/3.16.7-ckt4-3/debian/patches/debian/fs-enable-link-security-restrictions-by-default.patch/
 Desc:   Enable link security restrictions by default.

diff --git a/1001_linux-6.10.1.patch b/1001_linux-6.10.1.patch
new file mode 100644
index 00000000..f0878e5d
--- /dev/null
+++ b/1001_linux-6.10.1.patch
@@ -0,0 +1,342 @@
+diff --git a/Makefile b/Makefile
+index 3d10e3aadeda2..9ae12a6c0ece2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 6
+ PATCHLEVEL = 10
+-SUBLEVEL = 0
++SUBLEVEL = 1
+ EXTRAVERSION =
+ NAME = Baby Opossum Posse
+ 
+diff --git a/drivers/char/tpm/tpm2-sessions.c 
b/drivers/char/tpm/tpm2-sessions.c
+index 2281d55df5456..d3521aadd43ee 100644
+--- a/drivers/char/tpm/tpm2-sessions.c
++++ b/drivers/char/tpm/tpm2-sessions.c
+@@ -746,15 +746,16 @@ int tpm_buf_check_hmac_response(struct tpm_chip *chip, 
struct tpm_buf *buf,
+       struct tpm2_auth *auth = chip->auth;
+       off_t offset_s, offset_p;
+       u8 rphash[SHA256_DIGEST_SIZE];
+-      u32 attrs;
++      u32 attrs, cc;
+       struct sha256_state sctx;
+       u16 tag = be16_to_cpu(head->tag);
+-      u32 cc = be32_to_cpu(auth->ordinal);
+       int parm_len, len, i, handles;
+ 
+       if (!auth)
+               return rc;
+ 
++      cc = be32_to_cpu(auth->ordinal);
++
+       if (auth->session >= TPM_HEADER_SIZE) {
+               WARN(1, "tpm session not filled correctly\n");
+               goto out;
+diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c 
b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
+index 61a4638d1be2f..237cb1ef79759 100644
+--- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
++++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
+@@ -622,7 +622,12 @@ static int iwl_mvm_tzone_get_temp(struct 
thermal_zone_device *device,
+ 
+       if (!iwl_mvm_firmware_running(mvm) ||
+           mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) {
+-              ret = -ENODATA;
++              /*
++               * Tell the core that there is no valid temperature value to
++               * return, but it need not worry about this.
++               */
++              *temperature = THERMAL_TEMP_INVALID;
++              ret = 0;
+               goto out;
+       }
+ 
+diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
+index ecc748d15eb7c..4e7fec406ee59 100644
+--- a/drivers/thermal/thermal_core.c
++++ b/drivers/thermal/thermal_core.c
+@@ -300,8 +300,6 @@ static void monitor_thermal_zone(struct 
thermal_zone_device *tz)
+               thermal_zone_device_set_polling(tz, tz->passive_delay_jiffies);
+       else if (tz->polling_delay_jiffies)
+               thermal_zone_device_set_polling(tz, tz->polling_delay_jiffies);
+-      else if (tz->temperature == THERMAL_TEMP_INVALID)
+-              thermal_zone_device_set_polling(tz, 
msecs_to_jiffies(THERMAL_RECHECK_DELAY_MS));
+ }
+ 
+ static struct thermal_governor *thermal_get_tz_governor(struct 
thermal_zone_device *tz)
+@@ -382,7 +380,7 @@ static void handle_thermal_trip(struct thermal_zone_device 
*tz,
+       td->threshold = trip->temperature;
+ 
+       if (tz->last_temperature >= old_threshold &&
+-          tz->last_temperature != THERMAL_TEMP_INVALID) {
++          tz->last_temperature != THERMAL_TEMP_INIT) {
+               /*
+                * Mitigation is under way, so it needs to stop if the zone
+                * temperature falls below the low temperature of the trip.
+@@ -417,27 +415,6 @@ static void handle_thermal_trip(struct 
thermal_zone_device *tz,
+       }
+ }
+ 
+-static void update_temperature(struct thermal_zone_device *tz)
+-{
+-      int temp, ret;
+-
+-      ret = __thermal_zone_get_temp(tz, &temp);
+-      if (ret) {
+-              if (ret != -EAGAIN)
+-                      dev_warn(&tz->device,
+-                               "failed to read out thermal zone (%d)\n",
+-                               ret);
+-              return;
+-      }
+-
+-      tz->last_temperature = tz->temperature;
+-      tz->temperature = temp;
+-
+-      trace_thermal_temperature(tz);
+-
+-      thermal_genl_sampling_temp(tz->id, temp);
+-}
+-
+ static void thermal_zone_device_check(struct work_struct *work)
+ {
+       struct thermal_zone_device *tz = container_of(work, struct
+@@ -452,7 +429,7 @@ static void thermal_zone_device_init(struct 
thermal_zone_device *tz)
+ 
+       INIT_DELAYED_WORK(&tz->poll_queue, thermal_zone_device_check);
+ 
+-      tz->temperature = THERMAL_TEMP_INVALID;
++      tz->temperature = THERMAL_TEMP_INIT;
+       tz->passive = 0;
+       tz->prev_low_trip = -INT_MAX;
+       tz->prev_high_trip = INT_MAX;
+@@ -501,6 +478,7 @@ void __thermal_zone_device_update(struct 
thermal_zone_device *tz,
+       struct thermal_trip_desc *td;
+       LIST_HEAD(way_down_list);
+       LIST_HEAD(way_up_list);
++      int temp, ret;
+ 
+       if (tz->suspended)
+               return;
+@@ -508,10 +486,29 @@ void __thermal_zone_device_update(struct 
thermal_zone_device *tz,
+       if (!thermal_zone_device_is_enabled(tz))
+               return;
+ 
+-      update_temperature(tz);
++      ret = __thermal_zone_get_temp(tz, &temp);
++      if (ret) {
++              if (ret != -EAGAIN)
++                      dev_info(&tz->device, "Temperature check failed 
(%d)\n", ret);
+ 
+-      if (tz->temperature == THERMAL_TEMP_INVALID)
++              thermal_zone_device_set_polling(tz, 
msecs_to_jiffies(THERMAL_RECHECK_DELAY_MS));
++              return;
++      } else if (temp <= THERMAL_TEMP_INVALID) {
++              /*
++               * Special case: No valid temperature value is available, but
++               * the zone owner does not want the core to do anything about
++               * it.  Continue regular zone polling if needed, so that this
++               * function can be called again, but skip everything else.
++               */
+               goto monitor;
++      }
++
++      tz->last_temperature = tz->temperature;
++      tz->temperature = temp;
++
++      trace_thermal_temperature(tz);
++
++      thermal_genl_sampling_temp(tz->id, temp);
+ 
+       __thermal_zone_set_trips(tz);
+ 
+diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
+index 94eeb4011a481..5afd541d54b0b 100644
+--- a/drivers/thermal/thermal_core.h
++++ b/drivers/thermal/thermal_core.h
+@@ -133,6 +133,9 @@ struct thermal_zone_device {
+       struct thermal_trip_desc trips[] __counted_by(num_trips);
+ };
+ 
++/* Initial thermal zone temperature. */
++#define THERMAL_TEMP_INIT     INT_MIN
++
+ /*
+  * Default delay after a failing thermal zone temperature check before
+  * attempting to check it again.
+diff --git a/drivers/thermal/thermal_helpers.c 
b/drivers/thermal/thermal_helpers.c
+index d9f4e26ec1257..36f872b840ba8 100644
+--- a/drivers/thermal/thermal_helpers.c
++++ b/drivers/thermal/thermal_helpers.c
+@@ -140,6 +140,8 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, 
int *temp)
+       }
+ 
+       ret = __thermal_zone_get_temp(tz, temp);
++      if (!ret && *temp <= THERMAL_TEMP_INVALID)
++              ret = -ENODATA;
+ 
+ unlock:
+       mutex_unlock(&tz->lock);
+diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
+index 983dad8c07ecd..efed7f09876de 100644
+--- a/fs/ext4/ext4.h
++++ b/fs/ext4/ext4.h
+@@ -1347,7 +1347,7 @@ struct ext4_super_block {
+ /*60*/        __le32  s_feature_incompat;     /* incompatible feature set */
+       __le32  s_feature_ro_compat;    /* readonly-compatible feature set */
+ /*68*/        __u8    s_uuid[16];             /* 128-bit uuid for volume */
+-/*78*/        char    s_volume_name[EXT4_LABEL_MAX];  /* volume name */
++/*78*/        char    s_volume_name[EXT4_LABEL_MAX] __nonstring; /* volume 
name */
+ /*88*/        char    s_last_mounted[64] __nonstring; /* directory where last 
mounted */
+ /*C8*/        __le32  s_algorithm_usage_bitmap; /* For compression */
+       /*
+diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
+index dab7acd497092..e8bf5972dd47b 100644
+--- a/fs/ext4/ioctl.c
++++ b/fs/ext4/ioctl.c
+@@ -1151,7 +1151,7 @@ static int ext4_ioctl_getlabel(struct ext4_sb_info *sbi, 
char __user *user_label
+       BUILD_BUG_ON(EXT4_LABEL_MAX >= FSLABEL_MAX);
+ 
+       lock_buffer(sbi->s_sbh);
+-      strscpy_pad(label, sbi->s_es->s_volume_name);
++      memtostr_pad(label, sbi->s_es->s_volume_name);
+       unlock_buffer(sbi->s_sbh);
+ 
+       if (copy_to_user(user_label, label, sizeof(label)))
+diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c
+index 6397fdefd876d..c92937bed1331 100644
+--- a/fs/smb/client/cifsfs.c
++++ b/fs/smb/client/cifsfs.c
+@@ -1359,7 +1359,7 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
+       target_tcon = tlink_tcon(smb_file_target->tlink);
+ 
+       if (src_tcon->ses != target_tcon->ses) {
+-              cifs_dbg(VFS, "source and target of copy not on same server\n");
++              cifs_dbg(FYI, "source and target of copy not on same server\n");
+               goto out;
+       }
+ 
+diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c
+index 1374635e89fae..04ec1b9737a89 100644
+--- a/fs/smb/client/file.c
++++ b/fs/smb/client/file.c
+@@ -123,6 +123,11 @@ static void cifs_issue_write(struct netfs_io_subrequest 
*subreq)
+       goto out;
+ }
+ 
++static void cifs_netfs_invalidate_cache(struct netfs_io_request *wreq)
++{
++      cifs_invalidate_cache(wreq->inode, 0);
++}
++
+ /*
+  * Split the read up according to how many credits we can get for each piece.
+  * It's okay to sleep here if we need to wait for more credit to become
+@@ -307,6 +312,7 @@ const struct netfs_request_ops cifs_req_ops = {
+       .begin_writeback        = cifs_begin_writeback,
+       .prepare_write          = cifs_prepare_write,
+       .issue_write            = cifs_issue_write,
++      .invalidate_cache       = cifs_netfs_invalidate_cache,
+ };
+ 
+ /*
+@@ -2358,13 +2364,18 @@ void cifs_write_subrequest_terminated(struct 
cifs_io_subrequest *wdata, ssize_t
+                                     bool was_async)
+ {
+       struct netfs_io_request *wreq = wdata->rreq;
+-      loff_t new_server_eof;
++      struct netfs_inode *ictx = netfs_inode(wreq->inode);
++      loff_t wrend;
+ 
+       if (result > 0) {
+-              new_server_eof = wdata->subreq.start + 
wdata->subreq.transferred + result;
++              wrend = wdata->subreq.start + wdata->subreq.transferred + 
result;
+ 
+-              if (new_server_eof > netfs_inode(wreq->inode)->remote_i_size)
+-                      netfs_resize_file(netfs_inode(wreq->inode), 
new_server_eof, true);
++              if (wrend > ictx->zero_point &&
++                  (wdata->rreq->origin == NETFS_UNBUFFERED_WRITE ||
++                   wdata->rreq->origin == NETFS_DIO_WRITE))
++                      ictx->zero_point = wrend;
++              if (wrend > ictx->remote_i_size)
++                      netfs_resize_file(ictx, wrend, true);
+       }
+ 
+       netfs_write_subrequest_terminated(&wdata->subreq, result, was_async);
+@@ -2877,6 +2888,7 @@ cifs_strict_readv(struct kiocb *iocb, struct iov_iter 
*to)
+               rc = netfs_start_io_direct(inode);
+               if (rc < 0)
+                       goto out;
++              rc = -EACCES;
+               down_read(&cinode->lock_sem);
+               if (!cifs_find_lock_conflict(
+                           cfile, iocb->ki_pos, iov_iter_count(to),
+@@ -2889,6 +2901,7 @@ cifs_strict_readv(struct kiocb *iocb, struct iov_iter 
*to)
+               rc = netfs_start_io_read(inode);
+               if (rc < 0)
+                       goto out;
++              rc = -EACCES;
+               down_read(&cinode->lock_sem);
+               if (!cifs_find_lock_conflict(
+                           cfile, iocb->ki_pos, iov_iter_count(to),
+diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
+index 2ae2dbb6202b3..bb84a89e59059 100644
+--- a/fs/smb/client/smb2pdu.c
++++ b/fs/smb/client/smb2pdu.c
+@@ -4859,9 +4859,6 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
+       struct cifs_io_parms *io_parms = NULL;
+       int credit_request;
+ 
+-      if (!wdata->server || test_bit(NETFS_SREQ_RETRYING, 
&wdata->subreq.flags))
+-              server = wdata->server = cifs_pick_channel(tcon->ses);
+-
+       /*
+        * in future we may get cifs_io_parms passed in from the caller,
+        * but for now we construct it here...
+diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h
+index 1a3c6f66f6205..dc627ebf01df8 100644
+--- a/include/sound/cs35l56.h
++++ b/include/sound/cs35l56.h
+@@ -209,7 +209,7 @@
+ 
+ /* CS35L56_MAIN_RENDER_USER_VOLUME */
+ #define CS35L56_MAIN_RENDER_USER_VOLUME_MIN           -400
+-#define CS35L56_MAIN_RENDER_USER_VOLUME_MAX           400
++#define CS35L56_MAIN_RENDER_USER_VOLUME_MAX           48
+ #define CS35L56_MAIN_RENDER_USER_VOLUME_MASK          0x0000FFC0
+ #define CS35L56_MAIN_RENDER_USER_VOLUME_SHIFT         6
+ #define CS35L56_MAIN_RENDER_USER_VOLUME_SIGNBIT               9
+diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c
+index d2945c9c812b5..c95dc1736dd93 100644
+--- a/io_uring/kbuf.c
++++ b/io_uring/kbuf.c
+@@ -657,8 +657,10 @@ static int io_alloc_pbuf_ring(struct io_ring_ctx *ctx,
+       ring_size = reg->ring_entries * sizeof(struct io_uring_buf_ring);
+ 
+       bl->buf_ring = io_pages_map(&bl->buf_pages, &bl->buf_nr_pages, 
ring_size);
+-      if (!bl->buf_ring)
++      if (IS_ERR(bl->buf_ring)) {
++              bl->buf_ring = NULL;
+               return -ENOMEM;
++      }
+ 
+       bl->is_buf_ring = 1;
+       bl->is_mmap = 1;
+diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
+index 758dfdf9d3eac..7f2f2f8c13fae 100644
+--- a/sound/soc/codecs/cs35l56.c
++++ b/sound/soc/codecs/cs35l56.c
+@@ -196,7 +196,11 @@ static const struct snd_kcontrol_new cs35l56_controls[] = 
{
+                      cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw),
+       SOC_SINGLE_S_EXT_TLV("Speaker Volume",
+                            CS35L56_MAIN_RENDER_USER_VOLUME,
+-                           6, -400, 400, 9, 0,
++                           CS35L56_MAIN_RENDER_USER_VOLUME_SHIFT,
++                           CS35L56_MAIN_RENDER_USER_VOLUME_MIN,
++                           CS35L56_MAIN_RENDER_USER_VOLUME_MAX,
++                           CS35L56_MAIN_RENDER_USER_VOLUME_SIGNBIT,
++                           0,
+                            cs35l56_dspwait_get_volsw,
+                            cs35l56_dspwait_put_volsw,
+                            vol_tlv),

Reply via email to