* [PATCH 21/24] powerpc: Separate kernel/userspace inclusion of <asm-generic/int-ll64.h>
From: Geert Uytterhoeven @ 2013-11-25 8:55 UTC (permalink / raw)
To: Arnd Bergmann, linux-arch
Cc: linuxppc-dev, Geert Uytterhoeven, linux-kernel, Paul Mackerras
In-Reply-To: <1385369734-24893-1-git-send-email-geert@linux-m68k.org>
This allows to rename the kernelspace version later.
Now arch/powerpc/include/asm/types.h includes the kernelspace version,
while arch/powerpc/include/uapi/asm/types.h includes the userspace version.
As arch/powerpc/include/uapi/asm/types.h is also included for kernelspace,
its inclusion of <asm-generic/int-ll64.h> needs to be protected by #ifndef
__KERNEL__.
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: linuxppc-dev@lists.ozlabs.org
---
arch/powerpc/include/asm/types.h | 1 +
arch/powerpc/include/uapi/asm/types.h | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index bfb6ded38ffa..4b9c3530bb12 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -13,6 +13,7 @@
#ifndef _ASM_POWERPC_TYPES_H
#define _ASM_POWERPC_TYPES_H
+#include <asm-generic/int-ll64.h>
#include <uapi/asm/types.h>
#ifndef __ASSEMBLY__
diff --git a/arch/powerpc/include/uapi/asm/types.h b/arch/powerpc/include/uapi/asm/types.h
index 4b8ab990a3c1..7f8847b61d03 100644
--- a/arch/powerpc/include/uapi/asm/types.h
+++ b/arch/powerpc/include/uapi/asm/types.h
@@ -21,11 +21,13 @@
* However, some user programs are fine with this. They can
* flag __SANE_USERSPACE_TYPES__ to get int-ll64.h here.
*/
-#if !defined(__SANE_USERSPACE_TYPES__) && defined(__powerpc64__) && !defined(__KERNEL__)
+#ifndef __KERNEL__
+#if !defined(__SANE_USERSPACE_TYPES__) && defined(__powerpc64__)
# include <asm-generic/int-l64.h>
#else
# include <asm-generic/int-ll64.h>
#endif
+#endif
#ifndef __ASSEMBLY__
--
1.7.9.5
^ permalink raw reply related
* [PATCH 24/24] asm-generic: Rename int-ll64.h to types.h
From: Geert Uytterhoeven @ 2013-11-25 8:55 UTC (permalink / raw)
To: Arnd Bergmann, linux-arch
Cc: linux-mips, linux-ia64, linux-s390, linux-xtensa, linux-sh,
linux-kernel, linux-kbuild, Geert Uytterhoeven, linux-alpha,
linuxppc-dev, linux-arm-kernel
In-Reply-To: <1385369734-24893-1-git-send-email-geert@linux-m68k.org>
Since kernelspace always uses "(unsigned) long long" for 64-bit integer
values ("u64" and "s64"), rename include/asm-generic/int-ll64.h to
include/asm-generic/types.h, as suggested by Arnd Bergmann.
Userspace still has both include/uapi/asm-generic/int-l64.h and
include/uapi/asm-generic/int-ll64.h, as int-l64.h may still be used for
userspace on existing 64-bit platforms (alpha, ia64, mips, and powerpc).
Note: While arch/alpha/include/asm/types.h just includes
asm-generic/types.h, don't be tempted to use Kbuild logic to provide it!
arch/*/include/asm/Kbuild applies to both arch/*/include/asm and
arch/*/include/uapi/asm, while alpha has its own <uapi/asm/types.h>.
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-alpha@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Cc: linux-kbuild@vger.kernel.org
---
Question: Is the arch/*/include/asm/Kbuild behavior intentional?
arch/alpha/include/asm/types.h | 2 +-
arch/arm/include/asm/types.h | 2 +-
arch/ia64/include/asm/types.h | 2 +-
arch/mips/include/asm/types.h | 2 +-
arch/powerpc/include/asm/types.h | 2 +-
arch/s390/include/asm/types.h | 2 +-
arch/sh/include/asm/types.h | 2 +-
arch/xtensa/include/asm/types.h | 2 +-
include/asm-generic/io-64-nonatomic-hi-lo.h | 2 +-
include/asm-generic/io-64-nonatomic-lo-hi.h | 2 +-
include/asm-generic/{int-ll64.h => types.h} | 8 ++++----
11 files changed, 14 insertions(+), 14 deletions(-)
rename include/asm-generic/{int-ll64.h => types.h} (85%)
diff --git a/arch/alpha/include/asm/types.h b/arch/alpha/include/asm/types.h
index 4cb4b6d3452c..b86fb65c5b10 100644
--- a/arch/alpha/include/asm/types.h
+++ b/arch/alpha/include/asm/types.h
@@ -1,6 +1,6 @@
#ifndef _ALPHA_TYPES_H
#define _ALPHA_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#endif /* _ALPHA_TYPES_H */
diff --git a/arch/arm/include/asm/types.h b/arch/arm/include/asm/types.h
index a53cdb8f068c..09e15a8a40b1 100644
--- a/arch/arm/include/asm/types.h
+++ b/arch/arm/include/asm/types.h
@@ -1,7 +1,7 @@
#ifndef _ASM_TYPES_H
#define _ASM_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
/*
* The C99 types uintXX_t that are usually defined in 'stdint.h' are not as
diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
index 4c351b169da2..6bc2e8acadd7 100644
--- a/arch/ia64/include/asm/types.h
+++ b/arch/ia64/include/asm/types.h
@@ -13,7 +13,7 @@
#ifndef _ASM_IA64_TYPES_H
#define _ASM_IA64_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#include <uapi/asm/types.h>
#ifdef __ASSEMBLY__
diff --git a/arch/mips/include/asm/types.h b/arch/mips/include/asm/types.h
index 4d5ce4c9c924..0d6729329a6a 100644
--- a/arch/mips/include/asm/types.h
+++ b/arch/mips/include/asm/types.h
@@ -11,7 +11,7 @@
#ifndef _ASM_TYPES_H
#define _ASM_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
/*
* These aren't exported outside the kernel to avoid name space clashes
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index 4b9c3530bb12..69d42a918e0e 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -13,7 +13,7 @@
#ifndef _ASM_POWERPC_TYPES_H
#define _ASM_POWERPC_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#include <uapi/asm/types.h>
#ifndef __ASSEMBLY__
diff --git a/arch/s390/include/asm/types.h b/arch/s390/include/asm/types.h
index a5c7e829dbc3..abb93c7f0125 100644
--- a/arch/s390/include/asm/types.h
+++ b/arch/s390/include/asm/types.h
@@ -6,7 +6,7 @@
#ifndef _S390_TYPES_H
#define _S390_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#include <uapi/asm/types.h>
/*
diff --git a/arch/sh/include/asm/types.h b/arch/sh/include/asm/types.h
index 062324be5cd6..ef745dcfd926 100644
--- a/arch/sh/include/asm/types.h
+++ b/arch/sh/include/asm/types.h
@@ -1,7 +1,7 @@
#ifndef __ASM_SH_TYPES_H
#define __ASM_SH_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
/*
* These aren't exported outside the kernel to avoid name space clashes
diff --git a/arch/xtensa/include/asm/types.h b/arch/xtensa/include/asm/types.h
index d873cb17d944..20ffdf440e4f 100644
--- a/arch/xtensa/include/asm/types.h
+++ b/arch/xtensa/include/asm/types.h
@@ -10,7 +10,7 @@
#ifndef _XTENSA_TYPES_H
#define _XTENSA_TYPES_H
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#include <uapi/asm/types.h>
#endif /* _XTENSA_TYPES_H */
diff --git a/include/asm-generic/io-64-nonatomic-hi-lo.h b/include/asm-generic/io-64-nonatomic-hi-lo.h
index a6806a94250d..414d2c49d53c 100644
--- a/include/asm-generic/io-64-nonatomic-hi-lo.h
+++ b/include/asm-generic/io-64-nonatomic-hi-lo.h
@@ -2,7 +2,7 @@
#define _ASM_IO_64_NONATOMIC_HI_LO_H_
#include <linux/io.h>
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#ifndef readq
static inline __u64 readq(const volatile void __iomem *addr)
diff --git a/include/asm-generic/io-64-nonatomic-lo-hi.h b/include/asm-generic/io-64-nonatomic-lo-hi.h
index ca546b1ff8b5..9bc5a3393ca1 100644
--- a/include/asm-generic/io-64-nonatomic-lo-hi.h
+++ b/include/asm-generic/io-64-nonatomic-lo-hi.h
@@ -2,7 +2,7 @@
#define _ASM_IO_64_NONATOMIC_LO_HI_H_
#include <linux/io.h>
-#include <asm-generic/int-ll64.h>
+#include <asm-generic/types.h>
#ifndef readq
static inline __u64 readq(const volatile void __iomem *addr)
diff --git a/include/asm-generic/int-ll64.h b/include/asm-generic/types.h
similarity index 85%
rename from include/asm-generic/int-ll64.h
rename to include/asm-generic/types.h
index 4cd84855cb46..b9542bb3d991 100644
--- a/include/asm-generic/int-ll64.h
+++ b/include/asm-generic/types.h
@@ -1,11 +1,11 @@
/*
- * asm-generic/int-ll64.h
+ * asm-generic/types.h
*
* Integer declarations for architectures which use "long long"
* for 64-bit types.
*/
-#ifndef _ASM_GENERIC_INT_LL64_H
-#define _ASM_GENERIC_INT_LL64_H
+#ifndef _ASM_GENERIC_TYPES_H
+#define _ASM_GENERIC_TYPES_H
#include <uapi/asm-generic/int-ll64.h>
@@ -46,4 +46,4 @@ typedef unsigned long long u64;
#endif /* __ASSEMBLY__ */
-#endif /* _ASM_GENERIC_INT_LL64_H */
+#endif /* _ASM_GENERIC_TYPES_H */
--
1.7.9.5
^ permalink raw reply related
* [PATCH] powerpc/dts/virtex440: declare address/size-cells for phy device
From: Ian Campbell @ 2013-11-25 9:42 UTC (permalink / raw)
To: linuxppc-dev
Cc: devicetree, Ian Campbell, linux-kernel, Paul Mackerras,
Gernot Vormayr
This fixes a warning:
DTC arch/powerpc/boot/virtex440-ml507.dtb
Warning (reg_format): "reg" property in /plb@0/xps-ll-temac@81c00000/ethernet@81c00000/phy@7 has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
Warning (avoid_default_addr_size): Relying on default #address-cells value for /plb@0/xps-ll-temac@81c00000/ethernet@81c00000/phy@7
Warning (avoid_default_addr_size): Relying on default #size-cells value for /plb@0/xps-ll-temac@81c00000/ethernet@81c00000/phy@7
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Gernot Vormayr <gvormayr@gmail.com>
Cc: devicetree@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org
---
No reply since June. http://patchwork.ozlabs.org/patch/248235/
---
arch/powerpc/boot/dts/virtex440-ml507.dts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/powerpc/boot/dts/virtex440-ml507.dts b/arch/powerpc/boot/dts/virtex440-ml507.dts
index fc7073b..391a4e2 100644
--- a/arch/powerpc/boot/dts/virtex440-ml507.dts
+++ b/arch/powerpc/boot/dts/virtex440-ml507.dts
@@ -257,6 +257,8 @@
#size-cells = <1>;
compatible = "xlnx,compound";
ethernet@81c00000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
compatible = "xlnx,xps-ll-temac-1.01.b";
device_type = "network";
interrupt-parent = <&xps_intc_0>;
--
1.7.10.4
^ permalink raw reply related
* [PATCH] powerpc/4xx: Fix warning in kilauea.dtb
From: Ian Campbell @ 2013-11-25 9:40 UTC (permalink / raw)
To: linuxppc-dev
Cc: open list:OPEN FIRMWARE AND..., Ian Campbell, Tirumala R Marri,
Rupjyoti Sarmah, linux-kernel, Paul Mackerras
Currently I see:
DTC arch/powerpc/boot/kilauea.dtb
Warning (reg_format): "reg" property in /plb/ppc4xx-msi@C10000000 has invalid length (12 bytes) (#address-cells == 1, #size-cells == 1)
It appears that unlike the other platforms handled by 3fb7933850fa
"powerpc/4xx: Adding PCIe MSI support" this platform does not use address-cells=2.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Josh Boyer <jwboyer@gmail.com>
Cc: Rupjyoti Sarmah <rsarmah@apm.com>
Cc: Tirumala R Marri <tmarri@apm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND...)
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org
---
Resending, this hasn't been picked up since June
http://patchwork.ozlabs.org/patch/248234/
---
arch/powerpc/boot/dts/kilauea.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
index 1613d6e..5ba7f01 100644
--- a/arch/powerpc/boot/dts/kilauea.dts
+++ b/arch/powerpc/boot/dts/kilauea.dts
@@ -406,7 +406,7 @@
MSI: ppc4xx-msi@C10000000 {
compatible = "amcc,ppc4xx-msi", "ppc4xx-msi";
- reg = < 0x0 0xEF620000 0x100>;
+ reg = <0xEF620000 0x100>;
sdr-base = <0x4B0>;
msi-data = <0x00000000>;
msi-mask = <0x44440000>;
--
1.7.10.4
^ permalink raw reply related
* Re: [PATCH] powerpc/4xx: Fix warning in kilauea.dtb
From: Josh Boyer @ 2013-11-25 12:47 UTC (permalink / raw)
To: Ian Campbell, Benjamin Herrenschmidt
Cc: open list:OPEN FIRMWARE AND..., Tirumala R Marri, Rupjyoti Sarmah,
Linux-Kernel@Vger. Kernel. Org, Paul Mackerras, linuxppc-dev
In-Reply-To: <1385372437-20958-1-git-send-email-ian.campbell@citrix.com>
On Mon, Nov 25, 2013 at 4:40 AM, Ian Campbell <ian.campbell@citrix.com> wrote:
> Currently I see:
> DTC arch/powerpc/boot/kilauea.dtb
> Warning (reg_format): "reg" property in /plb/ppc4xx-msi@C10000000 has invalid length (12 bytes) (#address-cells == 1, #size-cells == 1)
>
> It appears that unlike the other platforms handled by 3fb7933850fa
> "powerpc/4xx: Adding PCIe MSI support" this platform does not use address-cells=2.
>
> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
> Acked-by: Josh Boyer <jwboyer@gmail.com>
> Cc: Rupjyoti Sarmah <rsarmah@apm.com>
> Cc: Tirumala R Marri <tmarri@apm.com>
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND...)
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: linux-kernel@vger.kernel.org
> ---
> Resending, this hasn't been picked up since June
> http://patchwork.ozlabs.org/patch/248234/
Ben, please pick this up.
josh
> ---
> arch/powerpc/boot/dts/kilauea.dts | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
> index 1613d6e..5ba7f01 100644
> --- a/arch/powerpc/boot/dts/kilauea.dts
> +++ b/arch/powerpc/boot/dts/kilauea.dts
> @@ -406,7 +406,7 @@
>
> MSI: ppc4xx-msi@C10000000 {
> compatible = "amcc,ppc4xx-msi", "ppc4xx-msi";
> - reg = < 0x0 0xEF620000 0x100>;
> + reg = <0xEF620000 0x100>;
> sdr-base = <0x4B0>;
> msi-data = <0x00000000>;
> msi-mask = <0x44440000>;
> --
> 1.7.10.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply
* [PATCH v2 08/11] powerpc: use generic fixmap.h
From: Mark Salter @ 2013-11-25 16:14 UTC (permalink / raw)
To: linux-kernel; +Cc: Paul Mackerras, linuxppc-dev, Mark Salter
In-Reply-To: <1385396045-15852-1-git-send-email-msalter@redhat.com>
Signed-off-by: Mark Salter <msalter@redhat.com>
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Paul Mackerras <paulus@samba.org>
CC: linuxppc-dev@lists.ozlabs.org
---
arch/powerpc/include/asm/fixmap.h | 44 ++-------------------------------------
1 file changed, 2 insertions(+), 42 deletions(-)
diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h
index 5c2c023..90f604b 100644
--- a/arch/powerpc/include/asm/fixmap.h
+++ b/arch/powerpc/include/asm/fixmap.h
@@ -58,52 +58,12 @@ enum fixed_addresses {
extern void __set_fixmap (enum fixed_addresses idx,
phys_addr_t phys, pgprot_t flags);
-#define set_fixmap(idx, phys) \
- __set_fixmap(idx, phys, PAGE_KERNEL)
-/*
- * Some hardware wants to get fixmapped without caching.
- */
-#define set_fixmap_nocache(idx, phys) \
- __set_fixmap(idx, phys, PAGE_KERNEL_NCG)
-
-#define clear_fixmap(idx) \
- __set_fixmap(idx, 0, __pgprot(0))
-
#define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
#define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE)
-#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT))
-#define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT)
-
-extern void __this_fixmap_does_not_exist(void);
-
-/*
- * 'index to address' translation. If anyone tries to use the idx
- * directly without tranlation, we catch the bug with a NULL-deference
- * kernel oops. Illegal ranges of incoming indices are caught too.
- */
-static __always_inline unsigned long fix_to_virt(const unsigned int idx)
-{
- /*
- * this branch gets completely eliminated after inlining,
- * except when someone tries to use fixaddr indices in an
- * illegal way. (such as mixing up address types or using
- * out-of-range indices).
- *
- * If it doesn't get removed, the linker will complain
- * loudly with a reasonably clear error message..
- */
- if (idx >= __end_of_fixed_addresses)
- __this_fixmap_does_not_exist();
-
- return __fix_to_virt(idx);
-}
+#define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NCG
-static inline unsigned long virt_to_fix(const unsigned long vaddr)
-{
- BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
- return __virt_to_fix(vaddr);
-}
+#include <asm-generic/fixmap.h>
#endif /* !__ASSEMBLY__ */
#endif
--
1.8.3.1
^ permalink raw reply related
* [PATCH v2 00/11] Consolidate asm/fixmap.h files
From: Mark Salter @ 2013-11-25 16:13 UTC (permalink / raw)
To: linux-kernel
Cc: linux-arch, linux-mips, Michal Simek, James Hogan, Russell King,
Arnd Bergmann, linux-hexagon, microblaze-uclinux, Ralf Baechle,
Richard Kuo, Mark Salter, Paul Mackerras, linuxppc-dev,
linux-metag, linux-arm-kernel
Many architectures provide an asm/fixmap.h which defines support for
compile-time 'special' virtual mappings which need to be made before
paging_init() has run. This suport is also used for early ioremap
on x86. Much of this support is identical across the architectures.
This patch consolidates all of the common bits into asm-generic/fixmap.h
which is intended to be included from arch/*/include/asm/fixmap.h.
This has been compiled on x86, arm, powerpc, and sh, but tested
on x86 only.
This is version two of the patch series:
git://github.com/mosalter/linux.git#fixmap-v2
Version 1 is here:
git://github.com/mosalter/linux.git#fixmap
Changes from v1:
* Added acks from feedback.
* Use BUILD_BUG_ON in fix_to_virt()
* Fixed ARM patch to make FIXMAP_TOP inclusive of fixmap
range as is the case in the other architectures.
Mark Salter (11):
Add generic fixmap.h
x86: use generic fixmap.h
arm: use generic fixmap.h
hexagon: use generic fixmap.h
metag: use generic fixmap.h
microblaze: use generic fixmap.h
mips: use generic fixmap.h
powerpc: use generic fixmap.h
sh: use generic fixmap.h
tile: use generic fixmap.h
um: use generic fixmap.h
arch/arm/include/asm/fixmap.h | 29 +++--------
arch/arm/mm/init.c | 2 +-
arch/hexagon/include/asm/fixmap.h | 40 +--------------
arch/metag/include/asm/fixmap.h | 32 +-----------
arch/microblaze/include/asm/fixmap.h | 44 +---------------
arch/mips/include/asm/fixmap.h | 33 +-----------
arch/powerpc/include/asm/fixmap.h | 44 +---------------
arch/sh/include/asm/fixmap.h | 39 +--------------
arch/tile/include/asm/fixmap.h | 33 +-----------
arch/um/include/asm/fixmap.h | 40 +--------------
arch/x86/include/asm/fixmap.h | 59 +---------------------
include/asm-generic/fixmap.h | 97 ++++++++++++++++++++++++++++++++++++
12 files changed, 118 insertions(+), 374 deletions(-)
create mode 100644 include/asm-generic/fixmap.h
--
1.8.3.1
^ permalink raw reply
* [PATCH v2 01/11] Add generic fixmap.h
From: Mark Salter @ 2013-11-25 16:13 UTC (permalink / raw)
To: linux-kernel
Cc: linux-arch, linux-mips, Michal Simek, James Hogan, Russell King,
linux-hexagon, microblaze-uclinux, Richard Kuo, Mark Salter,
Paul Mackerras, linuxppc-dev, linux-metag, linux-arm-kernel
In-Reply-To: <1385396045-15852-1-git-send-email-msalter@redhat.com>
Many architectures provide an asm/fixmap.h which defines support for
compile-time 'special' virtual mappings which need to be made before
paging_init() has run. This support is also used for early ioremap
on x86. Much of this support is identical across the architectures.
This patch consolidates all of the common bits into asm-generic/fixmap.h
which is intended to be included from arch/*/include/asm/fixmap.h.
Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
CC: linux-arch@vger.kernel.org
CC: Russell King <linux@arm.linux.org.uk>
CC: linux-arm-kernel@lists.infradead.org
CC: Richard Kuo <rkuo@codeaurora.org>
CC: linux-hexagon@vger.kernel.org
CC: James Hogan <james.hogan@imgtec.com>
CC: linux-metag@vger.kernel.org
CC: Michal Simek <monstr@monstr.eu>
CC: microblaze-uclinux@itee.uq.edu.au
CC: linux-mips@linux-mips.org
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Paul Mackerras <paulus@samba.org>
CC: linuxppc-dev@lists.ozlabs.org
---
include/asm-generic/fixmap.h | 97 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
create mode 100644 include/asm-generic/fixmap.h
diff --git a/include/asm-generic/fixmap.h b/include/asm-generic/fixmap.h
new file mode 100644
index 0000000..5a64ca4
--- /dev/null
+++ b/include/asm-generic/fixmap.h
@@ -0,0 +1,97 @@
+/*
+ * fixmap.h: compile-time virtual memory allocation
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1998 Ingo Molnar
+ *
+ * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
+ * x86_32 and x86_64 integration by Gustavo F. Padovan, February 2009
+ * Break out common bits to asm-generic by Mark Salter, November 2013
+ */
+
+#ifndef __ASM_GENERIC_FIXMAP_H
+#define __ASM_GENERIC_FIXMAP_H
+
+#include <linux/bug.h>
+
+#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT))
+#define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT)
+
+#ifndef __ASSEMBLY__
+/*
+ * 'index to address' translation. If anyone tries to use the idx
+ * directly without translation, we catch the bug with a NULL-deference
+ * kernel oops. Illegal ranges of incoming indices are caught too.
+ */
+static __always_inline unsigned long fix_to_virt(const unsigned int idx)
+{
+ BUILD_BUG_ON(idx >= __end_of_fixed_addresses);
+ return __fix_to_virt(idx);
+}
+
+static inline unsigned long virt_to_fix(const unsigned long vaddr)
+{
+ BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
+ return __virt_to_fix(vaddr);
+}
+
+/*
+ * Provide some reasonable defaults for page flags.
+ * Not all architectures use all of these different types and some
+ * architectures use different names.
+ */
+#ifndef FIXMAP_PAGE_NORMAL
+#define FIXMAP_PAGE_NORMAL PAGE_KERNEL
+#endif
+#ifndef FIXMAP_PAGE_NOCACHE
+#define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE
+#endif
+#ifndef FIXMAP_PAGE_IO
+#define FIXMAP_PAGE_IO PAGE_KERNEL_IO
+#endif
+#ifndef FIXMAP_PAGE_CLEAR
+#define FIXMAP_PAGE_CLEAR __pgprot(0)
+#endif
+
+#ifndef set_fixmap
+#define set_fixmap(idx, phys) \
+ __set_fixmap(idx, phys, FIXMAP_PAGE_NORMAL)
+#endif
+
+#ifndef clear_fixmap
+#define clear_fixmap(idx) \
+ __set_fixmap(idx, 0, FIXMAP_PAGE_CLEAR)
+#endif
+
+/* Return a pointer with offset calculated */
+#define __set_fixmap_offset(idx, phys, flags) \
+({ \
+ unsigned long addr; \
+ __set_fixmap(idx, phys, flags); \
+ addr = fix_to_virt(idx) + ((phys) & (PAGE_SIZE - 1)); \
+ addr; \
+})
+
+#define set_fixmap_offset(idx, phys) \
+ __set_fixmap_offset(idx, phys, FIXMAP_PAGE_NORMAL)
+
+/*
+ * Some hardware wants to get fixmapped without caching.
+ */
+#define set_fixmap_nocache(idx, phys) \
+ __set_fixmap(idx, phys, FIXMAP_PAGE_NOCACHE)
+
+#define set_fixmap_offset_nocache(idx, phys) \
+ __set_fixmap_offset(idx, phys, FIXMAP_PAGE_NOCACHE)
+
+/*
+ * Some fixmaps are for IO
+ */
+#define set_fixmap_io(idx, phys) \
+ __set_fixmap(idx, phys, FIXMAP_PAGE_IO)
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ASM_GENERIC_FIXMAP_H */
--
1.8.3.1
^ permalink raw reply related
* Re: [PATCH 0/9 v2] vfio-pci: add support for Freescale IOMMU (PAMU)
From: Alex Williamson @ 2013-11-25 16:38 UTC (permalink / raw)
To: Bharat Bhushan
Cc: linux-pci@vger.kernel.org, agraf@suse.de, Stuart Yoder,
bhelgaas@google.com, iommu@lists.linux-foundation.org, Scott Wood,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
In-Reply-To: <6A3DF150A5B70D4F9B66A25E3F7C888D0722C180@039-SN2MPN1-012.039d.mgd.msft.net>
On Mon, 2013-11-25 at 05:33 +0000, Bharat Bhushan wrote:
>
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, November 22, 2013 2:31 AM
> > To: Wood Scott-B07421
> > Cc: Bhushan Bharat-R65777; linux-pci@vger.kernel.org; agraf@suse.de; Yoder
> > Stuart-B08248; iommu@lists.linux-foundation.org; bhelgaas@google.com; linuxppc-
> > dev@lists.ozlabs.org; linux-kernel@vger.kernel.org
> > Subject: Re: [PATCH 0/9 v2] vfio-pci: add support for Freescale IOMMU (PAMU)
> >
> > On Thu, 2013-11-21 at 14:47 -0600, Scott Wood wrote:
> > > On Thu, 2013-11-21 at 13:43 -0700, Alex Williamson wrote:
> > > > On Thu, 2013-11-21 at 11:20 +0000, Bharat Bhushan wrote:
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > > > > > Sent: Thursday, November 21, 2013 12:17 AM
> > > > > > To: Bhushan Bharat-R65777
> > > > > > Cc: joro@8bytes.org; bhelgaas@google.com; agraf@suse.de; Wood
> > > > > > Scott-B07421; Yoder Stuart-B08248;
> > > > > > iommu@lists.linux-foundation.org; linux- pci@vger.kernel.org;
> > > > > > linuxppc-dev@lists.ozlabs.org; linux- kernel@vger.kernel.org;
> > > > > > Bhushan Bharat-R65777
> > > > > > Subject: Re: [PATCH 0/9 v2] vfio-pci: add support for Freescale
> > > > > > IOMMU (PAMU)
> > > > > >
> > > > > > Is VFIO_IOMMU_PAMU_GET_MSI_BANK_COUNT per aperture (ie. each
> > > > > > vfio user has $COUNT regions at their disposal exclusively)?
> > > > >
> > > > > Number of msi-bank count is system wide and not per aperture, But will be
> > setting windows for banks in the device aperture.
> > > > > So say if we are direct assigning 2 pci device (both have different iommu
> > group, so 2 aperture in iommu) to VM.
> > > > > Now qemu can make only one call to know how many msi-banks are there but
> > it must set sub-windows for all banks for both pci device in its respective
> > aperture.
> > > >
> > > > I'm still confused. What I want to make sure of is that the banks
> > > > are independent per aperture. For instance, if we have two separate
> > > > userspace processes operating independently and they both chose to
> > > > use msi bank zero for their device, that's bank zero within each
> > > > aperture and doesn't interfere. Or another way to ask is can a
> > > > malicious user interfere with other users by using the wrong bank.
> > > > Thanks,
> > >
> > > They can interfere.
>
> Want to be sure of how they can interfere?
What happens if more than one user selects the same MSI bank?
Minimally, wouldn't that result in the IOMMU blocking transactions from
the previous user once the new user activates their mapping?
> >> With this hardware, the only way to prevent that
> > > is to make sure that a bank is not shared by multiple protection contexts.
> > > For some of our users, though, I believe preventing this is less
> > > important than the performance benefit.
>
> So should we let this patch series in without protection?
No.
> >
> > I think we need some sort of ownership model around the msi banks then.
> > Otherwise there's nothing preventing another userspace from attempting an MSI
> > based attack on other users, or perhaps even on the host. VFIO can't allow
> > that. Thanks,
>
> We have very few (3 MSI bank on most of chips), so we can not assign
> one to each userspace. What we can do is host and userspace does not
> share a MSI bank while userspace will share a MSI bank.
Then you probably need VFIO to "own" the MSI bank and program devices
into it rather than exposing the MSI banks to userspace to let them have
direct access. Thanks,
Alex
^ permalink raw reply
* Re: [PATCH v5 08/17] spi: mpc512x: adjust to OF based clock lookup
From: Mark Brown @ 2013-11-25 17:30 UTC (permalink / raw)
To: Gerhard Sittig
Cc: Mike Turquette, Detlev Zundel, linux-spi, Scott Wood,
Anatolij Gustschin, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1384729577-7336-9-git-send-email-gsi@denx.de>
[-- Attachment #1: Type: text/plain, Size: 332 bytes --]
On Mon, Nov 18, 2013 at 12:06:08AM +0100, Gerhard Sittig wrote:
> after device tree based clock lookup became available, the peripheral
> driver need no longer construct clock names which include the PSC index,
> remove the "psc%d_mclk" template and unconditionally use 'mclk'
Have there been other changes which make this happen?
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: [PATCH v5 08/17] spi: mpc512x: adjust to OF based clock lookup
From: Gerhard Sittig @ 2013-11-25 19:06 UTC (permalink / raw)
To: Mark Brown
Cc: Mike Turquette, Detlev Zundel, linux-spi, Scott Wood,
Anatolij Gustschin, linuxppc-dev, linux-arm-kernel
In-Reply-To: <20131125173008.GQ14725@sirena.org.uk>
On Mon, Nov 25, 2013 at 17:30 +0000, Mark Brown wrote:
>
> On Mon, Nov 18, 2013 at 12:06:08AM +0100, Gerhard Sittig wrote:
> > after device tree based clock lookup became available, the peripheral
> > driver need no longer construct clock names which include the PSC index,
> > remove the "psc%d_mclk" template and unconditionally use 'mclk'
>
> Have there been other changes which make this happen?
Not yet in mainline. The patch you respond to is 08/17 within
the series, and depends on earlier patches in the series (namely
the introduction of CCF support for the MPC512x platform, making
the 'mclk' lookup against the PSC's OF node work while keeping
the global 'pscN_mclk' in place during migration).
This information was listed in the cover letter, but was not
duplicated within the individual patches. Patches were sent to
individual Cc: lists to not spam too many people, but the cover
letter was CC'ed to every recipient of any part of the series.
Please note that I will have to re-submit the series, since it no
longer cleanly applies against v3.13-rc1 (which was not available
when I sent v5). This patch won't change in its content, but may
experience changes in its context (catchup with changes between
v3.12 and v3.13-rc1).
Thank you for considering the patch, and for your feedback on
past versions!
virtually yours
Gerhard Sittig
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr. 5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de
^ permalink raw reply
* [PATCH 1/1] powerpc: Increase EEH recovery timeout for SR-IOV
From: Brian King @ 2013-11-25 22:27 UTC (permalink / raw)
To: benh; +Cc: brking, linuxppc-dev, shangw
In order to support concurrent adapter firmware download
to SR-IOV adapters on pSeries, each VF will see an EEH event
where the slot will remain in the unavailable state for
the duration of the adapter firmware update, which can take
as long as 5 minutes. Extend the EEH recovery timeout to
account for this.
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
---
arch/powerpc/kernel/eeh.c | 2 +-
arch/powerpc/kernel/eeh_driver.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff -puN arch/powerpc/kernel/eeh.c~eeh_sriov_vf_delay arch/powerpc/kernel/eeh.c
--- linux/arch/powerpc/kernel/eeh.c~eeh_sriov_vf_delay 2013-11-25 16:12:26.000000000 -0600
+++ linux-bjking1/arch/powerpc/kernel/eeh.c 2013-11-25 16:12:26.000000000 -0600
@@ -84,7 +84,7 @@
#define EEH_MAX_FAILS 2100000
/* Time to wait for a PCI slot to report status, in milliseconds */
-#define PCI_BUS_RESET_WAIT_MSEC (60*1000)
+#define PCI_BUS_RESET_WAIT_MSEC (5*60*1000)
/* Platform dependent EEH operations */
struct eeh_ops *eeh_ops = NULL;
diff -puN arch/powerpc/kernel/eeh_driver.c~eeh_sriov_vf_delay arch/powerpc/kernel/eeh_driver.c
--- linux/arch/powerpc/kernel/eeh_driver.c~eeh_sriov_vf_delay 2013-11-25 16:12:26.000000000 -0600
+++ linux-bjking1/arch/powerpc/kernel/eeh_driver.c 2013-11-25 16:12:26.000000000 -0600
@@ -468,7 +468,7 @@ static int eeh_reset_device(struct eeh_p
/* The longest amount of time to wait for a pci device
* to come back on line, in seconds.
*/
-#define MAX_WAIT_FOR_RECOVERY 150
+#define MAX_WAIT_FOR_RECOVERY 300
static void eeh_handle_normal_event(struct eeh_pe *pe)
{
_
^ permalink raw reply
* Re: [PATCH 01/12][v3] pci: fsl: derive the common PCI driver to drivers/pci/host
From: Bjorn Helgaas @ 2013-11-25 23:01 UTC (permalink / raw)
To: Minghuan Lian; +Cc: Scott Wood, linux-pci, linuxppc-dev, Zang Roy-R61911
In-Reply-To: <1382524894-15164-1-git-send-email-Minghuan.Lian@freescale.com>
On Wed, Oct 23, 2013 at 06:41:23PM +0800, Minghuan Lian wrote:
> The Freescale's Layerscape series processors will use ARM cores.
> The LS1's PCIe controllers is the same as T4240's. So it's better
> the PCIe controller driver can support PowerPC and ARM
> simultaneously. This patch is for this purpose. It derives
> the common functions from arch/powerpc/sysdev/fsl_pci.c to
> drivers/pci/host/pci-fsl-common.c and leaves the architecture
> specific functions which should be implemented in arch related files.
>
> Signed-off-by: Minghuan Lian <Minghuan.Lian@freescale.com>
It doesn't look like we have a consensus on how to proceed here, so I'm
ignoring this series for now. Let me know if there really *is* agreement,
or if there's some subset of this work that everybody can agree on. It'd
be good to make forward progress, even if it's not completely perfect yet.
Bjorn
> ---
> change log:
> v2-v3:
> no change
> v1-v2:
> 1. rename pci.h to pci-common.h
> 2. rename pci-fsl.c to pci-fsl-common.c
>
> Based on upstream master.
> Based on the discussion of RFC version here
> http://patchwork.ozlabs.org/patch/274487/
>
> arch/powerpc/sysdev/fsl_pci.c | 521 +-----------------
> arch/powerpc/sysdev/fsl_pci.h | 89 ----
> .../fsl_pci.c => drivers/pci/host/pci-fsl-common.c | 591 +--------------------
> .../fsl_pci.h => include/linux/fsl/pci-common.h | 45 +-
> 4 files changed, 7 insertions(+), 1239 deletions(-)
> copy arch/powerpc/sysdev/fsl_pci.c => drivers/pci/host/pci-fsl-common.c (54%)
> copy arch/powerpc/sysdev/fsl_pci.h => include/linux/fsl/pci-common.h (79%)
>
> diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
> index ccfb50d..26039e3 100644
> --- a/arch/powerpc/sysdev/fsl_pci.c
> +++ b/arch/powerpc/sysdev/fsl_pci.c
> @@ -27,6 +27,7 @@
> #include <linux/log2.h>
> #include <linux/slab.h>
> #include <linux/uaccess.h>
> +#include <linux/fsl/pci-common.h>
>
> #include <asm/io.h>
> #include <asm/prom.h>
> @@ -58,57 +59,8 @@ static void quirk_fsl_pcie_header(struct pci_dev *dev)
> return;
> }
>
> -static int fsl_indirect_read_config(struct pci_bus *, unsigned int,
> - int, int, u32 *);
> -
> -static int fsl_pcie_check_link(struct pci_controller *hose)
> -{
> - u32 val = 0;
> -
> - if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
> - if (hose->ops->read == fsl_indirect_read_config) {
> - struct pci_bus bus;
> - bus.number = hose->first_busno;
> - bus.sysdata = hose;
> - bus.ops = hose->ops;
> - indirect_read_config(&bus, 0, PCIE_LTSSM, 4, &val);
> - } else
> - early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
> - if (val < PCIE_LTSSM_L0)
> - return 1;
> - } else {
> - struct ccsr_pci __iomem *pci = hose->private_data;
> - /* for PCIe IP rev 3.0 or greater use CSR0 for link state */
> - val = (in_be32(&pci->pex_csr0) & PEX_CSR0_LTSSM_MASK)
> - >> PEX_CSR0_LTSSM_SHIFT;
> - if (val != PEX_CSR0_LTSSM_L0)
> - return 1;
> - }
> -
> - return 0;
> -}
> -
> -static int fsl_indirect_read_config(struct pci_bus *bus, unsigned int devfn,
> - int offset, int len, u32 *val)
> -{
> - struct pci_controller *hose = pci_bus_to_host(bus);
> -
> - if (fsl_pcie_check_link(hose))
> - hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
> - else
> - hose->indirect_type &= ~PPC_INDIRECT_TYPE_NO_PCIE_LINK;
> -
> - return indirect_read_config(bus, devfn, offset, len, val);
> -}
> -
> #if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
>
> -static struct pci_ops fsl_indirect_pcie_ops =
> -{
> - .read = fsl_indirect_read_config,
> - .write = indirect_write_config,
> -};
> -
> #define MAX_PHYS_ADDR_BITS 40
> static u64 pci64_dma_offset = 1ull << MAX_PHYS_ADDR_BITS;
>
> @@ -132,291 +84,6 @@ static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
> return 0;
> }
>
> -static int setup_one_atmu(struct ccsr_pci __iomem *pci,
> - unsigned int index, const struct resource *res,
> - resource_size_t offset)
> -{
> - resource_size_t pci_addr = res->start - offset;
> - resource_size_t phys_addr = res->start;
> - resource_size_t size = resource_size(res);
> - u32 flags = 0x80044000; /* enable & mem R/W */
> - unsigned int i;
> -
> - pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
> - (u64)res->start, (u64)size);
> -
> - if (res->flags & IORESOURCE_PREFETCH)
> - flags |= 0x10000000; /* enable relaxed ordering */
> -
> - for (i = 0; size > 0; i++) {
> - unsigned int bits = min(ilog2(size),
> - __ffs(pci_addr | phys_addr));
> -
> - if (index + i >= 5)
> - return -1;
> -
> - out_be32(&pci->pow[index + i].potar, pci_addr >> 12);
> - out_be32(&pci->pow[index + i].potear, (u64)pci_addr >> 44);
> - out_be32(&pci->pow[index + i].powbar, phys_addr >> 12);
> - out_be32(&pci->pow[index + i].powar, flags | (bits - 1));
> -
> - pci_addr += (resource_size_t)1U << bits;
> - phys_addr += (resource_size_t)1U << bits;
> - size -= (resource_size_t)1U << bits;
> - }
> -
> - return i;
> -}
> -
> -/* atmu setup for fsl pci/pcie controller */
> -static void setup_pci_atmu(struct pci_controller *hose)
> -{
> - struct ccsr_pci __iomem *pci = hose->private_data;
> - int i, j, n, mem_log, win_idx = 3, start_idx = 1, end_idx = 4;
> - u64 mem, sz, paddr_hi = 0;
> - u64 offset = 0, paddr_lo = ULLONG_MAX;
> - u32 pcicsrbar = 0, pcicsrbar_sz;
> - u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL |
> - PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP;
> - const char *name = hose->dn->full_name;
> - const u64 *reg;
> - int len;
> -
> - if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
> - if (in_be32(&pci->block_rev1) >= PCIE_IP_REV_2_2) {
> - win_idx = 2;
> - start_idx = 0;
> - end_idx = 3;
> - }
> - }
> -
> - /* Disable all windows (except powar0 since it's ignored) */
> - for(i = 1; i < 5; i++)
> - out_be32(&pci->pow[i].powar, 0);
> - for (i = start_idx; i < end_idx; i++)
> - out_be32(&pci->piw[i].piwar, 0);
> -
> - /* Setup outbound MEM window */
> - for(i = 0, j = 1; i < 3; i++) {
> - if (!(hose->mem_resources[i].flags & IORESOURCE_MEM))
> - continue;
> -
> - paddr_lo = min(paddr_lo, (u64)hose->mem_resources[i].start);
> - paddr_hi = max(paddr_hi, (u64)hose->mem_resources[i].end);
> -
> - /* We assume all memory resources have the same offset */
> - offset = hose->mem_offset[i];
> - n = setup_one_atmu(pci, j, &hose->mem_resources[i], offset);
> -
> - if (n < 0 || j >= 5) {
> - pr_err("Ran out of outbound PCI ATMUs for resource %d!\n", i);
> - hose->mem_resources[i].flags |= IORESOURCE_DISABLED;
> - } else
> - j += n;
> - }
> -
> - /* Setup outbound IO window */
> - if (hose->io_resource.flags & IORESOURCE_IO) {
> - if (j >= 5) {
> - pr_err("Ran out of outbound PCI ATMUs for IO resource\n");
> - } else {
> - pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
> - "phy base 0x%016llx.\n",
> - (u64)hose->io_resource.start,
> - (u64)resource_size(&hose->io_resource),
> - (u64)hose->io_base_phys);
> - out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12));
> - out_be32(&pci->pow[j].potear, 0);
> - out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12));
> - /* Enable, IO R/W */
> - out_be32(&pci->pow[j].powar, 0x80088000
> - | (ilog2(hose->io_resource.end
> - - hose->io_resource.start + 1) - 1));
> - }
> - }
> -
> - /* convert to pci address space */
> - paddr_hi -= offset;
> - paddr_lo -= offset;
> -
> - if (paddr_hi == paddr_lo) {
> - pr_err("%s: No outbound window space\n", name);
> - return;
> - }
> -
> - if (paddr_lo == 0) {
> - pr_err("%s: No space for inbound window\n", name);
> - return;
> - }
> -
> - /* setup PCSRBAR/PEXCSRBAR */
> - early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, 0xffffffff);
> - early_read_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, &pcicsrbar_sz);
> - pcicsrbar_sz = ~pcicsrbar_sz + 1;
> -
> - if (paddr_hi < (0x100000000ull - pcicsrbar_sz) ||
> - (paddr_lo > 0x100000000ull))
> - pcicsrbar = 0x100000000ull - pcicsrbar_sz;
> - else
> - pcicsrbar = (paddr_lo - pcicsrbar_sz) & -pcicsrbar_sz;
> - early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, pcicsrbar);
> -
> - paddr_lo = min(paddr_lo, (u64)pcicsrbar);
> -
> - pr_info("%s: PCICSRBAR @ 0x%x\n", name, pcicsrbar);
> -
> - /* Setup inbound mem window */
> - mem = memblock_end_of_DRAM();
> -
> - /*
> - * The msi-address-64 property, if it exists, indicates the physical
> - * address of the MSIIR register. Normally, this register is located
> - * inside CCSR, so the ATMU that covers all of CCSR is used. But if
> - * this property exists, then we normally need to create a new ATMU
> - * for it. For now, however, we cheat. The only entity that creates
> - * this property is the Freescale hypervisor, and the address is
> - * specified in the partition configuration. Typically, the address
> - * is located in the page immediately after the end of DDR. If so, we
> - * can avoid allocating a new ATMU by extending the DDR ATMU by one
> - * page.
> - */
> - reg = of_get_property(hose->dn, "msi-address-64", &len);
> - if (reg && (len == sizeof(u64))) {
> - u64 address = be64_to_cpup(reg);
> -
> - if ((address >= mem) && (address < (mem + PAGE_SIZE))) {
> - pr_info("%s: extending DDR ATMU to cover MSIIR", name);
> - mem += PAGE_SIZE;
> - } else {
> - /* TODO: Create a new ATMU for MSIIR */
> - pr_warn("%s: msi-address-64 address of %llx is "
> - "unsupported\n", name, address);
> - }
> - }
> -
> - sz = min(mem, paddr_lo);
> - mem_log = ilog2(sz);
> -
> - /* PCIe can overmap inbound & outbound since RX & TX are separated */
> - if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
> - /* Size window to exact size if power-of-two or one size up */
> - if ((1ull << mem_log) != mem) {
> - mem_log++;
> - if ((1ull << mem_log) > mem)
> - pr_info("%s: Setting PCI inbound window "
> - "greater than memory size\n", name);
> - }
> -
> - piwar |= ((mem_log - 1) & PIWAR_SZ_MASK);
> -
> - /* Setup inbound memory window */
> - out_be32(&pci->piw[win_idx].pitar, 0x00000000);
> - out_be32(&pci->piw[win_idx].piwbar, 0x00000000);
> - out_be32(&pci->piw[win_idx].piwar, piwar);
> - win_idx--;
> -
> - hose->dma_window_base_cur = 0x00000000;
> - hose->dma_window_size = (resource_size_t)sz;
> -
> - /*
> - * if we have >4G of memory setup second PCI inbound window to
> - * let devices that are 64-bit address capable to work w/o
> - * SWIOTLB and access the full range of memory
> - */
> - if (sz != mem) {
> - mem_log = ilog2(mem);
> -
> - /* Size window up if we dont fit in exact power-of-2 */
> - if ((1ull << mem_log) != mem)
> - mem_log++;
> -
> - piwar = (piwar & ~PIWAR_SZ_MASK) | (mem_log - 1);
> -
> - /* Setup inbound memory window */
> - out_be32(&pci->piw[win_idx].pitar, 0x00000000);
> - out_be32(&pci->piw[win_idx].piwbear,
> - pci64_dma_offset >> 44);
> - out_be32(&pci->piw[win_idx].piwbar,
> - pci64_dma_offset >> 12);
> - out_be32(&pci->piw[win_idx].piwar, piwar);
> -
> - /*
> - * install our own dma_set_mask handler to fixup dma_ops
> - * and dma_offset
> - */
> - ppc_md.dma_set_mask = fsl_pci_dma_set_mask;
> -
> - pr_info("%s: Setup 64-bit PCI DMA window\n", name);
> - }
> - } else {
> - u64 paddr = 0;
> -
> - /* Setup inbound memory window */
> - out_be32(&pci->piw[win_idx].pitar, paddr >> 12);
> - out_be32(&pci->piw[win_idx].piwbar, paddr >> 12);
> - out_be32(&pci->piw[win_idx].piwar, (piwar | (mem_log - 1)));
> - win_idx--;
> -
> - paddr += 1ull << mem_log;
> - sz -= 1ull << mem_log;
> -
> - if (sz) {
> - mem_log = ilog2(sz);
> - piwar |= (mem_log - 1);
> -
> - out_be32(&pci->piw[win_idx].pitar, paddr >> 12);
> - out_be32(&pci->piw[win_idx].piwbar, paddr >> 12);
> - out_be32(&pci->piw[win_idx].piwar, piwar);
> - win_idx--;
> -
> - paddr += 1ull << mem_log;
> - }
> -
> - hose->dma_window_base_cur = 0x00000000;
> - hose->dma_window_size = (resource_size_t)paddr;
> - }
> -
> - if (hose->dma_window_size < mem) {
> -#ifdef CONFIG_SWIOTLB
> - ppc_swiotlb_enable = 1;
> -#else
> - pr_err("%s: ERROR: Memory size exceeds PCI ATMU ability to "
> - "map - enable CONFIG_SWIOTLB to avoid dma errors.\n",
> - name);
> -#endif
> - /* adjusting outbound windows could reclaim space in mem map */
> - if (paddr_hi < 0xffffffffull)
> - pr_warning("%s: WARNING: Outbound window cfg leaves "
> - "gaps in memory map. Adjusting the memory map "
> - "could reduce unnecessary bounce buffering.\n",
> - name);
> -
> - pr_info("%s: DMA window size is 0x%llx\n", name,
> - (u64)hose->dma_window_size);
> - }
> -}
> -
> -static void __init setup_pci_cmd(struct pci_controller *hose)
> -{
> - u16 cmd;
> - int cap_x;
> -
> - early_read_config_word(hose, 0, 0, PCI_COMMAND, &cmd);
> - cmd |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY
> - | PCI_COMMAND_IO;
> - early_write_config_word(hose, 0, 0, PCI_COMMAND, cmd);
> -
> - cap_x = early_find_capability(hose, 0, 0, PCI_CAP_ID_PCIX);
> - if (cap_x) {
> - int pci_x_cmd = cap_x + PCI_X_CMD;
> - cmd = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ
> - | PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E;
> - early_write_config_word(hose, 0, 0, pci_x_cmd, cmd);
> - } else {
> - early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0x80);
> - }
> -}
> -
> void fsl_pcibios_fixup_bus(struct pci_bus *bus)
> {
> struct pci_controller *hose = pci_bus_to_host(bus);
> @@ -454,112 +121,6 @@ void fsl_pcibios_fixup_bus(struct pci_bus *bus)
> }
> }
>
> -int __init fsl_add_bridge(struct platform_device *pdev, int is_primary)
> -{
> - int len;
> - struct pci_controller *hose;
> - struct resource rsrc;
> - const int *bus_range;
> - u8 hdr_type, progif;
> - struct device_node *dev;
> - struct ccsr_pci __iomem *pci;
> -
> - dev = pdev->dev.of_node;
> -
> - if (!of_device_is_available(dev)) {
> - pr_warning("%s: disabled\n", dev->full_name);
> - return -ENODEV;
> - }
> -
> - pr_debug("Adding PCI host bridge %s\n", dev->full_name);
> -
> - /* Fetch host bridge registers address */
> - if (of_address_to_resource(dev, 0, &rsrc)) {
> - printk(KERN_WARNING "Can't get pci register base!");
> - return -ENOMEM;
> - }
> -
> - /* Get bus range if any */
> - bus_range = of_get_property(dev, "bus-range", &len);
> - if (bus_range == NULL || len < 2 * sizeof(int))
> - printk(KERN_WARNING "Can't get bus-range for %s, assume"
> - " bus 0\n", dev->full_name);
> -
> - pci_add_flags(PCI_REASSIGN_ALL_BUS);
> - hose = pcibios_alloc_controller(dev);
> - if (!hose)
> - return -ENOMEM;
> -
> - /* set platform device as the parent */
> - hose->parent = &pdev->dev;
> - hose->first_busno = bus_range ? bus_range[0] : 0x0;
> - hose->last_busno = bus_range ? bus_range[1] : 0xff;
> -
> - pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
> - (u64)rsrc.start, (u64)resource_size(&rsrc));
> -
> - pci = hose->private_data = ioremap(rsrc.start, resource_size(&rsrc));
> - if (!hose->private_data)
> - goto no_bridge;
> -
> - setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
> - PPC_INDIRECT_TYPE_BIG_ENDIAN);
> -
> - if (in_be32(&pci->block_rev1) < PCIE_IP_REV_3_0)
> - hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
> -
> - if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
> - /* use fsl_indirect_read_config for PCIe */
> - hose->ops = &fsl_indirect_pcie_ops;
> - /* For PCIE read HEADER_TYPE to identify controler mode */
> - early_read_config_byte(hose, 0, 0, PCI_HEADER_TYPE, &hdr_type);
> - if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
> - goto no_bridge;
> -
> - } else {
> - /* For PCI read PROG to identify controller mode */
> - early_read_config_byte(hose, 0, 0, PCI_CLASS_PROG, &progif);
> - if ((progif & 1) == 1)
> - goto no_bridge;
> - }
> -
> - setup_pci_cmd(hose);
> -
> - /* check PCI express link status */
> - if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
> - hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG |
> - PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
> - if (fsl_pcie_check_link(hose))
> - hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
> - }
> -
> - printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
> - "Firmware bus number: %d->%d\n",
> - (unsigned long long)rsrc.start, hose->first_busno,
> - hose->last_busno);
> -
> - pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
> - hose, hose->cfg_addr, hose->cfg_data);
> -
> - /* Interpret the "ranges" property */
> - /* This also maps the I/O region and sets isa_io/mem_base */
> - pci_process_bridge_OF_ranges(hose, dev, is_primary);
> -
> - /* Setup PEX window registers */
> - setup_pci_atmu(hose);
> -
> - return 0;
> -
> -no_bridge:
> - iounmap(hose->private_data);
> - /* unmap cfg_data & cfg_addr separately if not on same page */
> - if (((unsigned long)hose->cfg_data & PAGE_MASK) !=
> - ((unsigned long)hose->cfg_addr & PAGE_MASK))
> - iounmap(hose->cfg_data);
> - iounmap(hose->cfg_addr);
> - pcibios_free_controller(hose);
> - return -ENODEV;
> -}
> #endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
>
> DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_fsl_pcie_header);
> @@ -1029,26 +590,6 @@ int fsl_pci_mcheck_exception(struct pt_regs *regs)
> #endif
>
> #if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
> -static const struct of_device_id pci_ids[] = {
> - { .compatible = "fsl,mpc8540-pci", },
> - { .compatible = "fsl,mpc8548-pcie", },
> - { .compatible = "fsl,mpc8610-pci", },
> - { .compatible = "fsl,mpc8641-pcie", },
> - { .compatible = "fsl,qoriq-pcie-v2.1", },
> - { .compatible = "fsl,qoriq-pcie-v2.2", },
> - { .compatible = "fsl,qoriq-pcie-v2.3", },
> - { .compatible = "fsl,qoriq-pcie-v2.4", },
> - { .compatible = "fsl,qoriq-pcie-v3.0", },
> -
> - /*
> - * The following entries are for compatibility with older device
> - * trees.
> - */
> - { .compatible = "fsl,p1022-pcie", },
> - { .compatible = "fsl,p4080-pcie", },
> -
> - {},
> -};
>
> struct device_node *fsl_pci_primary;
>
> @@ -1083,64 +624,4 @@ void fsl_pci_assign_primary(void)
> }
> }
> }
> -
> -static int fsl_pci_probe(struct platform_device *pdev)
> -{
> - int ret;
> - struct device_node *node;
> -
> - node = pdev->dev.of_node;
> - ret = fsl_add_bridge(pdev, fsl_pci_primary == node);
> -
> - mpc85xx_pci_err_probe(pdev);
> -
> - return 0;
> -}
> -
> -#ifdef CONFIG_PM
> -static int fsl_pci_resume(struct device *dev)
> -{
> - struct pci_controller *hose;
> - struct resource pci_rsrc;
> -
> - hose = pci_find_hose_for_OF_device(dev->of_node);
> - if (!hose)
> - return -ENODEV;
> -
> - if (of_address_to_resource(dev->of_node, 0, &pci_rsrc)) {
> - dev_err(dev, "Get pci register base failed.");
> - return -ENODEV;
> - }
> -
> - setup_pci_atmu(hose);
> -
> - return 0;
> -}
> -
> -static const struct dev_pm_ops pci_pm_ops = {
> - .resume = fsl_pci_resume,
> -};
> -
> -#define PCI_PM_OPS (&pci_pm_ops)
> -
> -#else
> -
> -#define PCI_PM_OPS NULL
> -
> -#endif
> -
> -static struct platform_driver fsl_pci_driver = {
> - .driver = {
> - .name = "fsl-pci",
> - .pm = PCI_PM_OPS,
> - .of_match_table = pci_ids,
> - },
> - .probe = fsl_pci_probe,
> -};
> -
> -static int __init fsl_pci_init(void)
> -{
> - return platform_driver_register(&fsl_pci_driver);
> -}
> -arch_initcall(fsl_pci_init);
> #endif
> diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
> index 8d455df..ce77aad 100644
> --- a/arch/powerpc/sysdev/fsl_pci.h
> +++ b/arch/powerpc/sysdev/fsl_pci.h
> @@ -21,95 +21,6 @@ struct platform_device;
> #define PCI_FSL_BRR1 0xbf8
> #define PCI_FSL_BRR1_VER 0xffff
>
> -#define PCIE_LTSSM 0x0404 /* PCIE Link Training and Status */
> -#define PCIE_LTSSM_L0 0x16 /* L0 state */
> -#define PCIE_IP_REV_2_2 0x02080202 /* PCIE IP block version Rev2.2 */
> -#define PCIE_IP_REV_3_0 0x02080300 /* PCIE IP block version Rev3.0 */
> -#define PIWAR_EN 0x80000000 /* Enable */
> -#define PIWAR_PF 0x20000000 /* prefetch */
> -#define PIWAR_TGI_LOCAL 0x00f00000 /* target - local memory */
> -#define PIWAR_READ_SNOOP 0x00050000
> -#define PIWAR_WRITE_SNOOP 0x00005000
> -#define PIWAR_SZ_MASK 0x0000003f
> -
> -/* PCI/PCI Express outbound window reg */
> -struct pci_outbound_window_regs {
> - __be32 potar; /* 0x.0 - Outbound translation address register */
> - __be32 potear; /* 0x.4 - Outbound translation extended address register */
> - __be32 powbar; /* 0x.8 - Outbound window base address register */
> - u8 res1[4];
> - __be32 powar; /* 0x.10 - Outbound window attributes register */
> - u8 res2[12];
> -};
> -
> -/* PCI/PCI Express inbound window reg */
> -struct pci_inbound_window_regs {
> - __be32 pitar; /* 0x.0 - Inbound translation address register */
> - u8 res1[4];
> - __be32 piwbar; /* 0x.8 - Inbound window base address register */
> - __be32 piwbear; /* 0x.c - Inbound window base extended address register */
> - __be32 piwar; /* 0x.10 - Inbound window attributes register */
> - u8 res2[12];
> -};
> -
> -/* PCI/PCI Express IO block registers for 85xx/86xx */
> -struct ccsr_pci {
> - __be32 config_addr; /* 0x.000 - PCI/PCIE Configuration Address Register */
> - __be32 config_data; /* 0x.004 - PCI/PCIE Configuration Data Register */
> - __be32 int_ack; /* 0x.008 - PCI Interrupt Acknowledge Register */
> - __be32 pex_otb_cpl_tor; /* 0x.00c - PCIE Outbound completion timeout register */
> - __be32 pex_conf_tor; /* 0x.010 - PCIE configuration timeout register */
> - __be32 pex_config; /* 0x.014 - PCIE CONFIG Register */
> - __be32 pex_int_status; /* 0x.018 - PCIE interrupt status */
> - u8 res2[4];
> - __be32 pex_pme_mes_dr; /* 0x.020 - PCIE PME and message detect register */
> - __be32 pex_pme_mes_disr; /* 0x.024 - PCIE PME and message disable register */
> - __be32 pex_pme_mes_ier; /* 0x.028 - PCIE PME and message interrupt enable register */
> - __be32 pex_pmcr; /* 0x.02c - PCIE power management command register */
> - u8 res3[3016];
> - __be32 block_rev1; /* 0x.bf8 - PCIE Block Revision register 1 */
> - __be32 block_rev2; /* 0x.bfc - PCIE Block Revision register 2 */
> -
> -/* PCI/PCI Express outbound window 0-4
> - * Window 0 is the default window and is the only window enabled upon reset.
> - * The default outbound register set is used when a transaction misses
> - * in all of the other outbound windows.
> - */
> - struct pci_outbound_window_regs pow[5];
> - u8 res14[96];
> - struct pci_inbound_window_regs pmit; /* 0xd00 - 0xd9c Inbound MSI */
> - u8 res6[96];
> -/* PCI/PCI Express inbound window 3-0
> - * inbound window 1 supports only a 32-bit base address and does not
> - * define an inbound window base extended address register.
> - */
> - struct pci_inbound_window_regs piw[4];
> -
> - __be32 pex_err_dr; /* 0x.e00 - PCI/PCIE error detect register */
> - u8 res21[4];
> - __be32 pex_err_en; /* 0x.e08 - PCI/PCIE error interrupt enable register */
> - u8 res22[4];
> - __be32 pex_err_disr; /* 0x.e10 - PCI/PCIE error disable register */
> - u8 res23[12];
> - __be32 pex_err_cap_stat; /* 0x.e20 - PCI/PCIE error capture status register */
> - u8 res24[4];
> - __be32 pex_err_cap_r0; /* 0x.e28 - PCIE error capture register 0 */
> - __be32 pex_err_cap_r1; /* 0x.e2c - PCIE error capture register 0 */
> - __be32 pex_err_cap_r2; /* 0x.e30 - PCIE error capture register 0 */
> - __be32 pex_err_cap_r3; /* 0x.e34 - PCIE error capture register 0 */
> - u8 res_e38[200];
> - __be32 pdb_stat; /* 0x.f00 - PCIE Debug Status */
> - u8 res_f04[16];
> - __be32 pex_csr0; /* 0x.f14 - PEX Control/Status register 0*/
> -#define PEX_CSR0_LTSSM_MASK 0xFC
> -#define PEX_CSR0_LTSSM_SHIFT 2
> -#define PEX_CSR0_LTSSM_L0 0x11
> - __be32 pex_csr1; /* 0x.f18 - PEX Control/Status register 1*/
> - u8 res_f1c[228];
> -
> -};
> -
> -extern int fsl_add_bridge(struct platform_device *pdev, int is_primary);
> extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
> extern int mpc83xx_add_bridge(struct device_node *dev);
> u64 fsl_pci_immrbar_base(struct pci_controller *hose);
> diff --git a/arch/powerpc/sysdev/fsl_pci.c b/drivers/pci/host/pci-fsl-common.c
> similarity index 54%
> copy from arch/powerpc/sysdev/fsl_pci.c
> copy to drivers/pci/host/pci-fsl-common.c
> index ccfb50d..69d338b 100644
> --- a/arch/powerpc/sysdev/fsl_pci.c
> +++ b/drivers/pci/host/pci-fsl-common.c
> @@ -1,5 +1,5 @@
> /*
> - * MPC83xx/85xx/86xx PCI/PCIE support routing.
> + * 85xx/86xx/LS PCI/PCIE support routing.
> *
> * Copyright 2007-2012 Freescale Semiconductor, Inc.
> * Copyright 2008-2009 MontaVista Software, Inc.
> @@ -8,9 +8,6 @@
> * Recode: ZHANG WEI <wei.zhang@freescale.com>
> * Rewrite the routing for Frescale PCI and PCI Express
> * Roy Zang <tie-fei.zang@freescale.com>
> - * MPC83xx PCI-Express support:
> - * Tony Li <tony.li@freescale.com>
> - * Anton Vorontsov <avorontsov@ru.mvista.com>
> *
> * This program is free software; you can redistribute it and/or modify it
> * under the terms of the GNU General Public License as published by the
> @@ -38,29 +35,6 @@
> #include <sysdev/fsl_soc.h>
> #include <sysdev/fsl_pci.h>
>
> -static int fsl_pcie_bus_fixup, is_mpc83xx_pci;
> -
> -static void quirk_fsl_pcie_header(struct pci_dev *dev)
> -{
> - u8 hdr_type;
> -
> - /* if we aren't a PCIe don't bother */
> - if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
> - return;
> -
> - /* if we aren't in host mode don't bother */
> - pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type);
> - if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
> - return;
> -
> - dev->class = PCI_CLASS_BRIDGE_PCI << 8;
> - fsl_pcie_bus_fixup = 1;
> - return;
> -}
> -
> -static int fsl_indirect_read_config(struct pci_bus *, unsigned int,
> - int, int, u32 *);
> -
> static int fsl_pcie_check_link(struct pci_controller *hose)
> {
> u32 val = 0;
> @@ -109,29 +83,6 @@ static struct pci_ops fsl_indirect_pcie_ops =
> .write = indirect_write_config,
> };
>
> -#define MAX_PHYS_ADDR_BITS 40
> -static u64 pci64_dma_offset = 1ull << MAX_PHYS_ADDR_BITS;
> -
> -static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
> -{
> - if (!dev->dma_mask || !dma_supported(dev, dma_mask))
> - return -EIO;
> -
> - /*
> - * Fixup PCI devices that are able to DMA to above the physical
> - * address width of the SoC such that we can address any internal
> - * SoC address from across PCI if needed
> - */
> - if ((dev->bus == &pci_bus_type) &&
> - dma_mask >= DMA_BIT_MASK(MAX_PHYS_ADDR_BITS)) {
> - set_dma_ops(dev, &dma_direct_ops);
> - set_dma_offset(dev, pci64_dma_offset);
> - }
> -
> - *dev->dma_mask = dma_mask;
> - return 0;
> -}
> -
> static int setup_one_atmu(struct ccsr_pci __iomem *pci,
> unsigned int index, const struct resource *res,
> resource_size_t offset)
> @@ -417,43 +368,6 @@ static void __init setup_pci_cmd(struct pci_controller *hose)
> }
> }
>
> -void fsl_pcibios_fixup_bus(struct pci_bus *bus)
> -{
> - struct pci_controller *hose = pci_bus_to_host(bus);
> - int i, is_pcie = 0, no_link;
> -
> - /* The root complex bridge comes up with bogus resources,
> - * we copy the PHB ones in.
> - *
> - * With the current generic PCI code, the PHB bus no longer
> - * has bus->resource[0..4] set, so things are a bit more
> - * tricky.
> - */
> -
> - if (fsl_pcie_bus_fixup)
> - is_pcie = early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP);
> - no_link = !!(hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK);
> -
> - if (bus->parent == hose->bus && (is_pcie || no_link)) {
> - for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; ++i) {
> - struct resource *res = bus->resource[i];
> - struct resource *par;
> -
> - if (!res)
> - continue;
> - if (i == 0)
> - par = &hose->io_resource;
> - else if (i < 4)
> - par = &hose->mem_resources[i-1];
> - else par = NULL;
> -
> - res->start = par ? par->start : 0;
> - res->end = par ? par->end : 0;
> - res->flags = par ? par->flags : 0;
> - }
> - }
> -}
> -
> int __init fsl_add_bridge(struct platform_device *pdev, int is_primary)
> {
> int len;
> @@ -560,475 +474,7 @@ no_bridge:
> pcibios_free_controller(hose);
> return -ENODEV;
> }
> -#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
> -
> -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_fsl_pcie_header);
> -
> -#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
> -struct mpc83xx_pcie_priv {
> - void __iomem *cfg_type0;
> - void __iomem *cfg_type1;
> - u32 dev_base;
> -};
> -
> -struct pex_inbound_window {
> - u32 ar;
> - u32 tar;
> - u32 barl;
> - u32 barh;
> -};
> -
> -/*
> - * With the convention of u-boot, the PCIE outbound window 0 serves
> - * as configuration transactions outbound.
> - */
> -#define PEX_OUTWIN0_BAR 0xCA4
> -#define PEX_OUTWIN0_TAL 0xCA8
> -#define PEX_OUTWIN0_TAH 0xCAC
> -#define PEX_RC_INWIN_BASE 0xE60
> -#define PEX_RCIWARn_EN 0x1
> -
> -static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn)
> -{
> - struct pci_controller *hose = pci_bus_to_host(bus);
> -
> - if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> - /*
> - * Workaround for the HW bug: for Type 0 configure transactions the
> - * PCI-E controller does not check the device number bits and just
> - * assumes that the device number bits are 0.
> - */
> - if (bus->number == hose->first_busno ||
> - bus->primary == hose->first_busno) {
> - if (devfn & 0xf8)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> - }
> -
> - if (ppc_md.pci_exclude_device) {
> - if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
> - return PCIBIOS_DEVICE_NOT_FOUND;
> - }
> -
> - return PCIBIOS_SUCCESSFUL;
> -}
> -
> -static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus,
> - unsigned int devfn, int offset)
> -{
> - struct pci_controller *hose = pci_bus_to_host(bus);
> - struct mpc83xx_pcie_priv *pcie = hose->dn->data;
> - u32 dev_base = bus->number << 24 | devfn << 16;
> - int ret;
> -
> - ret = mpc83xx_pcie_exclude_device(bus, devfn);
> - if (ret)
> - return NULL;
> -
> - offset &= 0xfff;
> -
> - /* Type 0 */
> - if (bus->number == hose->first_busno)
> - return pcie->cfg_type0 + offset;
> -
> - if (pcie->dev_base == dev_base)
> - goto mapped;
> -
> - out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, dev_base);
> -
> - pcie->dev_base = dev_base;
> -mapped:
> - return pcie->cfg_type1 + offset;
> -}
> -
> -static int mpc83xx_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
> - int offset, int len, u32 *val)
> -{
> - void __iomem *cfg_addr;
> -
> - cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
> - if (!cfg_addr)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> -
> - switch (len) {
> - case 1:
> - *val = in_8(cfg_addr);
> - break;
> - case 2:
> - *val = in_le16(cfg_addr);
> - break;
> - default:
> - *val = in_le32(cfg_addr);
> - break;
> - }
> -
> - return PCIBIOS_SUCCESSFUL;
> -}
> -
> -static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
> - int offset, int len, u32 val)
> -{
> - struct pci_controller *hose = pci_bus_to_host(bus);
> - void __iomem *cfg_addr;
> -
> - cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
> - if (!cfg_addr)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> -
> - /* PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS */
> - if (offset == PCI_PRIMARY_BUS && bus->number == hose->first_busno)
> - val &= 0xffffff00;
> -
> - switch (len) {
> - case 1:
> - out_8(cfg_addr, val);
> - break;
> - case 2:
> - out_le16(cfg_addr, val);
> - break;
> - default:
> - out_le32(cfg_addr, val);
> - break;
> - }
> -
> - return PCIBIOS_SUCCESSFUL;
> -}
> -
> -static struct pci_ops mpc83xx_pcie_ops = {
> - .read = mpc83xx_pcie_read_config,
> - .write = mpc83xx_pcie_write_config,
> -};
> -
> -static int __init mpc83xx_pcie_setup(struct pci_controller *hose,
> - struct resource *reg)
> -{
> - struct mpc83xx_pcie_priv *pcie;
> - u32 cfg_bar;
> - int ret = -ENOMEM;
> -
> - pcie = zalloc_maybe_bootmem(sizeof(*pcie), GFP_KERNEL);
> - if (!pcie)
> - return ret;
> -
> - pcie->cfg_type0 = ioremap(reg->start, resource_size(reg));
> - if (!pcie->cfg_type0)
> - goto err0;
> -
> - cfg_bar = in_le32(pcie->cfg_type0 + PEX_OUTWIN0_BAR);
> - if (!cfg_bar) {
> - /* PCI-E isn't configured. */
> - ret = -ENODEV;
> - goto err1;
> - }
> -
> - pcie->cfg_type1 = ioremap(cfg_bar, 0x1000);
> - if (!pcie->cfg_type1)
> - goto err1;
> -
> - WARN_ON(hose->dn->data);
> - hose->dn->data = pcie;
> - hose->ops = &mpc83xx_pcie_ops;
> - hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
> -
> - out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAH, 0);
> - out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, 0);
> -
> - if (fsl_pcie_check_link(hose))
> - hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
> -
> - return 0;
> -err1:
> - iounmap(pcie->cfg_type0);
> -err0:
> - kfree(pcie);
> - return ret;
> -
> -}
> -
> -int __init mpc83xx_add_bridge(struct device_node *dev)
> -{
> - int ret;
> - int len;
> - struct pci_controller *hose;
> - struct resource rsrc_reg;
> - struct resource rsrc_cfg;
> - const int *bus_range;
> - int primary;
> -
> - is_mpc83xx_pci = 1;
> -
> - if (!of_device_is_available(dev)) {
> - pr_warning("%s: disabled by the firmware.\n",
> - dev->full_name);
> - return -ENODEV;
> - }
> - pr_debug("Adding PCI host bridge %s\n", dev->full_name);
> -
> - /* Fetch host bridge registers address */
> - if (of_address_to_resource(dev, 0, &rsrc_reg)) {
> - printk(KERN_WARNING "Can't get pci register base!\n");
> - return -ENOMEM;
> - }
> -
> - memset(&rsrc_cfg, 0, sizeof(rsrc_cfg));
> -
> - if (of_address_to_resource(dev, 1, &rsrc_cfg)) {
> - printk(KERN_WARNING
> - "No pci config register base in dev tree, "
> - "using default\n");
> - /*
> - * MPC83xx supports up to two host controllers
> - * one at 0x8500 has config space registers at 0x8300
> - * one at 0x8600 has config space registers at 0x8380
> - */
> - if ((rsrc_reg.start & 0xfffff) == 0x8500)
> - rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8300;
> - else if ((rsrc_reg.start & 0xfffff) == 0x8600)
> - rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8380;
> - }
> - /*
> - * Controller at offset 0x8500 is primary
> - */
> - if ((rsrc_reg.start & 0xfffff) == 0x8500)
> - primary = 1;
> - else
> - primary = 0;
> -
> - /* Get bus range if any */
> - bus_range = of_get_property(dev, "bus-range", &len);
> - if (bus_range == NULL || len < 2 * sizeof(int)) {
> - printk(KERN_WARNING "Can't get bus-range for %s, assume"
> - " bus 0\n", dev->full_name);
> - }
> -
> - pci_add_flags(PCI_REASSIGN_ALL_BUS);
> - hose = pcibios_alloc_controller(dev);
> - if (!hose)
> - return -ENOMEM;
> -
> - hose->first_busno = bus_range ? bus_range[0] : 0;
> - hose->last_busno = bus_range ? bus_range[1] : 0xff;
> -
> - if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {
> - ret = mpc83xx_pcie_setup(hose, &rsrc_reg);
> - if (ret)
> - goto err0;
> - } else {
> - setup_indirect_pci(hose, rsrc_cfg.start,
> - rsrc_cfg.start + 4, 0);
> - }
> -
> - printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
> - "Firmware bus number: %d->%d\n",
> - (unsigned long long)rsrc_reg.start, hose->first_busno,
> - hose->last_busno);
> -
> - pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
> - hose, hose->cfg_addr, hose->cfg_data);
> -
> - /* Interpret the "ranges" property */
> - /* This also maps the I/O region and sets isa_io/mem_base */
> - pci_process_bridge_OF_ranges(hose, dev, primary);
> -
> - return 0;
> -err0:
> - pcibios_free_controller(hose);
> - return ret;
> -}
> -#endif /* CONFIG_PPC_83xx */
> -
> -u64 fsl_pci_immrbar_base(struct pci_controller *hose)
> -{
> -#ifdef CONFIG_PPC_83xx
> - if (is_mpc83xx_pci) {
> - struct mpc83xx_pcie_priv *pcie = hose->dn->data;
> - struct pex_inbound_window *in;
> - int i;
> -
> - /* Walk the Root Complex Inbound windows to match IMMR base */
> - in = pcie->cfg_type0 + PEX_RC_INWIN_BASE;
> - for (i = 0; i < 4; i++) {
> - /* not enabled, skip */
> - if (!in_le32(&in[i].ar) & PEX_RCIWARn_EN)
> - continue;
> -
> - if (get_immrbase() == in_le32(&in[i].tar))
> - return (u64)in_le32(&in[i].barh) << 32 |
> - in_le32(&in[i].barl);
> - }
> -
> - printk(KERN_WARNING "could not find PCI BAR matching IMMR\n");
> - }
> -#endif
> -
> -#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
> - if (!is_mpc83xx_pci) {
> - u32 base;
> -
> - pci_bus_read_config_dword(hose->bus,
> - PCI_DEVFN(0, 0), PCI_BASE_ADDRESS_0, &base);
> - return base;
> - }
> -#endif
> -
> - return 0;
> -}
>
> -#ifdef CONFIG_E500
> -static int mcheck_handle_load(struct pt_regs *regs, u32 inst)
> -{
> - unsigned int rd, ra, rb, d;
> -
> - rd = get_rt(inst);
> - ra = get_ra(inst);
> - rb = get_rb(inst);
> - d = get_d(inst);
> -
> - switch (get_op(inst)) {
> - case 31:
> - switch (get_xop(inst)) {
> - case OP_31_XOP_LWZX:
> - case OP_31_XOP_LWBRX:
> - regs->gpr[rd] = 0xffffffff;
> - break;
> -
> - case OP_31_XOP_LWZUX:
> - regs->gpr[rd] = 0xffffffff;
> - regs->gpr[ra] += regs->gpr[rb];
> - break;
> -
> - case OP_31_XOP_LBZX:
> - regs->gpr[rd] = 0xff;
> - break;
> -
> - case OP_31_XOP_LBZUX:
> - regs->gpr[rd] = 0xff;
> - regs->gpr[ra] += regs->gpr[rb];
> - break;
> -
> - case OP_31_XOP_LHZX:
> - case OP_31_XOP_LHBRX:
> - regs->gpr[rd] = 0xffff;
> - break;
> -
> - case OP_31_XOP_LHZUX:
> - regs->gpr[rd] = 0xffff;
> - regs->gpr[ra] += regs->gpr[rb];
> - break;
> -
> - case OP_31_XOP_LHAX:
> - regs->gpr[rd] = ~0UL;
> - break;
> -
> - case OP_31_XOP_LHAUX:
> - regs->gpr[rd] = ~0UL;
> - regs->gpr[ra] += regs->gpr[rb];
> - break;
> -
> - default:
> - return 0;
> - }
> - break;
> -
> - case OP_LWZ:
> - regs->gpr[rd] = 0xffffffff;
> - break;
> -
> - case OP_LWZU:
> - regs->gpr[rd] = 0xffffffff;
> - regs->gpr[ra] += (s16)d;
> - break;
> -
> - case OP_LBZ:
> - regs->gpr[rd] = 0xff;
> - break;
> -
> - case OP_LBZU:
> - regs->gpr[rd] = 0xff;
> - regs->gpr[ra] += (s16)d;
> - break;
> -
> - case OP_LHZ:
> - regs->gpr[rd] = 0xffff;
> - break;
> -
> - case OP_LHZU:
> - regs->gpr[rd] = 0xffff;
> - regs->gpr[ra] += (s16)d;
> - break;
> -
> - case OP_LHA:
> - regs->gpr[rd] = ~0UL;
> - break;
> -
> - case OP_LHAU:
> - regs->gpr[rd] = ~0UL;
> - regs->gpr[ra] += (s16)d;
> - break;
> -
> - default:
> - return 0;
> - }
> -
> - return 1;
> -}
> -
> -static int is_in_pci_mem_space(phys_addr_t addr)
> -{
> - struct pci_controller *hose;
> - struct resource *res;
> - int i;
> -
> - list_for_each_entry(hose, &hose_list, list_node) {
> - if (!(hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG))
> - continue;
> -
> - for (i = 0; i < 3; i++) {
> - res = &hose->mem_resources[i];
> - if ((res->flags & IORESOURCE_MEM) &&
> - addr >= res->start && addr <= res->end)
> - return 1;
> - }
> - }
> - return 0;
> -}
> -
> -int fsl_pci_mcheck_exception(struct pt_regs *regs)
> -{
> - u32 inst;
> - int ret;
> - phys_addr_t addr = 0;
> -
> - /* Let KVM/QEMU deal with the exception */
> - if (regs->msr & MSR_GS)
> - return 0;
> -
> -#ifdef CONFIG_PHYS_64BIT
> - addr = mfspr(SPRN_MCARU);
> - addr <<= 32;
> -#endif
> - addr += mfspr(SPRN_MCAR);
> -
> - if (is_in_pci_mem_space(addr)) {
> - if (user_mode(regs)) {
> - pagefault_disable();
> - ret = get_user(regs->nip, &inst);
> - pagefault_enable();
> - } else {
> - ret = probe_kernel_address(regs->nip, inst);
> - }
> -
> - if (mcheck_handle_load(regs, inst)) {
> - regs->nip += 4;
> - return 1;
> - }
> - }
> -
> - return 0;
> -}
> -#endif
> -
> -#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
> static const struct of_device_id pci_ids[] = {
> { .compatible = "fsl,mpc8540-pci", },
> { .compatible = "fsl,mpc8548-pcie", },
> @@ -1050,40 +496,6 @@ static const struct of_device_id pci_ids[] = {
> {},
> };
>
> -struct device_node *fsl_pci_primary;
> -
> -void fsl_pci_assign_primary(void)
> -{
> - struct device_node *np;
> -
> - /* Callers can specify the primary bus using other means. */
> - if (fsl_pci_primary)
> - return;
> -
> - /* If a PCI host bridge contains an ISA node, it's primary. */
> - np = of_find_node_by_type(NULL, "isa");
> - while ((fsl_pci_primary = of_get_parent(np))) {
> - of_node_put(np);
> - np = fsl_pci_primary;
> -
> - if (of_match_node(pci_ids, np) && of_device_is_available(np))
> - return;
> - }
> -
> - /*
> - * If there's no PCI host bridge with ISA, arbitrarily
> - * designate one as primary. This can go away once
> - * various bugs with primary-less systems are fixed.
> - */
> - for_each_matching_node(np, pci_ids) {
> - if (of_device_is_available(np)) {
> - fsl_pci_primary = np;
> - of_node_put(np);
> - return;
> - }
> - }
> -}
> -
> static int fsl_pci_probe(struct platform_device *pdev)
> {
> int ret;
> @@ -1143,4 +555,3 @@ static int __init fsl_pci_init(void)
> return platform_driver_register(&fsl_pci_driver);
> }
> arch_initcall(fsl_pci_init);
> -#endif
> diff --git a/arch/powerpc/sysdev/fsl_pci.h b/include/linux/fsl/pci-common.h
> similarity index 79%
> copy from arch/powerpc/sysdev/fsl_pci.h
> copy to include/linux/fsl/pci-common.h
> index 8d455df..5e4f683 100644
> --- a/arch/powerpc/sysdev/fsl_pci.h
> +++ b/include/linux/fsl/pci-common.h
> @@ -1,5 +1,5 @@
> /*
> - * MPC85xx/86xx PCI Express structure define
> + * MPC85xx/86xx/LS PCI Express structure define
> *
> * Copyright 2007,2011 Freescale Semiconductor, Inc
> *
> @@ -11,15 +11,8 @@
> */
>
> #ifdef __KERNEL__
> -#ifndef __POWERPC_FSL_PCI_H
> -#define __POWERPC_FSL_PCI_H
> -
> -struct platform_device;
> -
> -
> -/* FSL PCI controller BRR1 register */
> -#define PCI_FSL_BRR1 0xbf8
> -#define PCI_FSL_BRR1_VER 0xffff
> +#ifndef __PCI_COMMON_H
> +#define __PCI_COMMON_H
>
> #define PCIE_LTSSM 0x0404 /* PCIE Link Training and Status */
> #define PCIE_LTSSM_L0 0x16 /* L0 state */
> @@ -52,7 +45,7 @@ struct pci_inbound_window_regs {
> u8 res2[12];
> };
>
> -/* PCI/PCI Express IO block registers for 85xx/86xx */
> +/* PCI/PCI Express IO block registers for 85xx/86xx/LS */
> struct ccsr_pci {
> __be32 config_addr; /* 0x.000 - PCI/PCIE Configuration Address Register */
> __be32 config_data; /* 0x.004 - PCI/PCIE Configuration Data Register */
> @@ -109,33 +102,5 @@ struct ccsr_pci {
>
> };
>
> -extern int fsl_add_bridge(struct platform_device *pdev, int is_primary);
> -extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
> -extern int mpc83xx_add_bridge(struct device_node *dev);
> -u64 fsl_pci_immrbar_base(struct pci_controller *hose);
> -
> -extern struct device_node *fsl_pci_primary;
> -
> -#ifdef CONFIG_PCI
> -void fsl_pci_assign_primary(void);
> -#else
> -static inline void fsl_pci_assign_primary(void) {}
> -#endif
> -
> -#ifdef CONFIG_EDAC_MPC85XX
> -int mpc85xx_pci_err_probe(struct platform_device *op);
> -#else
> -static inline int mpc85xx_pci_err_probe(struct platform_device *op)
> -{
> - return -ENOTSUPP;
> -}
> -#endif
> -
> -#ifdef CONFIG_FSL_PCI
> -extern int fsl_pci_mcheck_exception(struct pt_regs *);
> -#else
> -static inline int fsl_pci_mcheck_exception(struct pt_regs *regs) {return 0; }
> -#endif
> -
> -#endif /* __POWERPC_FSL_PCI_H */
> +#endif /* __PCI_COMMON_H */
> #endif /* __KERNEL__ */
> --
> 1.8.1.2
>
>
^ permalink raw reply
* [PATCH 3/3 v3] powerpc: cleanup panic_timeout
From: Jason Baron @ 2013-11-25 23:23 UTC (permalink / raw)
To: mingo; +Cc: felipe.contreras, linux-kernel, ralf, paulus, akpm, linuxppc-dev
In-Reply-To: <cover.1385418410.git.jbaron@akamai.com>
Default CONFIG_PANIC_TIMEOUT to 180 seconds on powerpc. The pSeries continue
to set the timeout to 10 seconds at run-time. Thus, there's a small window
where we don't have the correct value on pSeries, but if this is only run-time
discoverable we don't have a better option. In any case, if the user changes
the default setting of 180 seconds, we honor that user setting.
Signed-off-by: Jason Baron <jbaron@akamai.com>
---
arch/powerpc/Kconfig | 4 ++++
arch/powerpc/include/asm/setup.h | 1 +
arch/powerpc/kernel/setup_32.c | 3 ---
arch/powerpc/kernel/setup_64.c | 3 ---
arch/powerpc/platforms/pseries/setup.c | 2 +-
5 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index b44b52c..b2be8e8 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -147,6 +147,10 @@ config EARLY_PRINTK
bool
default y
+config PANIC_TIMEOUT
+ int
+ default 180
+
config COMPAT
bool
default y if PPC64
diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h
index 703a841..11ba86e 100644
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -26,6 +26,7 @@ extern void reloc_got2(unsigned long);
void check_for_initrd(void);
void do_init_bootmem(void);
void setup_panic(void);
+#define ARCH_PANIC_TIMEOUT 180
#endif /* !__ASSEMBLY__ */
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index b903dc5..2b0da27 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -296,9 +296,6 @@ void __init setup_arch(char **cmdline_p)
if (cpu_has_feature(CPU_FTR_UNIFIED_ID_CACHE))
ucache_bsize = icache_bsize = dcache_bsize;
- /* reboot on panic */
- panic_timeout = 180;
-
if (ppc_md.panic)
setup_panic();
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 4085aaa..856dd4e 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -588,9 +588,6 @@ void __init setup_arch(char **cmdline_p)
dcache_bsize = ppc64_caches.dline_size;
icache_bsize = ppc64_caches.iline_size;
- /* reboot on panic */
- panic_timeout = 180;
-
if (ppc_md.panic)
setup_panic();
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index c1f1908..6f76ae4 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -470,7 +470,7 @@ static long pseries_little_endian_exceptions(void)
static void __init pSeries_setup_arch(void)
{
- panic_timeout = 10;
+ set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT);
/* Discover PIC type and setup ppc_md accordingly */
pseries_discover_pic();
--
1.8.2
^ permalink raw reply related
* Re: [PATCH 1/9 v2] pci:msi: add weak function for returning msi region info
From: Bjorn Helgaas @ 2013-11-25 23:36 UTC (permalink / raw)
To: Bharat Bhushan
Cc: linux-pci, joro, stuart.yoder, iommu, agraf, Bharat Bhushan,
alex.williamson, scottwood, linuxppc-dev, linux-kernel
In-Reply-To: <1384838233-24847-2-git-send-email-Bharat.Bhushan@freescale.com>
On Tue, Nov 19, 2013 at 10:47:05AM +0530, Bharat Bhushan wrote:
> In Aperture type of IOMMU (like FSL PAMU), VFIO-iommu system need to know
> the MSI region to map its window in h/w. This patch just defines the
> required weak functions only and will be used by followup patches.
>
> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
> ---
> v1->v2
> - Added description on "struct msi_region"
>
> drivers/pci/msi.c | 22 ++++++++++++++++++++++
> include/linux/msi.h | 14 ++++++++++++++
> 2 files changed, 36 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index d5f90d6..2643a29 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -67,6 +67,28 @@ int __weak arch_msi_check_device(struct pci_dev *dev, int nvec, int type)
> return chip->check_device(chip, dev, nvec, type);
> }
>
> +int __weak arch_msi_get_region_count(void)
> +{
> + return 0;
> +}
> +
> +int __weak arch_msi_get_region(int region_num, struct msi_region *region)
> +{
> + return 0;
> +}
> +
> +int msi_get_region_count(void)
> +{
> + return arch_msi_get_region_count();
> +}
> +EXPORT_SYMBOL(msi_get_region_count);
> +
> +int msi_get_region(int region_num, struct msi_region *region)
> +{
> + return arch_msi_get_region(region_num, region);
> +}
> +EXPORT_SYMBOL(msi_get_region);
> +
> int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
> {
> struct msi_desc *entry;
> diff --git a/include/linux/msi.h b/include/linux/msi.h
> index b17ead8..ade1480 100644
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -51,6 +51,18 @@ struct msi_desc {
> };
>
> /*
> + * This structure is used to get
> + * - physical address
> + * - size
> + * of a msi region
> + */
> +struct msi_region {
> + int region_num; /* MSI region number */
> + dma_addr_t addr; /* Address of MSI region */
> + size_t size; /* Size of MSI region */
> +};
> +
> +/*
> * The arch hooks to setup up msi irqs. Those functions are
> * implemented as weak symbols so that they /can/ be overriden by
> * architecture specific code if needed.
> @@ -64,6 +76,8 @@ void arch_restore_msi_irqs(struct pci_dev *dev, int irq);
>
> void default_teardown_msi_irqs(struct pci_dev *dev);
> void default_restore_msi_irqs(struct pci_dev *dev, int irq);
> +int arch_msi_get_region_count(void);
> +int arch_msi_get_region(int region_num, struct msi_region *region);
It doesn't look like any of this (struct msi_region, msi_get_region(),
msi_get_region_count()) is actually used by drivers/pci/msi.c, so I don't
think it needs to be declared in generic code. It looks like it's only
used in drivers/vfio/vfio_iommu_fsl_pamu.c, where you already know you have
an FSL IOMMU, and you can just call FSL-specific interfaces directly.
Bjorn
>
> struct msi_chip {
> struct module *owner;
> --
> 1.7.0.4
>
>
^ permalink raw reply
* [PATCH] boot: enable support for bootindex
From: Alexey Kardashevskiy @ 2013-11-26 4:07 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Alexey Kardashevskiy, Paul Mackerras, Nikunj A Dadhania
In-Reply-To: <1385364460-24332-1-git-send-email-aik@ozlabs.ru>
QEMU supports a bootindex property for every device in the command line.
With the respective support from the QEMU side, this change is enough
to make SLOF go through the list and try to boot.
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
That seems to work but it also seems too easy. What do I miss here?
---
board-qemu/slof/qemu-bootlist.fs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/board-qemu/slof/qemu-bootlist.fs b/board-qemu/slof/qemu-bootlist.fs
index 7e9482d..4778e16 100644
--- a/board-qemu/slof/qemu-bootlist.fs
+++ b/board-qemu/slof/qemu-bootlist.fs
@@ -26,6 +26,12 @@ defer add-boot-device
;
: qemu-read-bootlist ( -- )
+ \ See if QEMU has set exact boot device list
+ " qemu,boot-list" get-chosen IF
+ s" boot-device" $setenv
+ EXIT
+ THEN
+
0 0 set-boot-device
" qemu,boot-device" get-chosen not IF
--
1.8.4.rc4
^ permalink raw reply related
* RE: [V3 01/10] perf: New conditional branch filter criteria in branch stack sampling
From: mpe@ellerman.id.au @ 2013-11-26 6:06 UTC (permalink / raw)
To: linuxppc-dev, linux-kernel; +Cc: mikey, sukadev, eranian, michaele
In-Reply-To: <1381906617-11392-2-git-send-email-khandual@linux.vnet.ibm.com>
Ideally your commit subject would contain a verb, preferably in the present
tense.
I think simply "perf: Add PERF_SAMPLE_BRANCH_COND" would be clearer.
On Wed, 2013-16-10 at 06:56:48 UTC, Anshuman Khandual wrote:
> POWER8 PMU based BHRB supports filtering for conditional branches.
> This patch introduces new branch filter PERF_SAMPLE_BRANCH_COND which
> will extend the existing perf ABI. Other architectures can provide
> this functionality with either HW filtering support (if present) or
> with SW filtering of instructions.
>
> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> Reviewed-by: Stephane Eranian <eranian@google.com>
> ---
> include/uapi/linux/perf_event.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
> index 0b1df41..5da52b6 100644
> --- a/include/uapi/linux/perf_event.h
> +++ b/include/uapi/linux/perf_event.h
> @@ -160,8 +160,9 @@ enum perf_branch_sample_type {
> PERF_SAMPLE_BRANCH_ABORT_TX = 1U << 7, /* transaction aborts */
> PERF_SAMPLE_BRANCH_IN_TX = 1U << 8, /* in transaction */
> PERF_SAMPLE_BRANCH_NO_TX = 1U << 9, /* not in transaction */
> + PERF_SAMPLE_BRANCH_COND = 1U << 10, /* conditional branches */
>
> - PERF_SAMPLE_BRANCH_MAX = 1U << 10, /* non-ABI */
> + PERF_SAMPLE_BRANCH_MAX = 1U << 11, /* non-ABI */
> };
This no longer applies against Linus' tree, you'll need to rebase it.
cheers
^ permalink raw reply
* RE: [V3 02/10] powerpc, perf: Enable conditional branch filter for POWER8
From: mpe@ellerman.id.au @ 2013-11-26 6:06 UTC (permalink / raw)
To: linuxppc-dev, linux-kernel; +Cc: mikey, sukadev, eranian, michaele
In-Reply-To: <1381906617-11392-3-git-send-email-khandual@linux.vnet.ibm.com>
On Wed, 2013-16-10 at 06:56:49 UTC, Anshuman Khandual wrote:
> Enables conditional branch filter support for POWER8
> utilizing MMCRA register based filter and also invalidates
> a BHRB branch filter combination involving conditional
> branches.
>
> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> ---
> arch/powerpc/perf/power8-pmu.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
> index 2ee4a70..6e28587 100644
> --- a/arch/powerpc/perf/power8-pmu.c
> +++ b/arch/powerpc/perf/power8-pmu.c
> @@ -580,11 +580,21 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type)
> if (branch_sample_type & PERF_SAMPLE_BRANCH_IND_CALL)
> return -1;
>
> + /* Invalid branch filter combination - HW does not support */
> + if ((branch_sample_type & PERF_SAMPLE_BRANCH_ANY_CALL) &&
> + (branch_sample_type & PERF_SAMPLE_BRANCH_COND))
> + return -1;
What this doesn't make obvious is that the hardware doesn't support any
combinations. It just happens that these are the only two possibilities we
allow, and so this is the only combination we have to disallow.
>
> if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY_CALL) {
> pmu_bhrb_filter |= POWER8_MMCRA_IFM1;
> return pmu_bhrb_filter;
> }
>
> + if (branch_sample_type & PERF_SAMPLE_BRANCH_COND) {
> + pmu_bhrb_filter |= POWER8_MMCRA_IFM3;
> + return pmu_bhrb_filter;
> + }
> +
> /* Every thing else is unsupported */
> return -1;
> }
I think it would be clearer if we actually checked for the possibilities we
allow and let everything else fall through, eg:
/* Ignore user/kernel/hv bits */
branch_sample_type &= ~PERF_SAMPLE_BRANCH_PLM_ALL;
if (branch_sample_type == PERF_SAMPLE_BRANCH_ANY)
return 0;
if (branch_sample_type == PERF_SAMPLE_BRANCH_ANY_CALL)
return POWER8_MMCRA_IFM1;
if (branch_sample_type == PERF_SAMPLE_BRANCH_COND)
return POWER8_MMCRA_IFM3;
return -1;
cheers
^ permalink raw reply
* Re: [PATCH v2] powerpc/gpio: Fix the wrong GPIO input data on MPC8572/MPC8536
From: Liu Gang @ 2013-11-26 9:20 UTC (permalink / raw)
To: Kumar Gala; +Cc: b07421, linus.walleij, r61911, linux-gpio, agust, linuxppc-dev
In-Reply-To: <D582D1B3-B20B-4860-B1DE-DDCD04B5D0BA@kernel.crashing.org>
On Fri, 2013-11-22 at 14:51 -0600, Kumar Gala wrote:
> > drivers/gpio/gpio-mpc8xxx.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
> > index 914e859..d7d6d72 100644
> > --- a/drivers/gpio/gpio-mpc8xxx.c
> > +++ b/drivers/gpio/gpio-mpc8xxx.c
> > @@ -70,10 +70,14 @@ static int mpc8572_gpio_get(struct gpio_chip *gc, unsigned int gpio)
> > u32 val;
> > struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc);
> > struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm);
> > + u32 out_mask, out_shadow;
> >
> > - val = in_be32(mm->regs + GPIO_DAT) & ~in_be32(mm->regs + GPIO_DIR);
> > + out_mask = in_be32(mm->regs + GPIO_DIR);
> >
> > - return (val | mpc8xxx_gc->data) & mpc8xxx_gpio2mask(gpio);
> > + val = in_be32(mm->regs + GPIO_DAT) & ~out_mask;
> > + out_shadow = mpc8xxx_gc->data & out_mask;
> > +
> > + return (val | out_shadow) & mpc8xxx_gpio2mask(gpio);
> > }
>
> I really think a comment is worth adding here about why we do this.
>
> - k
Hi, Kumar,
Thanks for your comment. In fact, there already had some comments above
the function:
/* Workaround GPIO 1 errata on MPC8572/MPC8536. The status of GPIOs
* defined as output cannot be determined by reading GPDAT register,
* so we use shadow data register instead. The status of input pins
* is determined by reading GPDAT register.
*/
Best Regards,
Liu Gang
^ permalink raw reply
* Re: [V3 01/10] perf: New conditional branch filter criteria in branch stack sampling
From: Anshuman Khandual @ 2013-11-26 10:15 UTC (permalink / raw)
To: mpe@ellerman.id.au
Cc: mikey, michaele, linux-kernel, eranian, linuxppc-dev, sukadev
In-Reply-To: <20131126060618.917ED2C00A9@ozlabs.org>
On 11/26/2013 11:36 AM, mpe@ellerman.id.au wrote:
> Ideally your commit subject would contain a verb, preferably in the present
> tense.
>
> I think simply "perf: Add PERF_SAMPLE_BRANCH_COND" would be clearer.
Sure, will change it.
>
> On Wed, 2013-16-10 at 06:56:48 UTC, Anshuman Khandual wrote:
>> POWER8 PMU based BHRB supports filtering for conditional branches.
>> This patch introduces new branch filter PERF_SAMPLE_BRANCH_COND which
>> will extend the existing perf ABI. Other architectures can provide
>> this functionality with either HW filtering support (if present) or
>> with SW filtering of instructions.
>>
>> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
>> Reviewed-by: Stephane Eranian <eranian@google.com>
>> ---
>> include/uapi/linux/perf_event.h | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
>> index 0b1df41..5da52b6 100644
>> --- a/include/uapi/linux/perf_event.h
>> +++ b/include/uapi/linux/perf_event.h
>> @@ -160,8 +160,9 @@ enum perf_branch_sample_type {
>> PERF_SAMPLE_BRANCH_ABORT_TX = 1U << 7, /* transaction aborts */
>> PERF_SAMPLE_BRANCH_IN_TX = 1U << 8, /* in transaction */
>> PERF_SAMPLE_BRANCH_NO_TX = 1U << 9, /* not in transaction */
>> + PERF_SAMPLE_BRANCH_COND = 1U << 10, /* conditional branches */
>>
>> - PERF_SAMPLE_BRANCH_MAX = 1U << 10, /* non-ABI */
>> + PERF_SAMPLE_BRANCH_MAX = 1U << 11, /* non-ABI */
>> };
>
> This no longer applies against Linus' tree, you'll need to rebase it.
Okay
^ permalink raw reply
* Re: [V3 02/10] powerpc, perf: Enable conditional branch filter for POWER8
From: Anshuman Khandual @ 2013-11-26 10:40 UTC (permalink / raw)
To: mpe@ellerman.id.au
Cc: mikey, michaele, linux-kernel, eranian, linuxppc-dev, sukadev
In-Reply-To: <20131126060619.48B5D2C00BC@ozlabs.org>
On 11/26/2013 11:36 AM, mpe@ellerman.id.au wrote:
> On Wed, 2013-16-10 at 06:56:49 UTC, Anshuman Khandual wrote:
>> Enables conditional branch filter support for POWER8
>> utilizing MMCRA register based filter and also invalidates
>> a BHRB branch filter combination involving conditional
>> branches.
>>
>> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
>> ---
>> arch/powerpc/perf/power8-pmu.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
>> index 2ee4a70..6e28587 100644
>> --- a/arch/powerpc/perf/power8-pmu.c
>> +++ b/arch/powerpc/perf/power8-pmu.c
>> @@ -580,11 +580,21 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type)
>> if (branch_sample_type & PERF_SAMPLE_BRANCH_IND_CALL)
>> return -1;
>>
>> + /* Invalid branch filter combination - HW does not support */
>> + if ((branch_sample_type & PERF_SAMPLE_BRANCH_ANY_CALL) &&
>> + (branch_sample_type & PERF_SAMPLE_BRANCH_COND))
>> + return -1;
>
> What this doesn't make obvious is that the hardware doesn't support any
> combinations. It just happens that these are the only two possibilities we
> allow, and so this is the only combination we have to disallow.
>
>>
>> if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY_CALL) {
>> pmu_bhrb_filter |= POWER8_MMCRA_IFM1;
>> return pmu_bhrb_filter;
>> }
>>
>> + if (branch_sample_type & PERF_SAMPLE_BRANCH_COND) {
>> + pmu_bhrb_filter |= POWER8_MMCRA_IFM3;
>> + return pmu_bhrb_filter;
>> + }
>> +
>> /* Every thing else is unsupported */
>> return -1;
>> }
>
> I think it would be clearer if we actually checked for the possibilities we
> allow and let everything else fall through, eg:
>
> /* Ignore user/kernel/hv bits */
> branch_sample_type &= ~PERF_SAMPLE_BRANCH_PLM_ALL;
>
> if (branch_sample_type == PERF_SAMPLE_BRANCH_ANY)
> return 0;
>
> if (branch_sample_type == PERF_SAMPLE_BRANCH_ANY_CALL)
> return POWER8_MMCRA_IFM1;
>
> if (branch_sample_type == PERF_SAMPLE_BRANCH_COND)
> return POWER8_MMCRA_IFM3;
>
> return -1;
>
Please look at the 9th patch (power8, perf: Change BHRB branch filter configuration).
All these issues are taken care of in this patch. It clearly indicates that any combination
of HW BHRB filters will not be supported in the PMU and hence zero out the HW filter component
and processes all of those filters in the SW.
^ permalink raw reply
* Re: Problem reading and programming memory location...
From: neorf3k @ 2013-11-26 18:29 UTC (permalink / raw)
To: Anatolij Gustschin; +Cc: Linux Ppc Dev List Dev List
In-Reply-To: <20131119224505.7a31b69c@crub>
Hi Anatolij,
we have tried again=85 but the problem is still there=85 we are not able =
to read/write, not only CS4, but also CS1, CS2, CS3, etc=85
According to you, could we fix the problem if we include our Virtex FPGA =
in Device Tree?
U-Boot has been patched (not by us), for CS4, with:
+#define CONFIG_SYS_CS0_START CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_CS0_SIZE CONFIG_SYS_FLASH_SIZE
+#define CONFIG_SYS_CS0_CFG 0x000ADD00
+#define CONFIG_SYS_CS3_START 0x10000000 //
+#define CONFIG_SYS_CS3_SIZE 0x00020000 //
+#define CONFIG_SYS_CS3_CFG 0x0002DF00 //=20
+
+#define CONFIG_SYS_CS4_START 0x10020000 //
+#define CONFIG_SYS_CS4_SIZE 0x00020000 //
+#define CONFIG_SYS_CS4_CFG 0x0002DC00 //=20
+
+#define CONFIG_SYS_CS5_START 0x11000000 //
+#define CONFIG_SYS_CS5_SIZE 0x01000000 //
+#define CONFIG_SYS_CS5_CFG 0x0002DD00 //=20
+
+#define CONFIG_SYS_CS_BURST 0x00000000
+#define CONFIG_SYS_CS_DEADCYCLE 0x33333333
+
+#define CONFIG_SYS_RESET_ADDRESS 0xff000000
but CONFIG_SYS_CS4_SIZE should be: 0x00010000 ...
Thank you
Lorenzo
On 19/nov/2013, at 10:45 PM, Anatolij Gustschin <agust@denx.de> wrote:
> Hi Lorenzo,
>=20
> On Tue, 19 Nov 2013 11:20:24 +0100
> neorf3k <neorf3k@gmail.com> wrote:
>=20
>> Hello Anatolij, this is our code, used at University, but again it =
doesn=92t work=85
>>=20
>> How i told, the only information we have about that reg are:
>>=20
>> Chip select 4 specification:
>> Lp_cs4
>> bus size: 8 bit
>> bus control: 2 wait state R/W ACK disabled
>> size allocated: 4 KByte
>>=20
>> Our Register 8 bit LP_cs4 (we want to write)
>>=20
>> cs4 offset: 0x001
>=20
> is the byte in FPGA at offset 0x0 writable? In your code you
> currently test read/write access to the byte at offset 0x0.
>=20
> If the read/write access works under U-Boot, then maybe the
> chip select parameters for CS4 are configured differently
> in U-Boot. You can dump the Chip Select 4 configuration
> registers under U-Boot and compare. Is address- and data-bus
> to the FPGA multipexed? Another possible reason for non-working
> access could be that the configured CS4 range 0x10020000 - 0x10030000
> overlaps with configured range for CS0, CS1, CS2 or CS3. Can you
> verify that no such overlapping exists.
>=20
> Thanks,
>=20
> Anatolij
^ permalink raw reply
* [PATCH 07/25] block: Convert bio_for_each_segment() to bvec_iter
From: Kent Overstreet @ 2013-11-27 0:45 UTC (permalink / raw)
To: linux-kernel, linux-fsdevel, hch
Cc: Jeremy Fitzhardinge, Herton Ronaldo Krzesinski, Jan Kara,
Ed L. Cashin, Neil Brown, support, Paul Clements, virtualization,
Keith Busch, linux-mm, Quoc-Son Anh, Paul Mackerras,
James E.J. Bottomley, Stephen Hemminger, Joshua Morris,
Nick Piggin, devel, linux-s390, xen-devel, Jerome Marchand,
Mike Snitzer, linux-scsi, Minchan Kim, Sebastian Ott,
Philip Kelleher, Steven Whitehouse, cluster-devel,
Geert Uytterhoeven, Asai Thambi S P, Lars Ellenberg, Sam Bradshaw,
Nitin Gupta, cbe-oss-dev, Alex Elder, Sage Weil,
Konrad Rzeszutek Wilk, Heiko Carstens, DL-MPTFusionLinux,
Chris Metcalf, linux-raid, Tejun Heo, Kent Overstreet,
Alexander Viro, Selvan Mani, ceph-devel, drbd-user,
Nagalakshmi Nandigama, Yehuda Sadeh, Jens Axboe, Seth Jennings,
nbd-general, Martin K. Petersen, Geoff Levand, Jiri Kosina,
Darrick J. Wong, linux-m68k, Jim Paris, Sreekanth Reddy,
Vivek Goyal, Greg Kroah-Hartman, Martin Schwidefsky, linux390,
Andrew Morton, linuxppc-dev, Guo Chao, Matthew Wilcox
In-Reply-To: <1385513128-5035-1-git-send-email-kmo@daterainc.com>
More prep work for immutable biovecs - with immutable bvecs drivers
won't be able to use the biovec directly, they'll need to use helpers
that take into account bio->bi_iter.bi_bvec_done.
This updates callers for the new usage without changing the
implementation yet.
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: "Ed L. Cashin" <ecashin@coraid.com>
Cc: Nick Piggin <npiggin@kernel.dk>
Cc: Lars Ellenberg <drbd-dev@lists.linbit.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Paul Clements <Paul.Clements@steeleye.com>
Cc: Jim Paris <jim@jtan.com>
Cc: Geoff Levand <geoff@infradead.org>
Cc: Yehuda Sadeh <yehuda@inktank.com>
Cc: Sage Weil <sage@inktank.com>
Cc: Alex Elder <elder@inktank.com>
Cc: ceph-devel@vger.kernel.org
Cc: Joshua Morris <josh.h.morris@us.ibm.com>
Cc: Philip Kelleher <pjk1939@linux.vnet.ibm.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Neil Brown <neilb@suse.de>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: linux390@de.ibm.com
Cc: Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com>
Cc: Sreekanth Reddy <Sreekanth.Reddy@lsi.com>
Cc: support@lsi.com
Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Steven Whitehouse <swhiteho@redhat.com>
Cc: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Guo Chao <yan@linux.vnet.ibm.com>
Cc: Asai Thambi S P <asamymuthupa@micron.com>
Cc: Selvan Mani <smani@micron.com>
Cc: Sam Bradshaw <sbradshaw@micron.com>
Cc: Matthew Wilcox <matthew.r.wilcox@intel.com>
Cc: Keith Busch <keith.busch@intel.com>
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Quoc-Son Anh <quoc-sonx.anh@intel.com>
Cc: Sebastian Ott <sebott@linux.vnet.ibm.com>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Jerome Marchand <jmarchan@redhat.com>
Cc: Seth Jennings <sjenning@linux.vnet.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Jan Kara <jack@suse.cz>
Cc: linux-m68k@lists.linux-m68k.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: drbd-user@lists.linbit.com
Cc: nbd-general@lists.sourceforge.net
Cc: cbe-oss-dev@lists.ozlabs.org
Cc: xen-devel@lists.xensource.com
Cc: virtualization@lists.linux-foundation.org
Cc: linux-raid@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: DL-MPTFusionLinux@lsi.com
Cc: linux-scsi@vger.kernel.org
Cc: devel@driverdev.osuosl.org
Cc: linux-fsdevel@vger.kernel.org
Cc: cluster-devel@redhat.com
Cc: linux-mm@kvack.org
Acked-by: Geoff Levand <geoff@infradead.org>
---
arch/m68k/emu/nfblock.c | 11 ++---
arch/powerpc/sysdev/axonram.c | 18 ++++----
block/blk-core.c | 4 +-
block/blk-merge.c | 49 ++++++++++----------
drivers/block/aoe/aoecmd.c | 16 +++----
drivers/block/brd.c | 12 ++---
drivers/block/drbd/drbd_main.c | 27 ++++++-----
drivers/block/drbd/drbd_receiver.c | 13 +++---
drivers/block/drbd/drbd_worker.c | 8 ++--
drivers/block/floppy.c | 12 ++---
drivers/block/loop.c | 23 +++++-----
drivers/block/mtip32xx/mtip32xx.c | 13 +++---
drivers/block/nbd.c | 12 ++---
drivers/block/nvme-core.c | 33 ++++++++------
drivers/block/ps3disk.c | 10 ++---
drivers/block/ps3vram.c | 10 ++---
drivers/block/rbd.c | 38 ++++++++--------
drivers/block/rsxx/dma.c | 11 ++---
drivers/md/bcache/btree.c | 4 +-
drivers/md/bcache/debug.c | 19 ++++----
drivers/md/bcache/io.c | 69 ++++++++++++-----------------
drivers/md/bcache/request.c | 26 +++++------
drivers/md/raid5.c | 12 ++---
drivers/s390/block/dasd_diag.c | 10 ++---
drivers/s390/block/dasd_eckd.c | 48 ++++++++++----------
drivers/s390/block/dasd_fba.c | 26 +++++------
drivers/s390/block/dcssblk.c | 16 +++----
drivers/s390/block/scm_blk.c | 8 ++--
drivers/s390/block/scm_blk_cluster.c | 4 +-
drivers/s390/block/xpram.c | 10 ++---
drivers/scsi/mpt2sas/mpt2sas_transport.c | 31 ++++++-------
drivers/scsi/mpt3sas/mpt3sas_transport.c | 31 ++++++-------
drivers/staging/lustre/lustre/llite/lloop.c | 14 +++---
drivers/staging/zram/zram_drv.c | 19 ++++----
fs/bio-integrity.c | 30 +++++++------
fs/bio.c | 22 ++++-----
include/linux/bio.h | 28 ++++++------
include/linux/blkdev.h | 7 +--
mm/bounce.c | 44 +++++++++---------
39 files changed, 401 insertions(+), 397 deletions(-)
diff --git a/arch/m68k/emu/nfblock.c b/arch/m68k/emu/nfblock.c
index 0a9d0b3..2d75ae2 100644
--- a/arch/m68k/emu/nfblock.c
+++ b/arch/m68k/emu/nfblock.c
@@ -62,17 +62,18 @@ struct nfhd_device {
static void nfhd_make_request(struct request_queue *queue, struct bio *bio)
{
struct nfhd_device *dev = queue->queuedata;
- struct bio_vec *bvec;
- int i, dir, len, shift;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
+ int dir, len, shift;
sector_t sec = bio->bi_iter.bi_sector;
dir = bio_data_dir(bio);
shift = dev->bshift;
- bio_for_each_segment(bvec, bio, i) {
- len = bvec->bv_len;
+ bio_for_each_segment(bvec, bio, iter) {
+ len = bvec.bv_len;
len >>= 9;
nfhd_read_write(dev->id, 0, dir, sec >> shift, len >> shift,
- bvec_to_phys(bvec));
+ bvec_to_phys(&bvec));
sec += len;
}
bio_endio(bio, 0);
diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
index f33bcba..47b6b9f 100644
--- a/arch/powerpc/sysdev/axonram.c
+++ b/arch/powerpc/sysdev/axonram.c
@@ -109,28 +109,28 @@ axon_ram_make_request(struct request_queue *queue, struct bio *bio)
struct axon_ram_bank *bank = bio->bi_bdev->bd_disk->private_data;
unsigned long phys_mem, phys_end;
void *user_mem;
- struct bio_vec *vec;
+ struct bio_vec vec;
unsigned int transfered;
- unsigned short idx;
+ struct bvec_iter iter;
phys_mem = bank->io_addr + (bio->bi_iter.bi_sector <<
AXON_RAM_SECTOR_SHIFT);
phys_end = bank->io_addr + bank->size;
transfered = 0;
- bio_for_each_segment(vec, bio, idx) {
- if (unlikely(phys_mem + vec->bv_len > phys_end)) {
+ bio_for_each_segment(vec, bio, iter) {
+ if (unlikely(phys_mem + vec.bv_len > phys_end)) {
bio_io_error(bio);
return;
}
- user_mem = page_address(vec->bv_page) + vec->bv_offset;
+ user_mem = page_address(vec.bv_page) + vec.bv_offset;
if (bio_data_dir(bio) == READ)
- memcpy(user_mem, (void *) phys_mem, vec->bv_len);
+ memcpy(user_mem, (void *) phys_mem, vec.bv_len);
else
- memcpy((void *) phys_mem, user_mem, vec->bv_len);
+ memcpy((void *) phys_mem, user_mem, vec.bv_len);
- phys_mem += vec->bv_len;
- transfered += vec->bv_len;
+ phys_mem += vec.bv_len;
+ transfered += vec.bv_len;
}
bio_endio(bio, 0);
}
diff --git a/block/blk-core.c b/block/blk-core.c
index 5c2ab2c..5da8e90 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2746,10 +2746,10 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
void rq_flush_dcache_pages(struct request *rq)
{
struct req_iterator iter;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
rq_for_each_segment(bvec, rq, iter)
- flush_dcache_page(bvec->bv_page);
+ flush_dcache_page(bvec.bv_page);
}
EXPORT_SYMBOL_GPL(rq_flush_dcache_pages);
#endif
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 03bc083..a1ead90 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -12,10 +12,11 @@
static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
struct bio *bio)
{
- struct bio_vec *bv, *bvprv = NULL;
- int cluster, i, high, highprv = 1;
+ struct bio_vec bv, bvprv = { NULL };
+ int cluster, high, highprv = 1;
unsigned int seg_size, nr_phys_segs;
struct bio *fbio, *bbio;
+ struct bvec_iter iter;
if (!bio)
return 0;
@@ -25,25 +26,23 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
seg_size = 0;
nr_phys_segs = 0;
for_each_bio(bio) {
- bio_for_each_segment(bv, bio, i) {
+ bio_for_each_segment(bv, bio, iter) {
/*
* the trick here is making sure that a high page is
* never considered part of another segment, since that
* might change with the bounce page.
*/
- high = page_to_pfn(bv->bv_page) > queue_bounce_pfn(q);
- if (high || highprv)
- goto new_segment;
- if (cluster) {
- if (seg_size + bv->bv_len
+ high = page_to_pfn(bv.bv_page) > queue_bounce_pfn(q);
+ if (!high && !highprv && cluster) {
+ if (seg_size + bv.bv_len
> queue_max_segment_size(q))
goto new_segment;
- if (!BIOVEC_PHYS_MERGEABLE(bvprv, bv))
+ if (!BIOVEC_PHYS_MERGEABLE(&bvprv, &bv))
goto new_segment;
- if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bv))
+ if (!BIOVEC_SEG_BOUNDARY(q, &bvprv, &bv))
goto new_segment;
- seg_size += bv->bv_len;
+ seg_size += bv.bv_len;
bvprv = bv;
continue;
}
@@ -54,7 +53,7 @@ new_segment:
nr_phys_segs++;
bvprv = bv;
- seg_size = bv->bv_len;
+ seg_size = bv.bv_len;
highprv = high;
}
bbio = bio;
@@ -110,21 +109,21 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
return 0;
}
-static void
+static inline void
__blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
- struct scatterlist *sglist, struct bio_vec **bvprv,
+ struct scatterlist *sglist, struct bio_vec *bvprv,
struct scatterlist **sg, int *nsegs, int *cluster)
{
int nbytes = bvec->bv_len;
- if (*bvprv && *cluster) {
+ if (*sg && *cluster) {
if ((*sg)->length + nbytes > queue_max_segment_size(q))
goto new_segment;
- if (!BIOVEC_PHYS_MERGEABLE(*bvprv, bvec))
+ if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec))
goto new_segment;
- if (!BIOVEC_SEG_BOUNDARY(q, *bvprv, bvec))
+ if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec))
goto new_segment;
(*sg)->length += nbytes;
@@ -150,7 +149,7 @@ new_segment:
sg_set_page(*sg, bvec->bv_page, nbytes, bvec->bv_offset);
(*nsegs)++;
}
- *bvprv = bvec;
+ *bvprv = *bvec;
}
/*
@@ -160,7 +159,7 @@ new_segment:
int blk_rq_map_sg(struct request_queue *q, struct request *rq,
struct scatterlist *sglist)
{
- struct bio_vec *bvec, *bvprv;
+ struct bio_vec bvec, bvprv;
struct req_iterator iter;
struct scatterlist *sg;
int nsegs, cluster;
@@ -171,10 +170,9 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
/*
* for each bio in rq
*/
- bvprv = NULL;
sg = NULL;
rq_for_each_segment(bvec, rq, iter) {
- __blk_segment_map_sg(q, bvec, sglist, &bvprv, &sg,
+ __blk_segment_map_sg(q, &bvec, sglist, &bvprv, &sg,
&nsegs, &cluster);
} /* segments in rq */
@@ -223,18 +221,17 @@ EXPORT_SYMBOL(blk_rq_map_sg);
int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
struct scatterlist *sglist)
{
- struct bio_vec *bvec, *bvprv;
+ struct bio_vec bvec, bvprv;
struct scatterlist *sg;
int nsegs, cluster;
- unsigned long i;
+ struct bvec_iter iter;
nsegs = 0;
cluster = blk_queue_cluster(q);
- bvprv = NULL;
sg = NULL;
- bio_for_each_segment(bvec, bio, i) {
- __blk_segment_map_sg(q, bvec, sglist, &bvprv, &sg,
+ bio_for_each_segment(bvec, bio, iter) {
+ __blk_segment_map_sg(q, &bvec, sglist, &bvprv, &sg,
&nsegs, &cluster);
} /* segments in bio */
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index 77c24ab..7a06aec 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -897,15 +897,15 @@ rqbiocnt(struct request *r)
static void
bio_pageinc(struct bio *bio)
{
- struct bio_vec *bv;
+ struct bio_vec bv;
struct page *page;
- int i;
+ struct bvec_iter iter;
- bio_for_each_segment(bv, bio, i) {
+ bio_for_each_segment(bv, bio, iter) {
/* Non-zero page count for non-head members of
* compound pages is no longer allowed by the kernel.
*/
- page = compound_trans_head(bv->bv_page);
+ page = compound_trans_head(bv.bv_page);
atomic_inc(&page->_count);
}
}
@@ -913,12 +913,12 @@ bio_pageinc(struct bio *bio)
static void
bio_pagedec(struct bio *bio)
{
- struct bio_vec *bv;
struct page *page;
- int i;
+ struct bio_vec bv;
+ struct bvec_iter iter;
- bio_for_each_segment(bv, bio, i) {
- page = compound_trans_head(bv->bv_page);
+ bio_for_each_segment(bv, bio, iter) {
+ page = compound_trans_head(bv.bv_page);
atomic_dec(&page->_count);
}
}
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index 66f5aaa..e73b85c 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -328,9 +328,9 @@ static void brd_make_request(struct request_queue *q, struct bio *bio)
struct block_device *bdev = bio->bi_bdev;
struct brd_device *brd = bdev->bd_disk->private_data;
int rw;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
sector_t sector;
- int i;
+ struct bvec_iter iter;
int err = -EIO;
sector = bio->bi_iter.bi_sector;
@@ -347,10 +347,10 @@ static void brd_make_request(struct request_queue *q, struct bio *bio)
if (rw == READA)
rw = READ;
- bio_for_each_segment(bvec, bio, i) {
- unsigned int len = bvec->bv_len;
- err = brd_do_bvec(brd, bvec->bv_page, len,
- bvec->bv_offset, rw, sector);
+ bio_for_each_segment(bvec, bio, iter) {
+ unsigned int len = bvec.bv_len;
+ err = brd_do_bvec(brd, bvec.bv_page, len,
+ bvec.bv_offset, rw, sector);
if (err)
break;
sector += len >> SECTOR_SHIFT;
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 9e3818b..f4e5440 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1537,15 +1537,17 @@ static int _drbd_send_page(struct drbd_conf *mdev, struct page *page,
static int _drbd_send_bio(struct drbd_conf *mdev, struct bio *bio)
{
- struct bio_vec *bvec;
- int i;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
+
/* hint all but last page with MSG_MORE */
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
int err;
- err = _drbd_no_send_page(mdev, bvec->bv_page,
- bvec->bv_offset, bvec->bv_len,
- i == bio->bi_vcnt - 1 ? 0 : MSG_MORE);
+ err = _drbd_no_send_page(mdev, bvec.bv_page,
+ bvec.bv_offset, bvec.bv_len,
+ bio_iter_last(bio, iter)
+ ? 0 : MSG_MORE);
if (err)
return err;
}
@@ -1554,15 +1556,16 @@ static int _drbd_send_bio(struct drbd_conf *mdev, struct bio *bio)
static int _drbd_send_zc_bio(struct drbd_conf *mdev, struct bio *bio)
{
- struct bio_vec *bvec;
- int i;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
+
/* hint all but last page with MSG_MORE */
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
int err;
- err = _drbd_send_page(mdev, bvec->bv_page,
- bvec->bv_offset, bvec->bv_len,
- i == bio->bi_vcnt - 1 ? 0 : MSG_MORE);
+ err = _drbd_send_page(mdev, bvec.bv_page,
+ bvec.bv_offset, bvec.bv_len,
+ bio_iter_last(bio, iter) ? 0 : MSG_MORE);
if (err)
return err;
}
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 5326c22..d073305 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -1595,9 +1595,10 @@ static int drbd_drain_block(struct drbd_conf *mdev, int data_size)
static int recv_dless_read(struct drbd_conf *mdev, struct drbd_request *req,
sector_t sector, int data_size)
{
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
struct bio *bio;
- int dgs, err, i, expect;
+ int dgs, err, expect;
void *dig_in = mdev->tconn->int_dig_in;
void *dig_vv = mdev->tconn->int_dig_vv;
@@ -1617,11 +1618,11 @@ static int recv_dless_read(struct drbd_conf *mdev, struct drbd_request *req,
bio = req->master_bio;
D_ASSERT(sector == bio->bi_iter.bi_sector);
- bio_for_each_segment(bvec, bio, i) {
- void *mapped = kmap(bvec->bv_page) + bvec->bv_offset;
- expect = min_t(int, data_size, bvec->bv_len);
+ bio_for_each_segment(bvec, bio, iter) {
+ void *mapped = kmap(bvec.bv_page) + bvec.bv_offset;
+ expect = min_t(int, data_size, bvec.bv_len);
err = drbd_recv_all_warn(mdev->tconn, mapped, expect);
- kunmap(bvec->bv_page);
+ kunmap(bvec.bv_page);
if (err)
return err;
data_size -= expect;
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index 891c0ec..84d3175 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -313,8 +313,8 @@ void drbd_csum_bio(struct drbd_conf *mdev, struct crypto_hash *tfm, struct bio *
{
struct hash_desc desc;
struct scatterlist sg;
- struct bio_vec *bvec;
- int i;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
desc.tfm = tfm;
desc.flags = 0;
@@ -322,8 +322,8 @@ void drbd_csum_bio(struct drbd_conf *mdev, struct crypto_hash *tfm, struct bio *
sg_init_table(&sg, 1);
crypto_hash_init(&desc);
- bio_for_each_segment(bvec, bio, i) {
- sg_set_page(&sg, bvec->bv_page, bvec->bv_len, bvec->bv_offset);
+ bio_for_each_segment(bvec, bio, iter) {
+ sg_set_page(&sg, bvec.bv_page, bvec.bv_len, bvec.bv_offset);
crypto_hash_update(&desc, &sg, sg.length);
}
crypto_hash_final(&desc, digest);
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 6a86fe7..6b29c44 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -2351,7 +2351,7 @@ static void rw_interrupt(void)
/* Compute maximal contiguous buffer size. */
static int buffer_chain_size(void)
{
- struct bio_vec *bv;
+ struct bio_vec bv;
int size;
struct req_iterator iter;
char *base;
@@ -2360,10 +2360,10 @@ static int buffer_chain_size(void)
size = 0;
rq_for_each_segment(bv, current_req, iter) {
- if (page_address(bv->bv_page) + bv->bv_offset != base + size)
+ if (page_address(bv.bv_page) + bv.bv_offset != base + size)
break;
- size += bv->bv_len;
+ size += bv.bv_len;
}
return size >> 9;
@@ -2389,7 +2389,7 @@ static int transfer_size(int ssize, int max_sector, int max_size)
static void copy_buffer(int ssize, int max_sector, int max_sector_2)
{
int remaining; /* number of transferred 512-byte sectors */
- struct bio_vec *bv;
+ struct bio_vec bv;
char *buffer;
char *dma_buffer;
int size;
@@ -2427,10 +2427,10 @@ static void copy_buffer(int ssize, int max_sector, int max_sector_2)
if (!remaining)
break;
- size = bv->bv_len;
+ size = bv.bv_len;
SUPBOUND(size, remaining);
- buffer = page_address(bv->bv_page) + bv->bv_offset;
+ buffer = page_address(bv.bv_page) + bv.bv_offset;
if (dma_buffer + size >
floppy_track_buffer + (max_buffer_sectors << 10) ||
dma_buffer < floppy_track_buffer) {
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index f5e3998..33fde3a 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -288,9 +288,10 @@ static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
{
int (*do_lo_send)(struct loop_device *, struct bio_vec *, loff_t,
struct page *page);
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
struct page *page = NULL;
- int i, ret = 0;
+ int ret = 0;
if (lo->transfer != transfer_none) {
page = alloc_page(GFP_NOIO | __GFP_HIGHMEM);
@@ -302,11 +303,11 @@ static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
do_lo_send = do_lo_send_direct_write;
}
- bio_for_each_segment(bvec, bio, i) {
- ret = do_lo_send(lo, bvec, pos, page);
+ bio_for_each_segment(bvec, bio, iter) {
+ ret = do_lo_send(lo, &bvec, pos, page);
if (ret < 0)
break;
- pos += bvec->bv_len;
+ pos += bvec.bv_len;
}
if (page) {
kunmap(page);
@@ -392,20 +393,20 @@ do_lo_receive(struct loop_device *lo,
static int
lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
{
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
ssize_t s;
- int i;
- bio_for_each_segment(bvec, bio, i) {
- s = do_lo_receive(lo, bvec, bsize, pos);
+ bio_for_each_segment(bvec, bio, iter) {
+ s = do_lo_receive(lo, &bvec, bsize, pos);
if (s < 0)
return s;
- if (s != bvec->bv_len) {
+ if (s != bvec.bv_len) {
zero_fill_bio(bio);
break;
}
- pos += bvec->bv_len;
+ pos += bvec.bv_len;
}
return 0;
}
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 69e9eb5..52b2f2a 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -3962,8 +3962,9 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio)
{
struct driver_data *dd = queue->queuedata;
struct scatterlist *sg;
- struct bio_vec *bvec;
- int i, nents = 0;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
+ int nents = 0;
int tag = 0, unaligned = 0;
if (unlikely(dd->dd_flag & MTIP_DDF_STOP_IO)) {
@@ -4026,11 +4027,11 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio)
}
/* Create the scatter list for this bio. */
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
sg_set_page(&sg[nents],
- bvec->bv_page,
- bvec->bv_len,
- bvec->bv_offset);
+ bvec.bv_page,
+ bvec.bv_len,
+ bvec.bv_offset);
nents++;
}
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 2dc3b51..aa362f4 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -271,7 +271,7 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
if (nbd_cmd(req) == NBD_CMD_WRITE) {
struct req_iterator iter;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
/*
* we are really probing at internals to determine
* whether to set MSG_MORE or not...
@@ -281,8 +281,8 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
if (!rq_iter_last(req, iter))
flags = MSG_MORE;
dprintk(DBG_TX, "%s: request %p: sending %d bytes data\n",
- nbd->disk->disk_name, req, bvec->bv_len);
- result = sock_send_bvec(nbd, bvec, flags);
+ nbd->disk->disk_name, req, bvec.bv_len);
+ result = sock_send_bvec(nbd, &bvec, flags);
if (result <= 0) {
dev_err(disk_to_dev(nbd->disk),
"Send data failed (result %d)\n",
@@ -378,10 +378,10 @@ static struct request *nbd_read_stat(struct nbd_device *nbd)
nbd->disk->disk_name, req);
if (nbd_cmd(req) == NBD_CMD_READ) {
struct req_iterator iter;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
rq_for_each_segment(bvec, req, iter) {
- result = sock_recv_bvec(nbd, bvec);
+ result = sock_recv_bvec(nbd, &bvec);
if (result <= 0) {
dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
result);
@@ -389,7 +389,7 @@ static struct request *nbd_read_stat(struct nbd_device *nbd)
return req;
}
dprintk(DBG_RX, "%s: request %p: got %d bytes data\n",
- nbd->disk->disk_name, req, bvec->bv_len);
+ nbd->disk->disk_name, req, bvec.bv_len);
}
}
return req;
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 53d2173..5539d29 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -550,9 +550,11 @@ static int nvme_split_and_submit(struct bio *bio, struct nvme_queue *nvmeq,
static int nvme_map_bio(struct nvme_queue *nvmeq, struct nvme_iod *iod,
struct bio *bio, enum dma_data_direction dma_dir, int psegs)
{
- struct bio_vec *bvec, *bvprv = NULL;
+ struct bio_vec bvec, bvprv;
+ struct bvec_iter iter;
struct scatterlist *sg = NULL;
- int i, length = 0, nsegs = 0, split_len = bio->bi_iter.bi_size;
+ int length = 0, nsegs = 0, split_len = bio->bi_iter.bi_size;
+ int first = 1;
if (nvmeq->dev->stripe_size)
split_len = nvmeq->dev->stripe_size -
@@ -560,25 +562,28 @@ static int nvme_map_bio(struct nvme_queue *nvmeq, struct nvme_iod *iod,
(nvmeq->dev->stripe_size - 1));
sg_init_table(iod->sg, psegs);
- bio_for_each_segment(bvec, bio, i) {
- if (bvprv && BIOVEC_PHYS_MERGEABLE(bvprv, bvec)) {
- sg->length += bvec->bv_len;
+ bio_for_each_segment(bvec, bio, iter) {
+ if (!first && BIOVEC_PHYS_MERGEABLE(&bvprv, &bvec)) {
+ sg->length += bvec.bv_len;
} else {
- if (bvprv && BIOVEC_NOT_VIRT_MERGEABLE(bvprv, bvec))
- return nvme_split_and_submit(bio, nvmeq, i,
- length, 0);
+ if (!first && BIOVEC_NOT_VIRT_MERGEABLE(&bvprv, &bvec))
+ return nvme_split_and_submit(bio, nvmeq,
+ iter.bi_idx,
+ length, 0);
sg = sg ? sg + 1 : iod->sg;
- sg_set_page(sg, bvec->bv_page, bvec->bv_len,
- bvec->bv_offset);
+ sg_set_page(sg, bvec.bv_page,
+ bvec.bv_len, bvec.bv_offset);
nsegs++;
}
- if (split_len - length < bvec->bv_len)
- return nvme_split_and_submit(bio, nvmeq, i, split_len,
- split_len - length);
- length += bvec->bv_len;
+ if (split_len - length < bvec.bv_len)
+ return nvme_split_and_submit(bio, nvmeq, iter.bi_idx,
+ split_len,
+ split_len - length);
+ length += bvec.bv_len;
bvprv = bvec;
+ first = 0;
}
iod->nents = nsegs;
sg_mark_end(sg);
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
index 464be78..1c6edb9 100644
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -94,7 +94,7 @@ static void ps3disk_scatter_gather(struct ps3_storage_device *dev,
{
unsigned int offset = 0;
struct req_iterator iter;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
unsigned int i = 0;
size_t size;
void *buf;
@@ -106,14 +106,14 @@ static void ps3disk_scatter_gather(struct ps3_storage_device *dev,
__func__, __LINE__, i, bio_segments(iter.bio),
bio_sectors(iter.bio), iter.bio->bi_iter.bi_sector);
- size = bvec->bv_len;
- buf = bvec_kmap_irq(bvec, &flags);
+ size = bvec.bv_len;
+ buf = bvec_kmap_irq(&bvec, &flags);
if (gather)
memcpy(dev->bounce_buf+offset, buf, size);
else
memcpy(buf, dev->bounce_buf+offset, size);
offset += size;
- flush_kernel_dcache_page(bvec->bv_page);
+ flush_kernel_dcache_page(bvec.bv_page);
bvec_kunmap_irq(buf, &flags);
i++;
}
@@ -130,7 +130,7 @@ static int ps3disk_submit_request_sg(struct ps3_storage_device *dev,
#ifdef DEBUG
unsigned int n = 0;
- struct bio_vec *bv;
+ struct bio_vec bv;
struct req_iterator iter;
rq_for_each_segment(bv, req, iter)
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index 320bbfc..ef45cfb 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -555,14 +555,14 @@ static struct bio *ps3vram_do_bio(struct ps3_system_bus_device *dev,
const char *op = write ? "write" : "read";
loff_t offset = bio->bi_iter.bi_sector << 9;
int error = 0;
- struct bio_vec *bvec;
- unsigned int i;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
struct bio *next;
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
/* PS3 is ppc64, so we don't handle highmem */
- char *ptr = page_address(bvec->bv_page) + bvec->bv_offset;
- size_t len = bvec->bv_len, retlen;
+ char *ptr = page_address(bvec.bv_page) + bvec.bv_offset;
+ size_t len = bvec.bv_len, retlen;
dev_dbg(&dev->core, " %s %zu bytes at offset %llu\n", op,
len, offset);
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index a8f4fe2..20e8ab3 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1109,23 +1109,23 @@ static void bio_chain_put(struct bio *chain)
*/
static void zero_bio_chain(struct bio *chain, int start_ofs)
{
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
unsigned long flags;
void *buf;
- int i;
int pos = 0;
while (chain) {
- bio_for_each_segment(bv, chain, i) {
- if (pos + bv->bv_len > start_ofs) {
+ bio_for_each_segment(bv, chain, iter) {
+ if (pos + bv.bv_len > start_ofs) {
int remainder = max(start_ofs - pos, 0);
- buf = bvec_kmap_irq(bv, &flags);
+ buf = bvec_kmap_irq(&bv, &flags);
memset(buf + remainder, 0,
- bv->bv_len - remainder);
- flush_dcache_page(bv->bv_page);
+ bv.bv_len - remainder);
+ flush_dcache_page(bv.bv_page);
bvec_kunmap_irq(buf, &flags);
}
- pos += bv->bv_len;
+ pos += bv.bv_len;
}
chain = chain->bi_next;
@@ -1173,11 +1173,11 @@ static struct bio *bio_clone_range(struct bio *bio_src,
unsigned int len,
gfp_t gfpmask)
{
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
+ struct bvec_iter end_iter;
unsigned int resid;
- unsigned short idx;
unsigned int voff;
- unsigned short end_idx;
unsigned short vcnt;
struct bio *bio;
@@ -1196,22 +1196,22 @@ static struct bio *bio_clone_range(struct bio *bio_src,
/* Find first affected segment... */
resid = offset;
- bio_for_each_segment(bv, bio_src, idx) {
- if (resid < bv->bv_len)
+ bio_for_each_segment(bv, bio_src, iter) {
+ if (resid < bv.bv_len)
break;
- resid -= bv->bv_len;
+ resid -= bv.bv_len;
}
voff = resid;
/* ...and the last affected segment */
resid += len;
- __bio_for_each_segment(bv, bio_src, end_idx, idx) {
- if (resid <= bv->bv_len)
+ __bio_for_each_segment(bv, bio_src, end_iter, iter) {
+ if (resid <= bv.bv_len)
break;
- resid -= bv->bv_len;
+ resid -= bv.bv_len;
}
- vcnt = end_idx - idx + 1;
+ vcnt = end_iter.bi_idx = iter.bi_idx + 1;
/* Build the clone */
@@ -1229,7 +1229,7 @@ static struct bio *bio_clone_range(struct bio *bio_src,
* Copy over our part of the bio_vec, then update the first
* and last (or only) entries.
*/
- memcpy(&bio->bi_io_vec[0], &bio_src->bi_io_vec[idx],
+ memcpy(&bio->bi_io_vec[0], &bio_src->bi_io_vec[iter.bi_idx],
vcnt * sizeof (struct bio_vec));
bio->bi_io_vec[0].bv_offset += voff;
if (vcnt > 1) {
diff --git a/drivers/block/rsxx/dma.c b/drivers/block/rsxx/dma.c
index 3716633..cf8cd29 100644
--- a/drivers/block/rsxx/dma.c
+++ b/drivers/block/rsxx/dma.c
@@ -684,7 +684,8 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
void *cb_data)
{
struct list_head dma_list[RSXX_MAX_TARGETS];
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
unsigned long long addr8;
unsigned int laddr;
unsigned int bv_len;
@@ -722,9 +723,9 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
bv_len -= RSXX_HW_BLK_SIZE;
}
} else {
- bio_for_each_segment(bvec, bio, i) {
- bv_len = bvec->bv_len;
- bv_off = bvec->bv_offset;
+ bio_for_each_segment(bvec, bio, iter) {
+ bv_len = bvec.bv_len;
+ bv_off = bvec.bv_offset;
while (bv_len > 0) {
tgt = rsxx_get_dma_tgt(card, addr8);
@@ -736,7 +737,7 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
st = rsxx_queue_dma(card, &dma_list[tgt],
bio_data_dir(bio),
dma_off, dma_len,
- laddr, bvec->bv_page,
+ laddr, bvec.bv_page,
bv_off, cb, cb_data);
if (st)
goto bvec_err;
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 038a6d2..b62f379 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -362,7 +362,7 @@ static void btree_node_write_done(struct closure *cl)
struct bio_vec *bv;
int n;
- __bio_for_each_segment(bv, b->bio, n, 0)
+ bio_for_each_segment_all(bv, b->bio, n)
__free_page(bv->bv_page);
__btree_node_write_done(cl);
@@ -421,7 +421,7 @@ static void do_btree_node_write(struct btree *b)
struct bio_vec *bv;
void *base = (void *) ((unsigned long) i & ~(PAGE_SIZE - 1));
- bio_for_each_segment(bv, b->bio, j)
+ bio_for_each_segment_all(bv, b->bio, j)
memcpy(page_address(bv->bv_page),
base + j * PAGE_SIZE, PAGE_SIZE);
diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
index 92b3fd4..03cb4d1 100644
--- a/drivers/md/bcache/debug.c
+++ b/drivers/md/bcache/debug.c
@@ -173,7 +173,8 @@ void bch_data_verify(struct cached_dev *dc, struct bio *bio)
{
char name[BDEVNAME_SIZE];
struct bio *check;
- struct bio_vec *bv;
+ struct bio_vec bv, *bv2;
+ struct bvec_iter iter;
int i;
check = bio_clone(bio, GFP_NOIO);
@@ -185,13 +186,13 @@ void bch_data_verify(struct cached_dev *dc, struct bio *bio)
submit_bio_wait(READ_SYNC, check);
- bio_for_each_segment(bv, bio, i) {
- void *p1 = kmap_atomic(bv->bv_page);
- void *p2 = page_address(check->bi_io_vec[i].bv_page);
+ bio_for_each_segment(bv, bio, iter) {
+ void *p1 = kmap_atomic(bv.bv_page);
+ void *p2 = page_address(check->bi_io_vec[iter.bi_idx].bv_page);
- cache_set_err_on(memcmp(p1 + bv->bv_offset,
- p2 + bv->bv_offset,
- bv->bv_len),
+ cache_set_err_on(memcmp(p1 + bv.bv_offset,
+ p2 + bv.bv_offset,
+ bv.bv_len),
dc->disk.c,
"verify failed at dev %s sector %llu",
bdevname(dc->bdev, name),
@@ -200,8 +201,8 @@ void bch_data_verify(struct cached_dev *dc, struct bio *bio)
kunmap_atomic(p1);
}
- bio_for_each_segment_all(bv, check, i)
- __free_page(bv->bv_page);
+ bio_for_each_segment_all(bv2, check, i)
+ __free_page(bv2->bv_page);
out_put:
bio_put(check);
}
diff --git a/drivers/md/bcache/io.c b/drivers/md/bcache/io.c
index dc44f06..9b5b6a4 100644
--- a/drivers/md/bcache/io.c
+++ b/drivers/md/bcache/io.c
@@ -22,12 +22,12 @@ static void bch_bi_idx_hack_endio(struct bio *bio, int error)
static void bch_generic_make_request_hack(struct bio *bio)
{
if (bio->bi_iter.bi_idx) {
- int i;
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
struct bio *clone = bio_alloc(GFP_NOIO, bio_segments(bio));
- bio_for_each_segment(bv, bio, i)
- clone->bi_io_vec[clone->bi_vcnt++] = *bv;
+ bio_for_each_segment(bv, bio, iter)
+ clone->bi_io_vec[clone->bi_vcnt++] = bv;
clone->bi_iter.bi_sector = bio->bi_iter.bi_sector;
clone->bi_bdev = bio->bi_bdev;
@@ -73,8 +73,9 @@ static void bch_generic_make_request_hack(struct bio *bio)
struct bio *bch_bio_split(struct bio *bio, int sectors,
gfp_t gfp, struct bio_set *bs)
{
- unsigned idx = bio->bi_iter.bi_idx, vcnt = 0, nbytes = sectors << 9;
- struct bio_vec *bv;
+ unsigned vcnt = 0, nbytes = sectors << 9;
+ struct bio_vec bv;
+ struct bvec_iter iter;
struct bio *ret = NULL;
BUG_ON(sectors <= 0);
@@ -86,49 +87,35 @@ struct bio *bch_bio_split(struct bio *bio, int sectors,
ret = bio_alloc_bioset(gfp, 1, bs);
if (!ret)
return NULL;
- idx = 0;
goto out;
}
- bio_for_each_segment(bv, bio, idx) {
- vcnt = idx - bio->bi_iter.bi_idx;
+ bio_for_each_segment(bv, bio, iter) {
+ vcnt++;
- if (!nbytes) {
- ret = bio_alloc_bioset(gfp, vcnt, bs);
- if (!ret)
- return NULL;
+ if (nbytes <= bv.bv_len)
+ break;
- memcpy(ret->bi_io_vec, __bio_iovec(bio),
- sizeof(struct bio_vec) * vcnt);
+ nbytes -= bv.bv_len;
+ }
- break;
- } else if (nbytes < bv->bv_len) {
- ret = bio_alloc_bioset(gfp, ++vcnt, bs);
- if (!ret)
- return NULL;
+ ret = bio_alloc_bioset(gfp, vcnt, bs);
+ if (!ret)
+ return NULL;
- memcpy(ret->bi_io_vec, __bio_iovec(bio),
- sizeof(struct bio_vec) * vcnt);
+ bio_for_each_segment(bv, bio, iter) {
+ ret->bi_io_vec[ret->bi_vcnt++] = bv;
- ret->bi_io_vec[vcnt - 1].bv_len = nbytes;
- bv->bv_offset += nbytes;
- bv->bv_len -= nbytes;
+ if (ret->bi_vcnt == vcnt)
break;
- }
-
- nbytes -= bv->bv_len;
}
+
+ ret->bi_io_vec[ret->bi_vcnt - 1].bv_len = nbytes;
out:
ret->bi_bdev = bio->bi_bdev;
ret->bi_iter.bi_sector = bio->bi_iter.bi_sector;
ret->bi_iter.bi_size = sectors << 9;
ret->bi_rw = bio->bi_rw;
- ret->bi_vcnt = vcnt;
- ret->bi_max_vecs = vcnt;
-
- bio->bi_iter.bi_sector += sectors;
- bio->bi_iter.bi_size -= sectors << 9;
- bio->bi_iter.bi_idx = idx;
if (bio_integrity(bio)) {
if (bio_integrity_clone(ret, bio, gfp)) {
@@ -137,9 +124,10 @@ out:
}
bio_integrity_trim(ret, 0, bio_sectors(ret));
- bio_integrity_trim(bio, bio_sectors(ret), bio_sectors(bio));
}
+ bio_advance(bio, ret->bi_iter.bi_size);
+
return ret;
}
@@ -155,12 +143,13 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
if (bio_segments(bio) > max_segments ||
q->merge_bvec_fn) {
- struct bio_vec *bv;
- int i, seg = 0;
+ struct bio_vec bv;
+ struct bvec_iter iter;
+ unsigned seg = 0;
ret = 0;
- bio_for_each_segment(bv, bio, i) {
+ bio_for_each_segment(bv, bio, iter) {
struct bvec_merge_data bvm = {
.bi_bdev = bio->bi_bdev,
.bi_sector = bio->bi_iter.bi_sector,
@@ -172,11 +161,11 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
break;
if (q->merge_bvec_fn &&
- q->merge_bvec_fn(q, &bvm, bv) < (int) bv->bv_len)
+ q->merge_bvec_fn(q, &bvm, &bv) < (int) bv.bv_len)
break;
seg++;
- ret += bv->bv_len >> 9;
+ ret += bv.bv_len >> 9;
}
}
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
index 47a9bbc..4c0a422 100644
--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -198,14 +198,14 @@ static bool verify(struct cached_dev *dc, struct bio *bio)
static void bio_csum(struct bio *bio, struct bkey *k)
{
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
uint64_t csum = 0;
- int i;
- bio_for_each_segment(bv, bio, i) {
- void *d = kmap(bv->bv_page) + bv->bv_offset;
- csum = bch_crc64_update(csum, d, bv->bv_len);
- kunmap(bv->bv_page);
+ bio_for_each_segment(bv, bio, iter) {
+ void *d = kmap(bv.bv_page) + bv.bv_offset;
+ csum = bch_crc64_update(csum, d, bv.bv_len);
+ kunmap(bv.bv_page);
}
k->ptr[KEY_PTRS(k)] = csum & (~0ULL >> 1);
@@ -1182,17 +1182,17 @@ void bch_cached_dev_request_init(struct cached_dev *dc)
static int flash_dev_cache_miss(struct btree *b, struct search *s,
struct bio *bio, unsigned sectors)
{
- struct bio_vec *bv;
- int i;
+ struct bio_vec bv;
+ struct bvec_iter iter;
/* Zero fill bio */
- bio_for_each_segment(bv, bio, i) {
- unsigned j = min(bv->bv_len >> 9, sectors);
+ bio_for_each_segment(bv, bio, iter) {
+ unsigned j = min(bv.bv_len >> 9, sectors);
- void *p = kmap(bv->bv_page);
- memset(p + bv->bv_offset, 0, j << 9);
- kunmap(bv->bv_page);
+ void *p = kmap(bv.bv_page);
+ memset(p + bv.bv_offset, 0, j << 9);
+ kunmap(bv.bv_page);
sectors -= j;
}
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index a5d9c0e..bef353c 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -937,9 +937,9 @@ static struct dma_async_tx_descriptor *
async_copy_data(int frombio, struct bio *bio, struct page *page,
sector_t sector, struct dma_async_tx_descriptor *tx)
{
- struct bio_vec *bvl;
+ struct bio_vec bvl;
+ struct bvec_iter iter;
struct page *bio_page;
- int i;
int page_offset;
struct async_submit_ctl submit;
enum async_tx_flags flags = 0;
@@ -953,8 +953,8 @@ async_copy_data(int frombio, struct bio *bio, struct page *page,
flags |= ASYNC_TX_FENCE;
init_async_submit(&submit, flags, tx, NULL, NULL, NULL);
- bio_for_each_segment(bvl, bio, i) {
- int len = bvl->bv_len;
+ bio_for_each_segment(bvl, bio, iter) {
+ int len = bvl.bv_len;
int clen;
int b_offset = 0;
@@ -970,8 +970,8 @@ async_copy_data(int frombio, struct bio *bio, struct page *page,
clen = len;
if (clen > 0) {
- b_offset += bvl->bv_offset;
- bio_page = bvl->bv_page;
+ b_offset += bvl.bv_offset;
+ bio_page = bvl.bv_page;
if (frombio)
tx = async_memcpy(page, bio_page, page_offset,
b_offset, clen, &submit);
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index 92bd22c..9cbc567 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -504,7 +504,7 @@ static struct dasd_ccw_req *dasd_diag_build_cp(struct dasd_device *memdev,
struct dasd_diag_req *dreq;
struct dasd_diag_bio *dbio;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst;
unsigned int count, datasize;
sector_t recid, first_rec, last_rec;
@@ -525,10 +525,10 @@ static struct dasd_ccw_req *dasd_diag_build_cp(struct dasd_device *memdev,
/* Check struct bio and count the number of blocks for the request. */
count = 0;
rq_for_each_segment(bv, req, iter) {
- if (bv->bv_len & (blksize - 1))
+ if (bv.bv_len & (blksize - 1))
/* Fba can only do full blocks. */
return ERR_PTR(-EINVAL);
- count += bv->bv_len >> (block->s2b_shift + 9);
+ count += bv.bv_len >> (block->s2b_shift + 9);
}
/* Paranoia. */
if (count != last_rec - first_rec + 1)
@@ -545,8 +545,8 @@ static struct dasd_ccw_req *dasd_diag_build_cp(struct dasd_device *memdev,
dbio = dreq->bio;
recid = first_rec;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- for (off = 0; off < bv->bv_len; off += blksize) {
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ for (off = 0; off < bv.bv_len; off += blksize) {
memset(dbio, 0, sizeof (struct dasd_diag_bio));
dbio->type = rw_cmd;
dbio->block_number = recid + 1;
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index cee7e27..70d1770 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -2551,7 +2551,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_single(
struct dasd_ccw_req *cqr;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst;
unsigned int off;
int count, cidaw, cplength, datasize;
@@ -2573,13 +2573,13 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_single(
count = 0;
cidaw = 0;
rq_for_each_segment(bv, req, iter) {
- if (bv->bv_len & (blksize - 1))
+ if (bv.bv_len & (blksize - 1))
/* Eckd can only do full blocks. */
return ERR_PTR(-EINVAL);
- count += bv->bv_len >> (block->s2b_shift + 9);
+ count += bv.bv_len >> (block->s2b_shift + 9);
#if defined(CONFIG_64BIT)
- if (idal_is_needed (page_address(bv->bv_page), bv->bv_len))
- cidaw += bv->bv_len >> (block->s2b_shift + 9);
+ if (idal_is_needed (page_address(bv.bv_page), bv.bv_len))
+ cidaw += bv.bv_len >> (block->s2b_shift + 9);
#endif
}
/* Paranoia. */
@@ -2650,16 +2650,16 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_single(
last_rec - recid + 1, cmd, basedev, blksize);
}
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
if (dasd_page_cache) {
char *copy = kmem_cache_alloc(dasd_page_cache,
GFP_DMA | __GFP_NOWARN);
if (copy && rq_data_dir(req) == WRITE)
- memcpy(copy + bv->bv_offset, dst, bv->bv_len);
+ memcpy(copy + bv.bv_offset, dst, bv.bv_len);
if (copy)
- dst = copy + bv->bv_offset;
+ dst = copy + bv.bv_offset;
}
- for (off = 0; off < bv->bv_len; off += blksize) {
+ for (off = 0; off < bv.bv_len; off += blksize) {
sector_t trkid = recid;
unsigned int recoffs = sector_div(trkid, blk_per_trk);
rcmd = cmd;
@@ -2735,7 +2735,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_track(
struct dasd_ccw_req *cqr;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst, *idaw_dst;
unsigned int cidaw, cplength, datasize;
unsigned int tlf;
@@ -2813,8 +2813,8 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_track(
idaw_dst = NULL;
idaw_len = 0;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- seg_len = bv->bv_len;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ seg_len = bv.bv_len;
while (seg_len) {
if (new_track) {
trkid = recid;
@@ -3039,7 +3039,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_tpm_track(
{
struct dasd_ccw_req *cqr;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst;
unsigned int trkcount, ctidaw;
unsigned char cmd;
@@ -3125,8 +3125,8 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_tpm_track(
new_track = 1;
recid = first_rec;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- seg_len = bv->bv_len;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ seg_len = bv.bv_len;
while (seg_len) {
if (new_track) {
trkid = recid;
@@ -3158,9 +3158,9 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_tpm_track(
}
} else {
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
last_tidaw = itcw_add_tidaw(itcw, 0x00,
- dst, bv->bv_len);
+ dst, bv.bv_len);
if (IS_ERR(last_tidaw)) {
ret = -EINVAL;
goto out_error;
@@ -3276,7 +3276,7 @@ static struct dasd_ccw_req *dasd_raw_build_cp(struct dasd_device *startdev,
struct dasd_ccw_req *cqr;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst;
unsigned char cmd;
unsigned int trkcount;
@@ -3376,8 +3376,8 @@ static struct dasd_ccw_req *dasd_raw_build_cp(struct dasd_device *startdev,
idaws = idal_create_words(idaws, rawpadpage, PAGE_SIZE);
}
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- seg_len = bv->bv_len;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ seg_len = bv.bv_len;
if (cmd == DASD_ECKD_CCW_READ_TRACK)
memset(dst, 0, seg_len);
if (!len_to_track_end) {
@@ -3422,7 +3422,7 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req)
struct dasd_eckd_private *private;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst, *cda;
unsigned int blksize, blk_per_trk, off;
sector_t recid;
@@ -3440,8 +3440,8 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req)
if (private->uses_cdl == 0 || recid > 2*blk_per_trk)
ccw++;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- for (off = 0; off < bv->bv_len; off += blksize) {
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ for (off = 0; off < bv.bv_len; off += blksize) {
/* Skip locate record. */
if (private->uses_cdl && recid <= 2*blk_per_trk)
ccw++;
@@ -3452,7 +3452,7 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req)
cda = (char *)((addr_t) ccw->cda);
if (dst != cda) {
if (rq_data_dir(req) == READ)
- memcpy(dst, cda, bv->bv_len);
+ memcpy(dst, cda, bv.bv_len);
kmem_cache_free(dasd_page_cache,
(void *)((addr_t)cda & PAGE_MASK));
}
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index 9cbc8c3..2c8e68b 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -260,7 +260,7 @@ static struct dasd_ccw_req *dasd_fba_build_cp(struct dasd_device * memdev,
struct dasd_ccw_req *cqr;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst;
int count, cidaw, cplength, datasize;
sector_t recid, first_rec, last_rec;
@@ -283,13 +283,13 @@ static struct dasd_ccw_req *dasd_fba_build_cp(struct dasd_device * memdev,
count = 0;
cidaw = 0;
rq_for_each_segment(bv, req, iter) {
- if (bv->bv_len & (blksize - 1))
+ if (bv.bv_len & (blksize - 1))
/* Fba can only do full blocks. */
return ERR_PTR(-EINVAL);
- count += bv->bv_len >> (block->s2b_shift + 9);
+ count += bv.bv_len >> (block->s2b_shift + 9);
#if defined(CONFIG_64BIT)
- if (idal_is_needed (page_address(bv->bv_page), bv->bv_len))
- cidaw += bv->bv_len / blksize;
+ if (idal_is_needed (page_address(bv.bv_page), bv.bv_len))
+ cidaw += bv.bv_len / blksize;
#endif
}
/* Paranoia. */
@@ -326,16 +326,16 @@ static struct dasd_ccw_req *dasd_fba_build_cp(struct dasd_device * memdev,
}
recid = first_rec;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
+ dst = page_address(bv.bv_page) + bv.bv_offset;
if (dasd_page_cache) {
char *copy = kmem_cache_alloc(dasd_page_cache,
GFP_DMA | __GFP_NOWARN);
if (copy && rq_data_dir(req) == WRITE)
- memcpy(copy + bv->bv_offset, dst, bv->bv_len);
+ memcpy(copy + bv.bv_offset, dst, bv.bv_len);
if (copy)
- dst = copy + bv->bv_offset;
+ dst = copy + bv.bv_offset;
}
- for (off = 0; off < bv->bv_len; off += blksize) {
+ for (off = 0; off < bv.bv_len; off += blksize) {
/* Locate record for stupid devices. */
if (private->rdc_data.mode.bits.data_chain == 0) {
ccw[-1].flags |= CCW_FLAG_CC;
@@ -384,7 +384,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
struct dasd_fba_private *private;
struct ccw1 *ccw;
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
char *dst, *cda;
unsigned int blksize, off;
int status;
@@ -399,8 +399,8 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
if (private->rdc_data.mode.bits.data_chain != 0)
ccw++;
rq_for_each_segment(bv, req, iter) {
- dst = page_address(bv->bv_page) + bv->bv_offset;
- for (off = 0; off < bv->bv_len; off += blksize) {
+ dst = page_address(bv.bv_page) + bv.bv_offset;
+ for (off = 0; off < bv.bv_len; off += blksize) {
/* Skip locate record. */
if (private->rdc_data.mode.bits.data_chain == 0)
ccw++;
@@ -411,7 +411,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
cda = (char *)((addr_t) ccw->cda);
if (dst != cda) {
if (rq_data_dir(req) == READ)
- memcpy(dst, cda, bv->bv_len);
+ memcpy(dst, cda, bv.bv_len);
kmem_cache_free(dasd_page_cache,
(void *)((addr_t)cda & PAGE_MASK));
}
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index 16814a8..ebf41e2 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -808,12 +808,12 @@ static void
dcssblk_make_request(struct request_queue *q, struct bio *bio)
{
struct dcssblk_dev_info *dev_info;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
unsigned long index;
unsigned long page_addr;
unsigned long source_addr;
unsigned long bytes_done;
- int i;
bytes_done = 0;
dev_info = bio->bi_bdev->bd_disk->private_data;
@@ -844,21 +844,21 @@ dcssblk_make_request(struct request_queue *q, struct bio *bio)
}
index = (bio->bi_iter.bi_sector >> 3);
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
page_addr = (unsigned long)
- page_address(bvec->bv_page) + bvec->bv_offset;
+ page_address(bvec.bv_page) + bvec.bv_offset;
source_addr = dev_info->start + (index<<12) + bytes_done;
- if (unlikely((page_addr & 4095) != 0) || (bvec->bv_len & 4095) != 0)
+ if (unlikely((page_addr & 4095) != 0) || (bvec.bv_len & 4095) != 0)
// More paranoia.
goto fail;
if (bio_data_dir(bio) == READ) {
memcpy((void*)page_addr, (void*)source_addr,
- bvec->bv_len);
+ bvec.bv_len);
} else {
memcpy((void*)source_addr, (void*)page_addr,
- bvec->bv_len);
+ bvec.bv_len);
}
- bytes_done += bvec->bv_len;
+ bytes_done += bvec.bv_len;
}
bio_endio(bio, 0);
return;
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
index d0ab501..76bed17 100644
--- a/drivers/s390/block/scm_blk.c
+++ b/drivers/s390/block/scm_blk.c
@@ -130,7 +130,7 @@ static void scm_request_prepare(struct scm_request *scmrq)
struct aidaw *aidaw = scmrq->aidaw;
struct msb *msb = &scmrq->aob->msb[0];
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
msb->bs = MSB_BS_4K;
scmrq->aob->request.msb_count = 1;
@@ -142,9 +142,9 @@ static void scm_request_prepare(struct scm_request *scmrq)
msb->data_addr = (u64) aidaw;
rq_for_each_segment(bv, scmrq->request, iter) {
- WARN_ON(bv->bv_offset);
- msb->blk_count += bv->bv_len >> 12;
- aidaw->data_addr = (u64) page_address(bv->bv_page);
+ WARN_ON(bv.bv_offset);
+ msb->blk_count += bv.bv_len >> 12;
+ aidaw->data_addr = (u64) page_address(bv.bv_page);
aidaw++;
}
}
diff --git a/drivers/s390/block/scm_blk_cluster.c b/drivers/s390/block/scm_blk_cluster.c
index 27f930c..9aae909 100644
--- a/drivers/s390/block/scm_blk_cluster.c
+++ b/drivers/s390/block/scm_blk_cluster.c
@@ -122,7 +122,7 @@ static void scm_prepare_cluster_request(struct scm_request *scmrq)
struct aidaw *aidaw = scmrq->aidaw;
struct msb *msb = &scmrq->aob->msb[0];
struct req_iterator iter;
- struct bio_vec *bv;
+ struct bio_vec bv;
int i = 0;
u64 addr;
@@ -163,7 +163,7 @@ static void scm_prepare_cluster_request(struct scm_request *scmrq)
i++;
}
rq_for_each_segment(bv, req, iter) {
- aidaw->data_addr = (u64) page_address(bv->bv_page);
+ aidaw->data_addr = (u64) page_address(bv.bv_page);
aidaw++;
i++;
}
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c
index dd4e73f..3e530f9 100644
--- a/drivers/s390/block/xpram.c
+++ b/drivers/s390/block/xpram.c
@@ -184,11 +184,11 @@ static unsigned long xpram_highest_page_index(void)
static void xpram_make_request(struct request_queue *q, struct bio *bio)
{
xpram_device_t *xdev = bio->bi_bdev->bd_disk->private_data;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
unsigned int index;
unsigned long page_addr;
unsigned long bytes;
- int i;
if ((bio->bi_iter.bi_sector & 7) != 0 ||
(bio->bi_iter.bi_size & 4095) != 0)
@@ -200,10 +200,10 @@ static void xpram_make_request(struct request_queue *q, struct bio *bio)
if ((bio->bi_iter.bi_sector >> 3) > 0xffffffffU - xdev->offset)
goto fail;
index = (bio->bi_iter.bi_sector >> 3) + xdev->offset;
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
page_addr = (unsigned long)
- kmap(bvec->bv_page) + bvec->bv_offset;
- bytes = bvec->bv_len;
+ kmap(bvec.bv_page) + bvec.bv_offset;
+ bytes = bvec.bv_len;
if ((page_addr & 4095) != 0 || (bytes & 4095) != 0)
/* More paranoia. */
goto fail;
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c
index 9d26637..7143e86 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_transport.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c
@@ -1901,7 +1901,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
Mpi2SmpPassthroughRequest_t *mpi_request;
Mpi2SmpPassthroughReply_t *mpi_reply;
- int rc, i;
+ int rc;
u16 smid;
u32 ioc_state;
unsigned long timeleft;
@@ -1916,7 +1916,8 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
void *pci_addr_out = NULL;
u16 wait_state_count;
struct request *rsp = req->next_rq;
- struct bio_vec *bvec = NULL;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
if (!rsp) {
printk(MPT2SAS_ERR_FMT "%s: the smp response space is "
@@ -1955,11 +1956,11 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
goto out;
}
- bio_for_each_segment(bvec, req->bio, i) {
+ bio_for_each_segment(bvec, req->bio, iter) {
memcpy(pci_addr_out + offset,
- page_address(bvec->bv_page) + bvec->bv_offset,
- bvec->bv_len);
- offset += bvec->bv_len;
+ page_address(bvec.bv_page) + bvec.bv_offset,
+ bvec.bv_len);
+ offset += bvec.bv_len;
}
} else {
dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
@@ -2106,19 +2107,19 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
u32 offset = 0;
u32 bytes_to_copy =
le16_to_cpu(mpi_reply->ResponseDataLength);
- bio_for_each_segment(bvec, rsp->bio, i) {
- if (bytes_to_copy <= bvec->bv_len) {
- memcpy(page_address(bvec->bv_page) +
- bvec->bv_offset, pci_addr_in +
+ bio_for_each_segment(bvec, rsp->bio, iter) {
+ if (bytes_to_copy <= bvec.bv_len) {
+ memcpy(page_address(bvec.bv_page) +
+ bvec.bv_offset, pci_addr_in +
offset, bytes_to_copy);
break;
} else {
- memcpy(page_address(bvec->bv_page) +
- bvec->bv_offset, pci_addr_in +
- offset, bvec->bv_len);
- bytes_to_copy -= bvec->bv_len;
+ memcpy(page_address(bvec.bv_page) +
+ bvec.bv_offset, pci_addr_in +
+ offset, bvec.bv_len);
+ bytes_to_copy -= bvec.bv_len;
}
- offset += bvec->bv_len;
+ offset += bvec.bv_len;
}
}
} else {
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index e771a88..196a67f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -1884,7 +1884,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);
Mpi2SmpPassthroughRequest_t *mpi_request;
Mpi2SmpPassthroughReply_t *mpi_reply;
- int rc, i;
+ int rc;
u16 smid;
u32 ioc_state;
unsigned long timeleft;
@@ -1898,7 +1898,8 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
void *pci_addr_out = NULL;
u16 wait_state_count;
struct request *rsp = req->next_rq;
- struct bio_vec *bvec = NULL;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
if (!rsp) {
pr_err(MPT3SAS_FMT "%s: the smp response space is missing\n",
@@ -1938,11 +1939,11 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
goto out;
}
- bio_for_each_segment(bvec, req->bio, i) {
+ bio_for_each_segment(bvec, req->bio, iter) {
memcpy(pci_addr_out + offset,
- page_address(bvec->bv_page) + bvec->bv_offset,
- bvec->bv_len);
- offset += bvec->bv_len;
+ page_address(bvec.bv_page) + bvec.bv_offset,
+ bvec.bv_len);
+ offset += bvec.bv_len;
}
} else {
dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
@@ -2067,19 +2068,19 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
u32 offset = 0;
u32 bytes_to_copy =
le16_to_cpu(mpi_reply->ResponseDataLength);
- bio_for_each_segment(bvec, rsp->bio, i) {
- if (bytes_to_copy <= bvec->bv_len) {
- memcpy(page_address(bvec->bv_page) +
- bvec->bv_offset, pci_addr_in +
+ bio_for_each_segment(bvec, rsp->bio, iter) {
+ if (bytes_to_copy <= bvec.bv_len) {
+ memcpy(page_address(bvec.bv_page) +
+ bvec.bv_offset, pci_addr_in +
offset, bytes_to_copy);
break;
} else {
- memcpy(page_address(bvec->bv_page) +
- bvec->bv_offset, pci_addr_in +
- offset, bvec->bv_len);
- bytes_to_copy -= bvec->bv_len;
+ memcpy(page_address(bvec.bv_page) +
+ bvec.bv_offset, pci_addr_in +
+ offset, bvec.bv_len);
+ bytes_to_copy -= bvec.bv_len;
}
- offset += bvec->bv_len;
+ offset += bvec.bv_len;
}
}
} else {
diff --git a/drivers/staging/lustre/lustre/llite/lloop.c b/drivers/staging/lustre/lustre/llite/lloop.c
index 53741be..581ff78 100644
--- a/drivers/staging/lustre/lustre/llite/lloop.c
+++ b/drivers/staging/lustre/lustre/llite/lloop.c
@@ -194,10 +194,10 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
struct cl_object *obj = ll_i2info(inode)->lli_clob;
pgoff_t offset;
int ret;
- int i;
int rw;
obd_count page_count = 0;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
struct bio *bio;
ssize_t bytes;
@@ -221,14 +221,14 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
LASSERT(rw == bio->bi_rw);
offset = (pgoff_t)(bio->bi_iter.bi_sector << 9) + lo->lo_offset;
- bio_for_each_segment(bvec, bio, i) {
- BUG_ON(bvec->bv_offset != 0);
- BUG_ON(bvec->bv_len != PAGE_CACHE_SIZE);
+ bio_for_each_segment(bvec, bio, iter) {
+ BUG_ON(bvec.bv_offset != 0);
+ BUG_ON(bvec.bv_len != PAGE_CACHE_SIZE);
- pages[page_count] = bvec->bv_page;
+ pages[page_count] = bvec.bv_page;
offsets[page_count] = offset;
page_count++;
- offset += bvec->bv_len;
+ offset += bvec.bv_len;
}
LASSERT(page_count <= LLOOP_MAX_SEGMENTS);
}
diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index e9e6f98..6f98838 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -672,9 +672,10 @@ static ssize_t reset_store(struct device *dev,
static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
{
- int i, offset;
+ int offset;
u32 index;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
switch (rw) {
case READ:
@@ -689,33 +690,33 @@ static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
offset = (bio->bi_iter.bi_sector &
(SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT;
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment(bvec, bio, iter) {
int max_transfer_size = PAGE_SIZE - offset;
- if (bvec->bv_len > max_transfer_size) {
+ if (bvec.bv_len > max_transfer_size) {
/*
* zram_bvec_rw() can only make operation on a single
* zram page. Split the bio vector.
*/
struct bio_vec bv;
- bv.bv_page = bvec->bv_page;
+ bv.bv_page = bvec.bv_page;
bv.bv_len = max_transfer_size;
- bv.bv_offset = bvec->bv_offset;
+ bv.bv_offset = bvec.bv_offset;
if (zram_bvec_rw(zram, &bv, index, offset, bio, rw) < 0)
goto out;
- bv.bv_len = bvec->bv_len - max_transfer_size;
+ bv.bv_len = bvec.bv_len - max_transfer_size;
bv.bv_offset += max_transfer_size;
if (zram_bvec_rw(zram, &bv, index+1, 0, bio, rw) < 0)
goto out;
} else
- if (zram_bvec_rw(zram, bvec, index, offset, bio, rw)
+ if (zram_bvec_rw(zram, &bvec, index, offset, bio, rw)
< 0)
goto out;
- update_position(&index, &offset, bvec);
+ update_position(&index, &offset, &bvec);
}
set_bit(BIO_UPTODATE, &bio->bi_flags);
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c
index 08e3d13..9127db8 100644
--- a/fs/bio-integrity.c
+++ b/fs/bio-integrity.c
@@ -299,25 +299,26 @@ static void bio_integrity_generate(struct bio *bio)
{
struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
struct blk_integrity_exchg bix;
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
sector_t sector = bio->bi_iter.bi_sector;
- unsigned int i, sectors, total;
+ unsigned int sectors, total;
void *prot_buf = bio->bi_integrity->bip_buf;
total = 0;
bix.disk_name = bio->bi_bdev->bd_disk->disk_name;
bix.sector_size = bi->sector_size;
- bio_for_each_segment(bv, bio, i) {
- void *kaddr = kmap_atomic(bv->bv_page);
- bix.data_buf = kaddr + bv->bv_offset;
- bix.data_size = bv->bv_len;
+ bio_for_each_segment(bv, bio, iter) {
+ void *kaddr = kmap_atomic(bv.bv_page);
+ bix.data_buf = kaddr + bv.bv_offset;
+ bix.data_size = bv.bv_len;
bix.prot_buf = prot_buf;
bix.sector = sector;
bi->generate_fn(&bix);
- sectors = bv->bv_len / bi->sector_size;
+ sectors = bv.bv_len / bi->sector_size;
sector += sectors;
prot_buf += sectors * bi->tuple_size;
total += sectors * bi->tuple_size;
@@ -441,19 +442,20 @@ static int bio_integrity_verify(struct bio *bio)
{
struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
struct blk_integrity_exchg bix;
- struct bio_vec *bv;
+ struct bio_vec bv;
+ struct bvec_iter iter;
sector_t sector = bio->bi_integrity->bip_sector;
- unsigned int i, sectors, total, ret;
+ unsigned int sectors, total, ret;
void *prot_buf = bio->bi_integrity->bip_buf;
ret = total = 0;
bix.disk_name = bio->bi_bdev->bd_disk->disk_name;
bix.sector_size = bi->sector_size;
- bio_for_each_segment(bv, bio, i) {
- void *kaddr = kmap_atomic(bv->bv_page);
- bix.data_buf = kaddr + bv->bv_offset;
- bix.data_size = bv->bv_len;
+ bio_for_each_segment(bv, bio, iter) {
+ void *kaddr = kmap_atomic(bv.bv_page);
+ bix.data_buf = kaddr + bv.bv_offset;
+ bix.data_size = bv.bv_len;
bix.prot_buf = prot_buf;
bix.sector = sector;
@@ -464,7 +466,7 @@ static int bio_integrity_verify(struct bio *bio)
return ret;
}
- sectors = bv->bv_len / bi->sector_size;
+ sectors = bv.bv_len / bi->sector_size;
sector += sectors;
prot_buf += sectors * bi->tuple_size;
total += sectors * bi->tuple_size;
diff --git a/fs/bio.c b/fs/bio.c
index 7bb281f..8b7f14a 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -473,13 +473,13 @@ EXPORT_SYMBOL(bio_alloc_bioset);
void zero_fill_bio(struct bio *bio)
{
unsigned long flags;
- struct bio_vec *bv;
- int i;
+ struct bio_vec bv;
+ struct bvec_iter iter;
- bio_for_each_segment(bv, bio, i) {
- char *data = bvec_kmap_irq(bv, &flags);
- memset(data, 0, bv->bv_len);
- flush_dcache_page(bv->bv_page);
+ bio_for_each_segment(bv, bio, iter) {
+ char *data = bvec_kmap_irq(&bv, &flags);
+ memset(data, 0, bv.bv_len);
+ flush_dcache_page(bv.bv_page);
bvec_kunmap_irq(data, &flags);
}
}
@@ -1687,11 +1687,11 @@ void bio_check_pages_dirty(struct bio *bio)
#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
void bio_flush_dcache_pages(struct bio *bi)
{
- int i;
- struct bio_vec *bvec;
+ struct bio_vec bvec;
+ struct bvec_iter iter;
- bio_for_each_segment(bvec, bi, i)
- flush_dcache_page(bvec->bv_page);
+ bio_for_each_segment(bvec, bi, iter)
+ flush_dcache_page(bvec.bv_page);
}
EXPORT_SYMBOL(bio_flush_dcache_pages);
#endif
@@ -1840,7 +1840,7 @@ void bio_trim(struct bio *bio, int offset, int size)
bio->bi_iter.bi_idx = 0;
}
/* Make sure vcnt and last bv are not too big */
- bio_for_each_segment(bvec, bio, i) {
+ bio_for_each_segment_all(bvec, bio, i) {
if (sofar + bvec->bv_len > size)
bvec->bv_len = size - sofar;
if (bvec->bv_len == 0) {
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 9f182fc..c16adb5 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -63,10 +63,13 @@
*/
#define bio_iovec_idx(bio, idx) (&((bio)->bi_io_vec[(idx)]))
#define __bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_iter.bi_idx)
-#define bio_iovec(bio) (*__bio_iovec(bio))
+
+#define bio_iter_iovec(bio, iter) ((bio)->bi_io_vec[(iter).bi_idx])
#define bio_page(bio) (bio_iovec((bio)).bv_page)
#define bio_offset(bio) (bio_iovec((bio)).bv_offset)
+#define bio_iovec(bio) (*__bio_iovec(bio))
+
#define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_iter.bi_idx)
#define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
#define bio_end_sector(bio) ((bio)->bi_iter.bi_sector + bio_sectors((bio)))
@@ -134,15 +137,6 @@ static inline void *bio_data(struct bio *bio)
#define bio_io_error(bio) bio_endio((bio), -EIO)
/*
- * drivers should not use the __ version unless they _really_ know what
- * they're doing
- */
-#define __bio_for_each_segment(bvl, bio, i, start_idx) \
- for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx); \
- i < (bio)->bi_vcnt; \
- bvl++, i++)
-
-/*
* drivers should _never_ use the all version - the bio may have been split
* before it got to the driver and the driver won't own all of it
*/
@@ -151,10 +145,16 @@ static inline void *bio_data(struct bio *bio)
bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \
i++)
-#define bio_for_each_segment(bvl, bio, i) \
- for (i = (bio)->bi_iter.bi_idx; \
- bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \
- i++)
+#define __bio_for_each_segment(bvl, bio, iter, start) \
+ for (iter = (start); \
+ bvl = bio_iter_iovec((bio), (iter)), \
+ (iter).bi_idx < (bio)->bi_vcnt; \
+ (iter).bi_idx++)
+
+#define bio_for_each_segment(bvl, bio, iter) \
+ __bio_for_each_segment(bvl, bio, iter, (bio)->bi_iter)
+
+#define bio_iter_last(bio, iter) ((iter).bi_idx == (bio)->bi_vcnt - 1)
/*
* get a reference to a bio, so it won't disappear. the intended use is
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 1b135d4..337b92a 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -735,7 +735,7 @@ struct rq_map_data {
};
struct req_iterator {
- int i;
+ struct bvec_iter iter;
struct bio *bio;
};
@@ -748,10 +748,11 @@ struct req_iterator {
#define rq_for_each_segment(bvl, _rq, _iter) \
__rq_for_each_bio(_iter.bio, _rq) \
- bio_for_each_segment(bvl, _iter.bio, _iter.i)
+ bio_for_each_segment(bvl, _iter.bio, _iter.iter)
#define rq_iter_last(rq, _iter) \
- (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
+ (_iter.bio->bi_next == NULL && \
+ bio_iter_last(_iter.bio, _iter.iter))
#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
diff --git a/mm/bounce.c b/mm/bounce.c
index 5a7d58f..523918b 100644
--- a/mm/bounce.c
+++ b/mm/bounce.c
@@ -98,27 +98,24 @@ int init_emergency_isa_pool(void)
static void copy_to_high_bio_irq(struct bio *to, struct bio *from)
{
unsigned char *vfrom;
- struct bio_vec *tovec, *fromvec;
- int i;
-
- bio_for_each_segment(tovec, to, i) {
- fromvec = from->bi_io_vec + i;
-
- /*
- * not bounced
- */
- if (tovec->bv_page == fromvec->bv_page)
- continue;
-
- /*
- * fromvec->bv_offset and fromvec->bv_len might have been
- * modified by the block layer, so use the original copy,
- * bounce_copy_vec already uses tovec->bv_len
- */
- vfrom = page_address(fromvec->bv_page) + tovec->bv_offset;
+ struct bio_vec tovec, *fromvec = from->bi_io_vec;
+ struct bvec_iter iter;
+
+ bio_for_each_segment(tovec, to, iter) {
+ if (tovec.bv_page != fromvec->bv_page) {
+ /*
+ * fromvec->bv_offset and fromvec->bv_len might have
+ * been modified by the block layer, so use the original
+ * copy, bounce_copy_vec already uses tovec->bv_len
+ */
+ vfrom = page_address(fromvec->bv_page) +
+ tovec.bv_offset;
+
+ bounce_copy_vec(&tovec, vfrom);
+ flush_dcache_page(tovec.bv_page);
+ }
- bounce_copy_vec(tovec, vfrom);
- flush_dcache_page(tovec->bv_page);
+ fromvec++;
}
}
@@ -201,13 +198,14 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
{
struct bio *bio;
int rw = bio_data_dir(*bio_orig);
- struct bio_vec *to, *from;
+ struct bio_vec *to, from;
+ struct bvec_iter iter;
unsigned i;
if (force)
goto bounce;
- bio_for_each_segment(from, *bio_orig, i)
- if (page_to_pfn(from->bv_page) > queue_bounce_pfn(q))
+ bio_for_each_segment(from, *bio_orig, iter)
+ if (page_to_pfn(from.bv_page) > queue_bounce_pfn(q))
goto bounce;
return;
--
1.8.4.4
^ permalink raw reply related
* [PATCH] powerpc: : Kill CONFIG_MTD_PARTITIONS
From: Eunbong Song @ 2013-11-27 0:42 UTC (permalink / raw)
To: benh, paulus; +Cc: linuxppc-dev, linux-kernel@vger.kernel.org
DQpUaGlzIHBhdGNoIHJlbW92ZXMgQ09ORklHX01URF9QQVJUSVRJT05TIGluIGNvbmZpZyBmaWxl
cyBmb3IgcG93ZXJwYy4NCiBCZWNhdXNlIENPTkZJR19NVERfUEFSVElUSU9OUyB3YXMgcmVtb3Zl
ZCBieSBjb21taXQgNmE4YTk4YjIyYjEwZjE1NjBkNWY5MGFkZWQ0YTU0MjM0YjliMjcyNC4NCg0K
DQpTaWduZWQtb2ZmLWJ5OiBFdW5ib25nIFNvbmcgPGV1bmIuc29uZ0BzYW1zdW5nLmNvbT4NCi0t
LQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnICAgICAgICB8ICAg
IDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcgICAgICAgICB8
ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZyAgICAg
ICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnICAg
ICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmln
ICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29u
ZmlnICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9ibHVlc3RvbmVf
ZGVmY29uZmlnICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25s
YW5kc19kZWZjb25maWcgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9u
eV9kZWZjb25maWcgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9l
aWdlcl9kZWZjb25maWcgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0
eC9pY29uX2RlZmNvbmZpZyAgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdz
LzQ0eC9pc3M0NzYtc21wX2RlZmNvbmZpZyAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25m
aWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9j
b25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJw
Yy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93
ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFyY2gv
cG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFy
Y2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZyAgICAgICAgICB8ICAgIDEgLQ0K
IGFyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyAgICAgICB8ICAgIDEg
LQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZyAgICB8ICAg
IDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyAgICAgICB8
ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgICAg
ICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcg
ICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVm
Y29uZmlnICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJf
ZGVmY29uZmlnICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9t
ZHNfZGVmY29uZmlnICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2
eF9yZGtfZGVmY29uZmlnICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2Jj
ODM0eF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgv
a3NpODU2MF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg1
eHgvcHBhODU0OF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdz
Lzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25m
aWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9j
b25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJw
Yy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93
ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFyY2gv
cG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcgICAgICB8ICAgIDEgLQ0KIGFy
Y2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnICB8ICAgIDEgLQ0K
IGFyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyAgICB8ICAgIDEg
LQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgICB8ICAg
IDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgICB8
ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZp
ZyB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmln
ICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcgICAgICAg
ICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVm
Y29uZmlnICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2Rl
ZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVm
Y29uZmlnICAgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhf
c21wX2RlZmNvbmZpZyAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQw
eF9kZWZjb25maWcgICAgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdzL3Bw
YzQ0eF9kZWZjb25maWcgICAgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25maWdz
L3BycG1jMjgwMF9kZWZjb25maWcgICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9jb25m
aWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnICAgICAgICB8ICAgIDEgLQ0KIGFyY2gvcG93ZXJwYy9j
b25maWdzL3RxbTh4eF9kZWZjb25maWcgICAgICAgICAgICB8ICAgIDEgLQ0KIDUyIGZpbGVzIGNo
YW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9h
cmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9j
b25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnDQppbmRleCBlZDNiYWI3Li42OWUwNmVlIDEwMDY0
NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcNCisrKyBi
L2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnDQpAQCAtMzAsNyArMzAs
NiBAQCBDT05GSUdfSVBfUE5QX0JPT1RQPXkNCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIv
c2Jpbi9ob3RwbHVnIg0KIENPTkZJR19DT05ORUNUT1I9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJ
R19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdf
TVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93
ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80
MHgvZXA0MDVfZGVmY29uZmlnDQppbmRleCAxNzU4MmEzLi5jZjA2ZDQyIDEwMDY0NA0KLS0tIGEv
YXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZw0KQEAgLTI5LDcgKzI5LDYgQEAgQ09ORklH
X0lQX1BOUF9CT09UUD15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1
ZyINCiBDT05GSUdfQ09OTkVDVE9SPXkNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJ
VElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9PRl9QQVJU
Uz15DQogQ09ORklHX01URF9DSEFSPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmln
cy80MHgva2lsYXVlYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVl
YV9kZWZjb25maWcNCmluZGV4IGYyZDRiZTkuLjVmZjMzOGYgMTAwNjQ0DQotLS0gYS9hcmNoL3Bv
d2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9j
b25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZw0KQEAgLTMyLDcgKzMyLDYgQEAgQ09ORklHX0lQ
X1BOUF9CT09UUD15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIN
CiBDT05GSUdfQ09OTkVDVE9SPXkNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElP
TlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15
DQogQ09ORklHX01URF9DSEFSPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80
MHgvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVm
Y29uZmlnDQppbmRleCA0MmI5NzkzLi44NDUwNWUzIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBj
L2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdz
LzQweC9tYWthbHVfZGVmY29uZmlnDQpAQCAtMjksNyArMjksNiBAQCBDT05GSUdfSVBfUE5QX0JP
T1RQPXkNCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJ
R19DT05ORUNUT1I9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQog
Q09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05G
SUdfTVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxu
dXRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcN
CmluZGV4IGFhMWE0Y2EuLjBhMTlmNDMgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmln
cy80MHgvd2FsbnV0X2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dh
bG51dF9kZWZjb25maWcNCkBAIC0yNyw3ICsyNyw2IEBAIENPTkZJR19JUF9QTlBfQk9PVFA9eQ0K
IENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0NPTk5F
Q1RPUj15DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdf
TVREX0NNRExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERf
Q0hBUj15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZj
b25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZw0KaW5kZXgg
MzI5ZjlhMy4uNDQzNTVjNSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9h
cmNoZXNfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2Rl
ZmNvbmZpZw0KQEAgLTMxLDcgKzMxLDYgQEAgQ09ORklHX0lQX1BOUF9CT09UUD15DQogQ09ORklH
X1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfQ09OTkVDVE9SPXkN
CiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01E
TElORV9QQVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkN
CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZp
ZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9ibHVlc3RvbmVfZGVmY29uZmlnDQppbmRleCAy
MGM4ZDI2Li5jYTdmMWYzIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Js
dWVzdG9uZV9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9ibHVlc3Rv
bmVfZGVmY29uZmlnDQpAQCAtMjYsNyArMjYsNiBAQCBDT05GSUdfSVBfUE5QX0JPT1RQPXkNCiBD
T05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJR19DT05ORUNU
T1I9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01U
RF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NI
QVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19k
ZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmln
DQppbmRleCBkNWJlOTNlLi43YjhhYmQxIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZp
Z3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
NDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZw0KQEAgLTMxLDcgKzMxLDYgQEAgQ09ORklHX0lQX1BO
UF9CT09UUD15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBD
T05GSUdfQ09OTkVDVE9SPXkNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9
eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQog
Q09ORklHX01URF9DSEFSPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgv
ZWJvbnlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZp
Zw0KaW5kZXggZjkyNjlmYy4uMzFiNThiMCAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25m
aWdzLzQ0eC9lYm9ueV9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9l
Ym9ueV9kZWZjb25maWcNCkBAIC0yOCw3ICsyOCw2IEBAIENPTkZJR19JUF9QTlBfQk9PVFA9eQ0K
IENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0NPTk5F
Q1RPUj15DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdf
TVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0K
ZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcgYi9h
cmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnDQppbmRleCA5YmUwODkwLi5m
YWNjYWY2IDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNv
bmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZw0KQEAg
LTM0LDcgKzM0LDYgQEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIN
CiBDT05GSUdfQ09OTkVDVE9SPXkNCiBDT05GSUdfTVREPXkNCiBDT05GSUdfTVREX0NPTkNBVD15
DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQ0K
IENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZmIC0tZ2l0IGEv
YXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2Nv
bmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnDQppbmRleCA4MmY3MzAzLi4wNTc4MmMxIDEwMDY0NA0K
LS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnDQorKysgYi9hcmNo
L3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcNCkBAIC0zMyw3ICszMyw2IEBAIENP
TkZJR19JUF9QTlBfQk9PVFA9eQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hv
dHBsdWciDQogQ09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9Q
QVJUSVRJT05TPXkNCiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfT0Zf
UEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Nv
bmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4
L2lzczQ3Ni1zbXBfZGVmY29uZmlnDQppbmRleCBjYTAwY2Y3Li40OWExNTE4IDEwMDY0NA0KLS0t
IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnDQorKysgYi9h
cmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcNCkBAIC00Miw3ICs0
Miw2IEBAIENPTkZJR19JUF9QTlBfQk9PVFA9eQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9
Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklHX01URD15DQotQ09O
RklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVRE
X0NIQVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9j
b25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2th
dG1haV9kZWZjb25maWcNCmluZGV4IDEwOTU2MmMuLmYxMTM3OTcgMTAwNjQ0DQotLS0gYS9hcmNo
L3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBj
L2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcNCkBAIC0yOSw3ICsyOSw2IEBAIENPTkZJR19J
UF9QTlBfQk9PVFA9eQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWci
DQogQ09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9QQVJUSVRJ
T05TPXkNCiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9
eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
NDR4L3JhaW5pZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJf
ZGVmY29uZmlnDQppbmRleCAyMWMzM2ZhLi40YjkxYTQ0IDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29u
Zmlncy80NHgvcmFpbmllcl9kZWZjb25maWcNCkBAIC0zMCw3ICszMCw2IEBAIENPTkZJR19JUF9Q
TlBfQk9PVFA9eQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQog
Q09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9QQVJUSVRJT05T
PXkNCiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0K
IENPTkZJR19NVERfQ0hBUj15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4
L3JlZHdvb2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVm
Y29uZmlnDQppbmRleCA0ODgwMjgxLi5iNzExM2UxIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBj
L2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmln
cy80NHgvcmVkd29vZF9kZWZjb25maWcNCkBAIC0zNCw3ICszNCw2IEBAIENPTkZJR19VRVZFTlRf
SEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklH
X01URD15DQogQ09ORklHX01URF9DT05DQVQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQog
Q09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05G
SUdfTVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1
b2lhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZp
Zw0KaW5kZXggYjdhNjUzYi4uOTY0MmQ5OSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25m
aWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4
L3NlcXVvaWFfZGVmY29uZmlnDQpAQCAtMzEsNyArMzEsNiBAQCBDT05GSUdfSVBfUE5QX0JPT1RQ
PXkNCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJR19D
T05ORUNUT1I9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09O
RklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdf
TVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFu
X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZw0K
aW5kZXggMzBkZTk3Zi4uMDllMzA3NSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdz
LzQ0eC90YWlzaGFuX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3Rh
aXNoYW5fZGVmY29uZmlnDQpAQCAtMjksNyArMjksNiBAQCBDT05GSUdfSVBfUE5QX0JPT1RQPXkN
CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJR19DT05O
RUNUT1I9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklH
X01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KIENPTkZJR19NVERfQ0ZJ
PXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcg
Yi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcNCmluZGV4IDEwNWJjNTYu
LjU1MWU1MGEgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZj
b25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZw0KQEAg
LTM0LDcgKzM0LDYgQEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIN
CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQNCiAjIENPTkZJR19GSVJNV0FSRV9JTl9L
RVJORUwgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15
DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBD
T05GSUdfTVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgv
Y201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNv
bmZpZw0KaW5kZXggNjliNTdkYS4uNDU1Yzg1NSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9j
b25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
NTJ4eC9jbTUyMDBfZGVmY29uZmlnDQpAQCAtMzEsNyArMzEsNiBAQCBDT05GSUdfU1lOX0NPT0tJ
RVM9eQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogIyBDT05G
SUdfRldfTE9BREVSIGlzIG5vdCBzZXQNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJ
VElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkN
CiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81
Mnh4L21vdGlvbnByb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlv
bnByb19kZWZjb25maWcNCmluZGV4IDBjN2RlOTYuLmIwMDZmMWIgMTAwNjQ0DQotLS0gYS9hcmNo
L3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcNCisrKyBiL2FyY2gvcG93
ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZw0KQEAgLTMyLDcgKzMyLDYgQEAg
Q09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAjIENPTkZJR19GV19M
T0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENPTkZJR19NVERfQ09OQ0FUPXkNCi1D
T05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09O
RklHX01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bv
d2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmln
cy81Mnh4L3BjbTAzMF9kZWZjb25maWcNCmluZGV4IDIyZTcxOTUuLmRlZGU5YzggMTAwNjQ0DQot
LS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcNCisrKyBiL2Fy
Y2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZw0KQEAgLTQ1LDcgKzQ1LDYg
QEAgQ09ORklHX0lQX1BOUF9CT09UUD15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3Ni
aW4vaG90cGx1ZyINCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9
eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkN
CiBDT05GSUdfTVREX0NIQVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2Fy
Y2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMv
Y29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnDQppbmRleCA3MTZhMzdiLi40N2U1YjI1IDEw
MDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZw0K
KysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZw0KQEAgLTM2
LDcgKzM2LDYgQEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAj
IENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENPTkZJR19NVERf
Q09OQ0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9Q
QVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkNCmRpZmYg
LS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnIGIvYXJj
aC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZw0KaW5kZXggZDI3NjJkOS4u
OTg1Zjk1YyAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19k
ZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25m
aWcNCkBAIC0zMiw3ICszMiw2IEBAIENPTkZJR19TWU5fQ09PS0lFUz15DQogQ09ORklHX1VFVkVO
VF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90
IHNldA0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01U
RF9SRURCT09UX1BBUlRTPXkNCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9
eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25m
aWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4
eC9tcGM4MzEzX3JkYl9kZWZjb25maWcNCmluZGV4IGU0YWQyZTIuLjBiNzNiN2YgMTAwNjQ0DQot
LS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZw0KKysr
IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcNCkBAIC0z
MCw3ICszMCw2IEBAIENPTkZJR19TWU5fQ09PS0lFUz15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJf
UEFUSD0iL3NiaW4vaG90cGx1ZyINCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldA0KIENP
TkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9PRl9QQVJU
Uz15DQogQ09ORklHX01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYgLS1naXQg
YS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZyBiL2FyY2gv
cG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnDQppbmRleCAzNGZmNTY4
Li45N2FjM2I5IDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1
X3JkYl9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9y
ZGJfZGVmY29uZmlnDQpAQCAtMzAsNyArMzAsNiBAQCBDT05GSUdfU1lOX0NPT0tJRVM9eQ0KIENP
TkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogIyBDT05GSUdfRldfTE9B
REVSIGlzIG5vdCBzZXQNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0K
IENPTkZJR19NVERfQ0hBUj15DQogQ09ORklHX01URF9CTE9DSz15DQogQ09ORklHX01URF9DRkk9
eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVm
Y29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcN
CmluZGV4IDEwYjVjNGMuLjA1NzEwYmIgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmln
cy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
ODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcNCkBAIC0zMSw3ICszMSw2IEBAIENPTkZJR19TWU5f
Q09PS0lFUz15DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAj
IENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERf
UEFSVElUSU9OUz15DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NI
QVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25m
aWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4
eC9tcGM4MzZ4X3Jka19kZWZjb25maWcNCmluZGV4IDQ1OTI1ZDcuLjA1NDBkNjcgMTAwNjQ0DQot
LS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZw0KKysr
IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcNCkBAIC0y
OSw3ICsyOSw2IEBAIENPTkZJR19TWU5fQ09PS0lFUz15DQogIyBDT05GSUdfSVBWNiBpcyBub3Qg
c2V0DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdf
TVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJU
Uz15DQogQ09ORklHX01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYgLS1naXQg
YS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZw0KaW5kZXggNmQ2NDYzZi4uYTNiY2Rh
NiAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25m
aWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcNCkBA
IC0zMSw3ICszMSw2IEBAIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWci
DQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQNCiBDT05GSUdfTVREPXkNCiBDT05GSUdf
TVREX0NPTkNBVD15DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX0NNRExJ
TkVfUEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpk
aWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZyBi
L2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcNCmluZGV4IDhmN2Mx
MDYuLmFlZTBkMTcgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1
NjBfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVm
Y29uZmlnDQpAQCAtMjgsNyArMjgsNiBAQCBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jp
bi9ob3RwbHVnIg0KICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0DQogQ09ORklHX01URD15
DQogQ09ORklHX01URF9DT05DQVQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklH
X01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCiBDT05GSUdfTVREX0NGST15DQpkaWZm
IC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9wcGE4NTQ4X2RlZmNvbmZpZyBiL2Fy
Y2gvcG93ZXJwYy9jb25maWdzLzg1eHgvcHBhODU0OF9kZWZjb25maWcNCmluZGV4IGExMTMzN2Qu
LmU4MGJiOWIgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3BwYTg1NDhf
ZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3BwYTg1NDhfZGVmY29u
ZmlnDQpAQCAtNDQsNyArNDQsNiBAQCBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15DQogQ09ORklH
X01URF9DSEFSPXkNCiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfQ09O
Q0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfUEhZU01BUF9PRj15
DQogDQogQ09ORklHX0kyQz15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4
eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVz
X2RlZmNvbmZpZw0KaW5kZXggNzc1MDZiNS4uZTUxNDc0OCAxMDA2NDQNCi0tLSBhL2FyY2gvcG93
ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMv
Y29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZw0KQEAgLTMyLDcgKzMyLDYgQEAgQ09ORklH
X0NBTl9SQVc9eQ0KIENPTkZJR19DQU5fQkNNPXkNCiBDT05GSUdfTVREPXkNCiBDT05GSUdfTVRE
X0NPTkNBVD15DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX0NNRExJTkVf
UEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZm
IC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZyBiL2Fy
Y2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcNCmluZGV4IGRkY2I5ZjMu
LjVhODAwZTYgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBf
ZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29u
ZmlnDQpAQCAtMjYsNyArMjYsNiBAQCBDT05GSUdfU1lOX0NPT0tJRVM9eQ0KICMgQ09ORklHX0lQ
VjYgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENPTkZJR19NVERfQ09OQ0FUPXkNCi1DT05G
SUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklH
X01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2Vy
cGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
ODV4eC90cW04NTQxX2RlZmNvbmZpZw0KaW5kZXggOTgxYWJkNi4uMmQ5MzY2OSAxMDA2NDQNCi0t
LSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcNCisrKyBiL2Fy
Y2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcNCkBAIC0yNiw3ICsyNiw2
IEBAIENPTkZJR19TWU5fQ09PS0lFUz15DQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0DQogQ09O
RklHX01URD15DQogQ09ORklHX01URF9DT05DQVQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15
DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KIENPTkZJ
R19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFt
ODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29u
ZmlnDQppbmRleCAzN2IzZDcyLi5jZThhNjdlIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2Nv
bmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
ODV4eC90cW04NTQ4X2RlZmNvbmZpZw0KQEAgLTM0LDcgKzM0LDYgQEAgQ09ORklHX1NZTl9DT09L
SUVTPXkNCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KICMgQ09O
RklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0DQogQ09ORklHX01URD15DQotQ09ORklHX01URF9QQVJU
SVRJT05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KIENP
TkZJR19NVERfQkxLREVWUz15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4
eC90cW04NTU1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9k
ZWZjb25maWcNCmluZGV4IDM1OTNiMzIuLmE0ZTEyOTcgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2Vy
cGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29u
Zmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnDQpAQCAtMjYsNyArMjYsNiBAQCBDT05GSUdfU1lO
X0NPT0tJRVM9eQ0KICMgQ09ORklHX0lQVjYgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENP
TkZJR19NVERfQ09OQ0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERf
Q01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkN
CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmln
IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZw0KaW5kZXggZGU0
MTNhYy4uMzQxYWJlMSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFt
ODU2MF9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9k
ZWZjb25maWcNCkBAIC0yNiw3ICsyNiw2IEBAIENPTkZJR19TWU5fQ09PS0lFUz15DQogIyBDT05G
SUdfSVBWNiBpcyBub3Qgc2V0DQogQ09ORklHX01URD15DQogQ09ORklHX01URF9DT05DQVQ9eQ0K
LUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBD
T05GSUdfTVREX0NIQVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gv
cG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBj
L2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcNCmluZGV4IDFjZDZmY2IuLjA3YmI4
MWQgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2Rl
ZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZj
b25maWcNCkBAIC02NSw3ICs2NSw2IEBAIENPTkZJR19BUlBEPXkNCiBDT05GSUdfSVBWNj15DQog
Q09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfTVREPXkN
Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15DQog
Q09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCmRpZmYg
LS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9h
cmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcNCmluZGV4IGYyZjY3
MzQuLmU1YTY0ODEgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9w
cGM5YV9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlh
X2RlZmNvbmZpZw0KQEAgLTcwLDcgKzcwLDYgQEAgQ09ORklHX05FVF9QS1RHRU49bQ0KIENPTkZJ
R19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX01URD15DQogQ09O
RklHX01URF9DT05DQVQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9P
Rl9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkNCiBDT05GSUdfTVREX0JMT0NLPXkNCmRpZmYg
LS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnIGIv
YXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZw0KaW5kZXggYmU3
MzIxOS4uODMxN2I2MCAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2Vm
X3NiYzMxMF9kZWZjb25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3Ni
YzMxMF9kZWZjb25maWcNCkBAIC03MCw3ICs3MCw2IEBAIENPTkZJR19ORVRfUEtUR0VOPW0NCiBD
T05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJR19NVEQ9eQ0K
IENPTkZJR19NVERfQ09OQ0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19N
VERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQogQ09ORklHX01URF9CTE9DSz15DQpk
aWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZp
ZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcNCmluZGV4
IGIzZTJiMTAuLjEyNGQ2NmYgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4
L2dlZl9zYmM2MTBfZGVmY29uZmlnDQorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dl
Zl9zYmM2MTBfZGVmY29uZmlnDQpAQCAtMTIzLDcgKzEyMyw2IEBAIENPTkZJR19VRVZFTlRfSEVM
UEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQN
CiBDT05GSUdfTVREPXkNCiBDT05GSUdfTVREX0NPTkNBVD15DQotQ09ORklHX01URF9QQVJUSVRJ
T05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KIENPTkZJ
R19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBj
ODYxMF9ocGNkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9o
cGNkX2RlZmNvbmZpZw0KaW5kZXggYzA5NTk4Yi4uYmNiZTc0NyAxMDA2NDQNCi0tLSBhL2FyY2gv
cG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9w
b3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnDQpAQCAtNDEsNyArNDEs
NiBAQCBDT05GSUdfSVBfUE5QX1JBUlA9eQ0KIENPTkZJR19JUFY2PXkNCiBDT05GSUdfVUVWRU5U
X0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERf
UEFSVElUSU9OUz15DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NI
QVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25m
aWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9z
YmM4NjQxZF9kZWZjb25maWcNCmluZGV4IDFhNjJiYWYuLjFlMTUxNTkgMTAwNjQ0DQotLS0gYS9h
cmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9w
b3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcNCkBAIC0xMjAsNyArMTIwLDYg
QEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAjIENPTkZJR19G
V19MT0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENPTkZJR19NVERfQ09OQ0FUPXkN
Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQogQ09ORklHX01U
RF9CTE9DSz15DQogQ09ORklHX01URF9DRkk9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9j
b25maWdzL2Mya19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmln
DQppbmRleCA2NzFhOGY5Li5jNjlmNjE2IDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZp
Z3MvYzJrX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZp
Zw0KQEAgLTE0OSw3ICsxNDksNiBAQCBDT05GSUdfQlRfSENJVkhDST1tDQogQ09ORklHX1VFVkVO
VF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfTVREPXkNCiBDT05GSUdfTVRE
X0NPTkNBVD1tDQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRT
PXkNCiBDT05GSUdfTVREX0NIQVI9bQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBh
L2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvY29yZW5ldDY0X3NtcF9kZWZjb25maWcNCmluZGV4IDYzNTA4ZGQuLmU2Yzhk
MjAgMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0NjRfc21wX2RlZmNv
bmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY29yZW5ldDY0X3NtcF9kZWZjb25maWcN
CkBAIC02MCw3ICs2MCw2IEBAIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBs
dWciDQogQ09ORklHX0RFVlRNUEZTPXkNCiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQ0KIENPTkZJ
R19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15
DQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KZGlmZiAt
LWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gv
cG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZw0KaW5kZXggOGE4NzRiOS4uMzUz
NDM1MiAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNv
bmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnDQpA
QCAtNTksNyArNTksNiBAQCBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tDQogQ09ORklHX1VFVkVO
VF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfTVREPXkNCiBDT05GSUdfTVRE
X0NPTkNBVD15DQotQ09ORklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX0NNRExJTkVf
UEFSVFM9eQ0KIENPTkZJR19NVERfT0ZfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZm
IC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bv
d2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZw0KaW5kZXggZDJlMGZhYi4uNmMxM2E4NSAx
MDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnDQorKysg
Yi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZw0KQEAgLTgxLDcgKzgxLDYg
QEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfREVW
VE1QRlM9eQ0KIENPTkZJR19ERVZUTVBGU19NT1VOVD15DQogQ09ORklHX01URD15DQotQ09ORklH
X01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVREX0NN
RExJTkVfUEFSVFM9eQ0KIENPTkZJR19NVERfQ0hBUj15DQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
bXBjODV4eF9zbXBfZGVmY29uZmlnDQppbmRleCA0Y2I3YjU5Li4wODU1OGZmIDEwMDY0NA0KLS0t
IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnDQorKysgYi9hcmNo
L3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcNCkBAIC04NCw3ICs4NCw2IEBA
IENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0RFVlRN
UEZTPXkNCiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQ0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19N
VERfUEFSVElUSU9OUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQogQ09ORklHX01URF9DTURM
SU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJw
Yy9jb25maWdzL3BwYzQweF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhf
ZGVmY29uZmlnDQppbmRleCAxZWIxOWFjLi41MjkwOGM3IDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dl
cnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv
cHBjNDB4X2RlZmNvbmZpZw0KQEAgLTMzLDcgKzMzLDYgQEAgQ09ORklHX0lQX1BOUF9CT09UUD15
DQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiBDT05GSUdfQ09O
TkVDVE9SPXkNCiBDT05GSUdfTVREPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJ
R19NVERfQ01ETElORV9QQVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQogQ09ORklHX01U
RF9DSEFSPXkNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29u
ZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZw0KaW5kZXggM2I5OGQ3
My4uY2NmNjZiOSAxMDA2NDQNCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZj
b25maWcNCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcNCkBAIC00
NCw3ICs0NCw2IEBAIENPTkZJR19CUklER0U9bQ0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9
Ii9zYmluL2hvdHBsdWciDQogQ09ORklHX0NPTk5FQ1RPUj15DQogQ09ORklHX01URD15DQotQ09O
RklHX01URF9QQVJUSVRJT05TPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVRE
X0NIQVI9eQ0KIENPTkZJR19NVERfQkxPQ0s9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9j
b25maWdzL3BycG1jMjgwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4
MDBfZGVmY29uZmlnDQppbmRleCBjZDgwZmI2Li5mODRlYTIxIDEwMDY0NA0KLS0tIGEvYXJjaC9w
b3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2Nv
bmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZw0KQEAgLTMyLDcgKzMyLDYgQEAgQ09ORklHX1NZTl9D
T09LSUVTPXkNCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIg0KIENP
TkZJR19NVEQ9eQ0KIENPTkZJR19NVERfQ09OQ0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9
eQ0KIENPTkZJR19NVERfQ0hBUj15DQogQ09ORklHX01URF9CTE9DSz15DQogQ09ORklHX01URF9D
Rkk9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29u
ZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcNCmluZGV4IGVi
YjJhNjYuLmJhMzljNzggMTAwNjQ0DQotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2Vu
dGVyX2RlZmNvbmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZj
b25maWcNCkBAIC0zMSw3ICszMSw2IEBAIENPTkZJR19JUF9QTlBfREhDUD15DQogQ09ORklHX1VF
VkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAjIENPTkZJR19GV19MT0FERVIgaXMg
bm90IHNldA0KIENPTkZJR19NVEQ9eQ0KLUNPTkZJR19NVERfUEFSVElUSU9OUz15DQogQ09ORklH
X01URF9DTURMSU5FX1BBUlRTPXkNCiBDT05GSUdfTVREX09GX1BBUlRTPXkNCiBDT05GSUdfTVRE
X0NIQVI9eQ0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTh4eF9kZWZjb25m
aWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnDQppbmRleCA4NjE2ZmRl
Li42MmMzZTczIDEwMDY0NA0KLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNv
bmZpZw0KKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZw0KQEAgLTQx
LDcgKzQxLDYgQEAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyINCiAj
IENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldA0KIENPTkZJR19NVEQ9eQ0KIENPTkZJR19NVERf
Q09OQ0FUPXkNCi1DT05GSUdfTVREX1BBUlRJVElPTlM9eQ0KIENPTkZJR19NVERfQ01ETElORV9Q
QVJUUz15DQogQ09ORklHX01URF9PRl9QQVJUUz15DQogQ09ORklHX01URF9DSEFSPXkNCi0tIA0K
MS43LjAuNA0K
^ permalink raw reply
* Re: [PATCH 1/1] powerpc: Increase EEH recovery timeout for SR-IOV
From: Gavin Shan @ 2013-11-27 1:53 UTC (permalink / raw)
To: Brian King; +Cc: linuxppc-dev, shangw
In-Reply-To: <201311252227.rAPMRtC2018812@d03av05.boulder.ibm.com>
On Mon, Nov 25, 2013 at 04:27:54PM -0600, Brian King wrote:
>
>In order to support concurrent adapter firmware download
>to SR-IOV adapters on pSeries, each VF will see an EEH event
>where the slot will remain in the unavailable state for
>the duration of the adapter firmware update, which can take
>as long as 5 minutes. Extend the EEH recovery timeout to
>account for this.
>
>Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Acked-by: Gavin Shan <shangw@linux.vnet.ibm.com>
>---
>
> arch/powerpc/kernel/eeh.c | 2 +-
> arch/powerpc/kernel/eeh_driver.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
>diff -puN arch/powerpc/kernel/eeh.c~eeh_sriov_vf_delay arch/powerpc/kernel/eeh.c
>--- linux/arch/powerpc/kernel/eeh.c~eeh_sriov_vf_delay 2013-11-25 16:12:26.000000000 -0600
>+++ linux-bjking1/arch/powerpc/kernel/eeh.c 2013-11-25 16:12:26.000000000 -0600
>@@ -84,7 +84,7 @@
> #define EEH_MAX_FAILS 2100000
>
> /* Time to wait for a PCI slot to report status, in milliseconds */
>-#define PCI_BUS_RESET_WAIT_MSEC (60*1000)
>+#define PCI_BUS_RESET_WAIT_MSEC (5*60*1000)
>
> /* Platform dependent EEH operations */
> struct eeh_ops *eeh_ops = NULL;
>diff -puN arch/powerpc/kernel/eeh_driver.c~eeh_sriov_vf_delay arch/powerpc/kernel/eeh_driver.c
>--- linux/arch/powerpc/kernel/eeh_driver.c~eeh_sriov_vf_delay 2013-11-25 16:12:26.000000000 -0600
>+++ linux-bjking1/arch/powerpc/kernel/eeh_driver.c 2013-11-25 16:12:26.000000000 -0600
>@@ -468,7 +468,7 @@ static int eeh_reset_device(struct eeh_p
> /* The longest amount of time to wait for a pci device
> * to come back on line, in seconds.
> */
>-#define MAX_WAIT_FOR_RECOVERY 150
>+#define MAX_WAIT_FOR_RECOVERY 300
>
> static void eeh_handle_normal_event(struct eeh_pe *pe)
> {
Thanks,
Gavin
^ 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