Patch "printk: Adjust mapping for 32bit seq macros" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    printk: Adjust mapping for 32bit seq macros

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     printk-adjust-mapping-for-32bit-seq-macros.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 33ef6b549a5479c17bba23bd9a33f47321613df6
Author: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
Date:   Wed Feb 7 14:46:51 2024 +0106

    printk: Adjust mapping for 32bit seq macros
    
    [ Upstream commit 418ec1961c07d84293cc3cd54d67b90bbeba7feb ]
    
    Note: This change only applies to 32bit architectures. On 64bit
          architectures the macros are NOPs.
    
    __ulseq_to_u64seq() computes the upper 32 bits of the passed
    argument value (@ulseq). The upper bits are derived from a base
    value (@rb_next_seq) in a way that assumes @ulseq represents a
    64bit number that is less than or equal to @rb_next_seq.
    
    Until now this mapping has been correct for all call sites. However,
    in a follow-up commit, values of @ulseq will be passed in that are
    higher than the base value. This requires a change to how the 32bit
    value is mapped to a 64bit sequence number.
    
    Rather than mapping @ulseq such that the base value is the end of a
    32bit block, map @ulseq such that the base value is in the middle of
    a 32bit block. This allows supporting 31 bits before and after the
    base value, which is deemed acceptable for the console sequence
    number during runtime.
    
    Here is an example to illustrate the previous and new mappings.
    
    For a base value (@rb_next_seq) of 2 2000 0000...
    
    Before this change the range of possible return values was:
    
    1 2000 0001 to 2 2000 0000
    
    __ulseq_to_u64seq(1fff ffff) => 2 1fff ffff
    __ulseq_to_u64seq(2000 0000) => 2 2000 0000
    __ulseq_to_u64seq(2000 0001) => 1 2000 0001
    __ulseq_to_u64seq(9fff ffff) => 1 9fff ffff
    __ulseq_to_u64seq(a000 0000) => 1 a000 0000
    __ulseq_to_u64seq(a000 0001) => 1 a000 0001
    
    After this change the range of possible return values are:
    
    1 a000 0001 to 2 a000 0000
    
    __ulseq_to_u64seq(1fff ffff) => 2 1fff ffff
    __ulseq_to_u64seq(2000 0000) => 2 2000 0000
    __ulseq_to_u64seq(2000 0001) => 2 2000 0001
    __ulseq_to_u64seq(9fff ffff) => 2 9fff ffff
    __ulseq_to_u64seq(a000 0000) => 2 a000 0000
    __ulseq_to_u64seq(a000 0001) => 1 a000 0001
    
    [ john.ogness: Rewrite commit message. ]
    
    Reported-by: Francesco Dolcini <francesco@xxxxxxxxxx>
    Reported-by: kernel test robot <oliver.sang@xxxxxxxxx>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
    Signed-off-by: John Ogness <john.ogness@xxxxxxxxxxxxx>
    Reviewed-by: Petr Mladek <pmladek@xxxxxxxx>
    Link: https://lore.kernel.org/r/20240207134103.1357162-3-john.ogness@xxxxxxxxxxxxx
    Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/printk/printk_ringbuffer.h b/kernel/printk/printk_ringbuffer.h
index 5aebe97bd4afc..d729387726900 100644
--- a/kernel/printk/printk_ringbuffer.h
+++ b/kernel/printk/printk_ringbuffer.h
@@ -408,7 +408,7 @@ static inline u64 __ulseq_to_u64seq(struct printk_ringbuffer *rb, u32 ulseq)
 	 * Also the access to the ring buffer is always safe.
 	 */
 	rb_next_seq = prb_next_seq(rb);
-	seq = rb_next_seq - ((u32)rb_next_seq - ulseq);
+	seq = rb_next_seq - (s32)((u32)rb_next_seq - ulseq);
 
 	return seq;
 }




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux