From: Greg Kroah-Hartman Date: Mon, 8 Nov 2021 07:09:58 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v4.4.292~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e165477929f6c3aecf7fb391ef95b89d90eda4b3;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: block-introduce-multi-page-bvec-helpers.patch revert-x86-kvm-fix-vcpu-id-indexed-array-sizes.patch usb-ehci-handshake-cmd_run-instead-of-sts_halt.patch --- diff --git a/queue-4.19/block-introduce-multi-page-bvec-helpers.patch b/queue-4.19/block-introduce-multi-page-bvec-helpers.patch new file mode 100644 index 00000000000..6377e92c24b --- /dev/null +++ b/queue-4.19/block-introduce-multi-page-bvec-helpers.patch @@ -0,0 +1,113 @@ +From 3d75ca0adef4280650c6690a0c4702a74a6f3c95 Mon Sep 17 00:00:00 2001 +From: Ming Lei +Date: Fri, 15 Feb 2019 19:13:10 +0800 +Subject: block: introduce multi-page bvec helpers + +From: Ming Lei + +commit 3d75ca0adef4280650c6690a0c4702a74a6f3c95 upstream. + +This patch introduces helpers of 'mp_bvec_iter_*' for multi-page bvec +support. + +The introduced helpers treate one bvec as real multi-page segment, +which may include more than one pages. + +The existed helpers of bvec_iter_* are interfaces for supporting current +bvec iterator which is thought as single-page by drivers, fs, dm and +etc. These introduced helpers will build single-page bvec in flight, so +this way won't break current bio/bvec users, which needn't any change. + +Follows some multi-page bvec background: + +- bvecs stored in bio->bi_io_vec is always multi-page style + +- bvec(struct bio_vec) represents one physically contiguous I/O + buffer, now the buffer may include more than one page after + multi-page bvec is supported, and all these pages represented + by one bvec is physically contiguous. Before multi-page bvec + support, at most one page is included in one bvec, we call it + single-page bvec. + +- .bv_page of the bvec points to the 1st page in the multi-page bvec + +- .bv_offset of the bvec is the offset of the buffer in the bvec + +The effect on the current drivers/filesystem/dm/bcache/...: + +- almost everyone supposes that one bvec only includes one single + page, so we keep the sp interface not changed, for example, + bio_for_each_segment() still returns single-page bvec + +- bio_for_each_segment_all() will return single-page bvec too + +- during iterating, iterator variable(struct bvec_iter) is always + updated in multi-page bvec style, and bvec_iter_advance() is kept + not changed + +- returned(copied) single-page bvec is built in flight by bvec + helpers from the stored multi-page bvec + +Reviewed-by: Christoph Hellwig +Reviewed-by: Omar Sandoval +Signed-off-by: Ming Lei +Signed-off-by: Jens Axboe +Cc: Zubin Mithra +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/bvec.h | 30 +++++++++++++++++++++++++++--- + 1 file changed, 27 insertions(+), 3 deletions(-) + +--- a/include/linux/bvec.h ++++ b/include/linux/bvec.h +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + /* + * was unsigned short, but we might as well be ready for > 64kB I/O pages +@@ -52,16 +53,39 @@ struct bvec_iter { + */ + #define __bvec_iter_bvec(bvec, iter) (&(bvec)[(iter).bi_idx]) + +-#define bvec_iter_page(bvec, iter) \ ++/* multi-page (mp_bvec) helpers */ ++#define mp_bvec_iter_page(bvec, iter) \ + (__bvec_iter_bvec((bvec), (iter))->bv_page) + +-#define bvec_iter_len(bvec, iter) \ ++#define mp_bvec_iter_len(bvec, iter) \ + min((iter).bi_size, \ + __bvec_iter_bvec((bvec), (iter))->bv_len - (iter).bi_bvec_done) + +-#define bvec_iter_offset(bvec, iter) \ ++#define mp_bvec_iter_offset(bvec, iter) \ + (__bvec_iter_bvec((bvec), (iter))->bv_offset + (iter).bi_bvec_done) + ++#define mp_bvec_iter_page_idx(bvec, iter) \ ++ (mp_bvec_iter_offset((bvec), (iter)) / PAGE_SIZE) ++ ++#define mp_bvec_iter_bvec(bvec, iter) \ ++((struct bio_vec) { \ ++ .bv_page = mp_bvec_iter_page((bvec), (iter)), \ ++ .bv_len = mp_bvec_iter_len((bvec), (iter)), \ ++ .bv_offset = mp_bvec_iter_offset((bvec), (iter)), \ ++}) ++ ++/* For building single-page bvec in flight */ ++ #define bvec_iter_offset(bvec, iter) \ ++ (mp_bvec_iter_offset((bvec), (iter)) % PAGE_SIZE) ++ ++#define bvec_iter_len(bvec, iter) \ ++ min_t(unsigned, mp_bvec_iter_len((bvec), (iter)), \ ++ PAGE_SIZE - bvec_iter_offset((bvec), (iter))) ++ ++#define bvec_iter_page(bvec, iter) \ ++ nth_page(mp_bvec_iter_page((bvec), (iter)), \ ++ mp_bvec_iter_page_idx((bvec), (iter))) ++ + #define bvec_iter_bvec(bvec, iter) \ + ((struct bio_vec) { \ + .bv_page = bvec_iter_page((bvec), (iter)), \ diff --git a/queue-4.19/revert-x86-kvm-fix-vcpu-id-indexed-array-sizes.patch b/queue-4.19/revert-x86-kvm-fix-vcpu-id-indexed-array-sizes.patch new file mode 100644 index 00000000000..2b045209b45 --- /dev/null +++ b/queue-4.19/revert-x86-kvm-fix-vcpu-id-indexed-array-sizes.patch @@ -0,0 +1,55 @@ +From 1e254d0d86a0f2efd4190a89d5204b37c18c6381 Mon Sep 17 00:00:00 2001 +From: Juergen Gross +Date: Mon, 13 Sep 2021 15:57:43 +0200 +Subject: Revert "x86/kvm: fix vcpu-id indexed array sizes" + +From: Juergen Gross + +commit 1e254d0d86a0f2efd4190a89d5204b37c18c6381 upstream. + +This reverts commit 76b4f357d0e7d8f6f0013c733e6cba1773c266d3. + +The commit has the wrong reasoning, as KVM_MAX_VCPU_ID is not defining the +maximum allowed vcpu-id as its name suggests, but the number of vcpu-ids. +So revert this patch again. + +Suggested-by: Eduardo Habkost +Signed-off-by: Juergen Gross +Signed-off-by: Paolo Bonzini +Message-Id: <20210913135745.13944-2-jgross@suse.com> +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kvm/ioapic.c | 2 +- + arch/x86/kvm/ioapic.h | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--- a/arch/x86/kvm/ioapic.c ++++ b/arch/x86/kvm/ioapic.c +@@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirec + static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic) + { + ioapic->rtc_status.pending_eoi = 0; +- bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1); ++ bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID); + } + + static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic); +--- a/arch/x86/kvm/ioapic.h ++++ b/arch/x86/kvm/ioapic.h +@@ -43,13 +43,13 @@ struct kvm_vcpu; + + struct dest_map { + /* vcpu bitmap where IRQ has been sent */ +- DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1); ++ DECLARE_BITMAP(map, KVM_MAX_VCPU_ID); + + /* + * Vector sent to a given vcpu, only valid when + * the vcpu's bit in map is set + */ +- u8 vectors[KVM_MAX_VCPU_ID + 1]; ++ u8 vectors[KVM_MAX_VCPU_ID]; + }; + + diff --git a/queue-4.19/series b/queue-4.19/series new file mode 100644 index 00000000000..471f552a6a9 --- /dev/null +++ b/queue-4.19/series @@ -0,0 +1,3 @@ +block-introduce-multi-page-bvec-helpers.patch +revert-x86-kvm-fix-vcpu-id-indexed-array-sizes.patch +usb-ehci-handshake-cmd_run-instead-of-sts_halt.patch diff --git a/queue-4.19/usb-ehci-handshake-cmd_run-instead-of-sts_halt.patch b/queue-4.19/usb-ehci-handshake-cmd_run-instead-of-sts_halt.patch new file mode 100644 index 00000000000..deabe6e7b7e --- /dev/null +++ b/queue-4.19/usb-ehci-handshake-cmd_run-instead-of-sts_halt.patch @@ -0,0 +1,71 @@ +From 7f2d73788d9067fd4f677ac5f60ffd25945af7af Mon Sep 17 00:00:00 2001 +From: Neal Liu +Date: Fri, 10 Sep 2021 15:36:19 +0800 +Subject: usb: ehci: handshake CMD_RUN instead of STS_HALT + +From: Neal Liu + +commit 7f2d73788d9067fd4f677ac5f60ffd25945af7af upstream. + +For Aspeed, HCHalted status depends on not only Run/Stop but also +ASS/PSS status. +Handshake CMD_RUN on startup instead. + +Tested-by: Tao Ren +Reviewed-by: Tao Ren +Acked-by: Alan Stern +Signed-off-by: Neal Liu +Link: https://lore.kernel.org/r/20210910073619.26095-1-neal_liu@aspeedtech.com +Cc: Joel Stanley +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/ehci-hcd.c | 11 ++++++++++- + drivers/usb/host/ehci-platform.c | 6 ++++++ + drivers/usb/host/ehci.h | 1 + + 3 files changed, 17 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/ehci-hcd.c ++++ b/drivers/usb/host/ehci-hcd.c +@@ -634,7 +634,16 @@ static int ehci_run (struct usb_hcd *hcd + /* Wait until HC become operational */ + ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */ + msleep(5); +- rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, 0, 100 * 1000); ++ ++ /* For Aspeed, STS_HALT also depends on ASS/PSS status. ++ * Check CMD_RUN instead. ++ */ ++ if (ehci->is_aspeed) ++ rc = ehci_handshake(ehci, &ehci->regs->command, CMD_RUN, ++ 1, 100 * 1000); ++ else ++ rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, ++ 0, 100 * 1000); + + up_write(&ehci_cf_port_reset_rwsem); + +--- a/drivers/usb/host/ehci-platform.c ++++ b/drivers/usb/host/ehci-platform.c +@@ -288,6 +288,12 @@ static int ehci_platform_probe(struct pl + "has-transaction-translator")) + hcd->has_tt = 1; + ++ if (of_device_is_compatible(dev->dev.of_node, ++ "aspeed,ast2500-ehci") || ++ of_device_is_compatible(dev->dev.of_node, ++ "aspeed,ast2600-ehci")) ++ ehci->is_aspeed = 1; ++ + if (soc_device_match(quirk_poll_match)) + priv->quirk_poll = true; + +--- a/drivers/usb/host/ehci.h ++++ b/drivers/usb/host/ehci.h +@@ -218,6 +218,7 @@ struct ehci_hcd { /* one per controlle + unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ + unsigned need_oc_pp_cycle:1; /* MPC834X port power */ + unsigned imx28_write_fix:1; /* For Freescale i.MX28 */ ++ unsigned is_aspeed:1; + + /* required for usb32 quirk */ + #define OHCI_CTRL_HCFS (3 << 6)