Re: [PATCH v5 1/3] powerpc: make fadump resilient with memory add/remove events

2023-11-12 Thread Sourabh Jain

Hello Michael,


On 09/11/23 17:44, Michael Ellerman wrote:

Hi Sourabh,

This seems like a good change to the design, but I'm confused by
some things, more below ...


Thanks.


Sourabh Jain  writes:
...

Table 1 below illustrates kernel's ability to collect dump if either the
first/crashed kernel or the second/fadump kernel does not have the
changes introduced here. Consider the 'old kernel' as the kernel without
this patch, and the 'new kernel' as the kernel with this patch included.

+--+++---+
| scenario |  first/crashed kernel  |  second/fadump kernel  |  Dump |
+--+++---+
|1 |   old kernel   |new kernel  |  Yes  |
+--+++---+
|2 |   new kernel   |old kernel  |  No   |
+--+++---+

  Table 1

Scenario 1:
---
Since the magic number of fadump header is updated, the second kernel
can differentiate the crashed kernel is of type 'new kernel' or
'old kernel' and act accordingly. In this scenario, since the crashed
kernel is of type 'old kernel,' the fadump kernel skips elfcorehdr
creation and uses the one prepared in the first kernel itself to collect
the dump.

Scenario 2:
---
Since 'old kernel' as the fadump kernel is NOT capable of processing
fadump header with updated magic number from 'new kernel' hence it
gracefully fails with the below error and dump collection fails in this
scenario.

[0.007365] rtas fadump: Crash info header is not valid.

Add a version field to the fadump_crash_info_header structure to avoid
the need to change its magic number in the future. Adding a version
field to the fadump header was one of the TODO items listed in
Documentation/powerpc/firmware-assisted-dump.rst.

This is a good analysis of the issues with different kernel versions,
and seems like an OK trade off, ie. that old kernels can't process dumps
from new kernels.

But do we actually support using different kernel versions for the
crash/dump kernel?

Because AFAICS the fadump_crash_info_header is not safe across kernel
versions, in its current form or with your changes.


Yeah, I was also under the impression that it is not supported, but I 
was not aware

that the size of pt_regs and cpumask can change based on the configuration.




diff --git a/arch/powerpc/include/asm/fadump-internal.h 
b/arch/powerpc/include/asm/fadump-internal.h
index 27f9e11eda28..7be3d8894520 100644
--- a/arch/powerpc/include/asm/fadump-internal.h
+++ b/arch/powerpc/include/asm/fadump-internal.h
@@ -42,7 +42,25 @@ static inline u64 fadump_str_to_u64(const char *str)
  
  #define FADUMP_CPU_UNKNOWN		(~((u32)0))
  
-#define FADUMP_CRASH_INFO_MAGIC		fadump_str_to_u64("FADMPINF")

+/*
+ * The introduction of new fields in the fadump crash info header has
+ * led to a change in the magic key, from `FADMPINF` to `FADMPSIG`.
+ * This alteration ensures backward compatibility, enabling the kernel
+ * with the updated fadump crash info to handle kernel dumps from older
+ * kernels.
+ *
+ * To prevent the need for further changes to the magic number in the
+ * event of future modifications to the fadump header, a version field
+ * has been introduced to track the fadump crash info header version.
+ *
+ * Historically, there was no connection between the magic number and
+ * the fadump crash info header version. However, moving forward, the
+ * `FADMPINF` magic number in header will be treated as version 0, while
+ * the `FADMPSIG` magic number in header will include a version field to
+ * determine its version.
+ */
+#define FADUMP_CRASH_INFO_MAGICfadump_str_to_u64("FADMPSIG")
+#define FADUMP_VERSION 1
  
  /* fadump crash info structure */

  struct fadump_crash_info_header {
@@ -51,6 +69,10 @@ struct fadump_crash_info_header {


struct fadump_crash_info_header {
u64 magic_number;
u64 elfcorehdr_addr;


u32 crashing_cpu;
struct pt_regs  regs;
struct cpumask  cpu_mask;
+   u32 version;
+   u64 elfcorehdr_size;
+   u64 vmcoreinfo_raddr;
+   u64 vmcoreinfo_size;
  };

The reason I say it's not safe is because pt_regs and especially cpumask
can change size depending on the kernel configuration.

pt_regs probably doesn't change size in practice for common kernel
configurations, but some of the fields are under #ifdef.

cpumask on the other hand is directly controlled by CONFIG_NR_CPUS. So
if the first and second kernel have a different value for NR_CPUS they
will disagree on the size of the struct.

That has presumably worked OK so far because folks tend to use the same, or
similar kernels for the first/second kernel. And also the cpumask is the

[PATCH v4] powerpc/pseries/vas: Migration suspend waits for no in-progress open windows

2023-11-12 Thread Haren Myneni
The hypervisor returns migration failure if all VAS windows are not
closed. During pre-migration stage, vas_migration_handler() sets
migration_in_progress flag and closes all windows from the list.
The allocate VAS window routine checks the migration flag, setup
the window and then add it to the list. So there is possibility of
the migration handler missing the window that is still in the
process of setup.

t1: Allocate and open VAS   t2: Migration event
window

lock vas_pseries_mutex
If migration_in_progress set
  unlock vas_pseries_mutex
  return
open window HCALL
unlock vas_pseries_mutex
Modify window HCALL lock vas_pseries_mutex
setup windowmigration_in_progress=true
Closes all windows from
the list
unlock vas_pseries_mutex
lock vas_pseries_mutex  return
if nr_closed_windows == 0
  // No DLPAR CPU or migration
  add to the list
  unlock vas_pseries_mutex
  return
unlock vas_pseries_mutex
Close VAS window
// due to DLPAR CPU or migration
return -EBUSY

This patch resolves the issue with the following steps:
- Set the migration_in_progress flag without holding mutex.
- Introduce nr_open_wins_progress counter in VAS capabilities
  struct
- This counter tracks the number of open windows are still in
  progress
- The allocate setup window thread closes windows if the migration
  is set and decrements nr_open_window_progress counter
- The migration handler waits for no in-progress open windows.

Fixes: 37e6764895ef ("powerpc/pseries/vas: Add VAS migration handler")
Signed-off-by: Haren Myneni 

---
v1 -> v2:
- Do not define the migration_in_progress flag as atomic as
  suggested by Nathan

v2 -> v3:
- Use wait_event() instead of wait_event_interruptible() so that
  returns after all windows are closed as suggested by Nathan

v3 -> v4:
- remove atomic for nr_open_wins_progress counter as suggested by
  Nathan and Michael Ellerman
- Use sleep instead of wait_event_interruptible() to check
  nr_open_wins_progress counter under mutex.
---
 arch/powerpc/platforms/pseries/vas.c | 51 
 arch/powerpc/platforms/pseries/vas.h |  2 ++
 2 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/vas.c 
b/arch/powerpc/platforms/pseries/vas.c
index b1f25bac280b..71d52a670d95 100644
--- a/arch/powerpc/platforms/pseries/vas.c
+++ b/arch/powerpc/platforms/pseries/vas.c
@@ -385,11 +385,15 @@ static struct vas_window *vas_allocate_window(int vas_id, 
u64 flags,
 * same fault IRQ is not freed by the OS before.
 */
mutex_lock(_pseries_mutex);
-   if (migration_in_progress)
+   if (migration_in_progress) {
rc = -EBUSY;
-   else
+   } else {
rc = allocate_setup_window(txwin, (u64 *)[0],
   cop_feat_caps->win_type);
+   if (!rc)
+   caps->nr_open_wins_progress++;
+   }
+
mutex_unlock(_pseries_mutex);
if (rc)
goto out;
@@ -404,8 +408,17 @@ static struct vas_window *vas_allocate_window(int vas_id, 
u64 flags,
goto out_free;
 
txwin->win_type = cop_feat_caps->win_type;
-   mutex_lock(_pseries_mutex);
+
/*
+* The migration SUSPEND thread sets migration_in_progress and
+* closes all open windows from the list. But the window is
+* added to the list after open and modify HCALLs. So possible
+* that migration_in_progress is set before modify HCALL which
+* may cause some windows are still open when the hypervisor
+* initiates the migration.
+* So checks the migration_in_progress flag again and close all
+* open windows.
+*
 * Possible to lose the acquired credit with DLPAR core
 * removal after the window is opened. So if there are any
 * closed windows (means with lost credits), do not give new
@@ -413,9 +426,11 @@ static struct vas_window *vas_allocate_window(int vas_id, 
u64 flags,
 * after the existing windows are reopened when credits are
 * available.
 */
-   if (!caps->nr_close_wins) {
+   mutex_lock(_pseries_mutex);
+   if (!caps->nr_close_wins && !migration_in_progress) {
list_add(>win_list, >list);
caps->nr_open_windows++;
+   caps->nr_open_wins_progress--;
mutex_unlock(_pseries_mutex);
vas_user_win_add_mm_context(>vas_win.task_ref);
return >vas_win;
@@ -433,6 +448,12 @@ static struct vas_window *vas_allocate_window(int vas_id, 
u64 flags,
 */
free_irq_setup(txwin);
h_deallocate_vas_window(txwin->vas_win.winid);
+   /*
+* Hold mutex and reduce nr_open_wins_progress counter.
+*/
+   mutex_lock(_pseries_mutex);
+   caps->nr_open_wins_progress--;
+   

[PATCH] powerpc/32: Drop unused grackle_set_stg()

2023-11-12 Thread Michael Ellerman
The call to grackle_set_stg() ("Store Gathering") has always been inside
an #ifdef 0, since the code was first merged in v2.3.43pre7.

Apparently it was suspected of causing problems on some hardware so was
disabled. No one has ever proved otherwise so drop the code as unused
for now.

Reported-by: kernel test robot 
Reported-by: Bjorn Helgaas 
Closes: https://lore.kernel.org/all/20231031145600.GA9161@bhelgaas/
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/sysdev/grackle.c | 19 ---
 1 file changed, 19 deletions(-)

Some additional detail too verbose/boring for the change log.

Initial commit introducing the code, under #ifdef 0:
https://git.kernel.org/pub/scm/linux/kernel/git/mpe/linux-fullhistory.git/tree/arch/ppc/kernel/pmac_pci.c?id=2fac5cbf1dd9a7720aa0130575a0b36ba4f04ede#n623

Discussion of the hardware problems it might have caused, but with no 
meaningful conclusion:
https://lore.kernel.org/all/2903134303.2744@192.168.1.10/


diff --git a/arch/powerpc/sysdev/grackle.c b/arch/powerpc/sysdev/grackle.c
index fd2f94a884f0..7dce8278b71e 100644
--- a/arch/powerpc/sysdev/grackle.c
+++ b/arch/powerpc/sysdev/grackle.c
@@ -18,24 +18,8 @@
 #define GRACKLE_CFA(b, d, o)   (0x80 | ((b) << 8) | ((d) << 16) \
 | (((o) & ~3) << 24))
 
-#define GRACKLE_PICR1_STG  0x0040
 #define GRACKLE_PICR1_LOOPSNOOP0x0010
 
-/* N.B. this is called before bridges is initialized, so we can't
-   use grackle_pcibios_{read,write}_config_dword. */
-static inline void grackle_set_stg(struct pci_controller* bp, int enable)
-{
-   unsigned int val;
-
-   out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8));
-   val = in_le32(bp->cfg_data);
-   val = enable? (val | GRACKLE_PICR1_STG) :
-   (val & ~GRACKLE_PICR1_STG);
-   out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8));
-   out_le32(bp->cfg_data, val);
-   (void)in_le32(bp->cfg_data);
-}
-
 static inline void grackle_set_loop_snoop(struct pci_controller *bp, int 
enable)
 {
unsigned int val;
@@ -56,7 +40,4 @@ void __init setup_grackle(struct pci_controller *hose)
pci_add_flags(PCI_REASSIGN_ALL_BUS);
if (of_machine_is_compatible("AAPL,PowerBook1998"))
grackle_set_loop_snoop(hose, 1);
-#if 0  /* Disabled for now, HW problems ??? */
-   grackle_set_stg(hose, 1);
-#endif
 }
-- 
2.41.0



[PATCH] powerpc: Remove orphaned reg_a2.h

2023-11-12 Thread Michael Ellerman
Commit fb5a515704d7 ("powerpc: Remove platforms/wsp and associated
pieces") removed the A2 CPU support, but missed removal of reg_a2.h.

None of the defines contained in it are used, with the exception of the
SPRN_TEN* values, but they are also defined in reg_booke.h.

Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/reg_a2.h| 154 ---
 arch/powerpc/kernel/exceptions-64e.S |   1 -
 arch/powerpc/kernel/udbg_16550.c |   1 -
 3 files changed, 156 deletions(-)
 delete mode 100644 arch/powerpc/include/asm/reg_a2.h

diff --git a/arch/powerpc/include/asm/reg_a2.h 
b/arch/powerpc/include/asm/reg_a2.h
deleted file mode 100644
index 74fba29e9491..
--- a/arch/powerpc/include/asm/reg_a2.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- *  Register definitions specific to the A2 core
- *
- *  Copyright (C) 2008 Ben. Herrenschmidt (b...@kernel.crashing.org), IBM Corp.
- */
-
-#ifndef __ASM_POWERPC_REG_A2_H__
-#define __ASM_POWERPC_REG_A2_H__
-
-#include 
-
-#define SPRN_TENSR 0x1b5
-#define SPRN_TENS  0x1b6   /* Thread ENable Set */
-#define SPRN_TENC  0x1b7   /* Thread ENable Clear */
-
-#define SPRN_A2_CCR0   0x3f0   /* Core Configuration Register 0 */
-#define SPRN_A2_CCR1   0x3f1   /* Core Configuration Register 1 */
-#define SPRN_A2_CCR2   0x3f2   /* Core Configuration Register 2 */
-#define SPRN_MMUCR00x3fc   /* MMU Control Register 0 */
-#define SPRN_MMUCR10x3fd   /* MMU Control Register 1 */
-#define SPRN_MMUCR20x3fe   /* MMU Control Register 2 */
-#define SPRN_MMUCR30x3ff   /* MMU Control Register 3 */
-
-#define SPRN_IAR   0x372
-
-#define SPRN_IUCR0 0x3f3
-#define IUCR0_ICBI_ACK 0x1000
-
-#define SPRN_XUCR0 0x3f6   /* Execution Unit Config Register 0 */
-
-#define A2_IERAT_SIZE  16
-#define A2_DERAT_SIZE  32
-
-/* A2 MMUCR0 bits */
-#define MMUCR0_ECL 0x8000  /* Extended Class for TLB fills */
-#define MMUCR0_TID_NZ  0x4000  /* TID is non-zero */
-#define MMUCR0_TS  0x1000  /* Translation space for TLB fills */
-#define MMUCR0_TGS 0x2000  /* Guest space for TLB fills */
-#define MMUCR0_TLBSEL  0x0c00  /* TLB or ERAT target for TLB fills */
-#define MMUCR0_TLBSEL_U0x  /*  TLBSEL = UTLB */
-#define MMUCR0_TLBSEL_I0x0800  /*  TLBSEL = I-ERAT */
-#define MMUCR0_TLBSEL_D0x0c00  /*  TLBSEL = D-ERAT */
-#define MMUCR0_LOCKSRSH0x0200  /* Use TLB lock on tlbsx. */
-#define MMUCR0_TID_MASK0x00ff  /* TID field */
-
-/* A2 MMUCR1 bits */
-#define MMUCR1_IRRE0x8000  /* I-ERAT round robin enable */
-#define MMUCR1_DRRE0x4000  /* D-ERAT round robin enable */
-#define MMUCR1_REE 0x2000  /* Reference Exception Enable*/
-#define MMUCR1_CEE 0x1000  /* Change exception enable */
-#define MMUCR1_CSINV_ALL   0x  /* Inval ERAT on all CS evts */
-#define MMUCR1_CSINV_NISYNC0x0400  /* Inval ERAT on all ex isync*/
-#define MMUCR1_CSINV_NEVER 0x0c00  /* Don't inval ERAT on CS */
-#define MMUCR1_ICTID   0x0008  /* IERAT class field as TID */
-#define MMUCR1_ITTID   0x0004  /* IERAT thdid field as TID */
-#define MMUCR1_DCTID   0x0002  /* DERAT class field as TID */
-#define MMUCR1_DTTID   0x0001  /* DERAT thdid field as TID */
-#define MMUCR1_DCCD0x8000  /* DERAT class ignore */
-#define MMUCR1_TLBWE_BINV  0x4000  /* back invalidate on tlbwe */
-
-/* A2 MMUCR2 bits */
-#define MMUCR2_PSSEL_SHIFT 4
-
-/* A2 MMUCR3 bits */
-#define MMUCR3_THID0x000f  /* Thread ID */
-
-/* *** ERAT TLB bits definitions */
-#define TLB0_EPN_MASK  ASM_CONST(0xf000)
-#define TLB0_CLASS_MASKASM_CONST(0x0c00)
-#define TLB0_CLASS_00  ASM_CONST(0x)
-#define TLB0_CLASS_01  ASM_CONST(0x0400)
-#define TLB0_CLASS_10  ASM_CONST(0x0800)
-#define TLB0_CLASS_11  ASM_CONST(0x0c00)
-#define TLB0_V ASM_CONST(0x0200)
-#define TLB0_X ASM_CONST(0x0100)
-#define TLB0_SIZE_MASK ASM_CONST(0x00f0)
-#define TLB0_SIZE_4K   ASM_CONST(0x0010)
-#define TLB0_SIZE_64K  ASM_CONST(0x0030)
-#define TLB0_SIZE_1M   ASM_CONST(0x0050)
-#define TLB0_SIZE_16M  ASM_CONST(0x0070)
-#define TLB0_SIZE_1G   ASM_CONST(0x00a0)
-#define TLB0_THDID_MASKASM_CONST(0x000f)
-#define TLB0_THDID_0   ASM_CONST(0x0001)
-#define TLB0_THDID_1   ASM_CONST(0x0002)
-#define TLB0_THDID_2   ASM_CONST(0x0004)
-#define TLB0_THDID_3 

Re: [PATCH 15/34] KVM: Add KVM_CREATE_GUEST_MEMFD ioctl() for guest-specific backing memory

2023-11-12 Thread Xiaoyao Li

On 11/11/2023 2:22 AM, Sean Christopherson wrote:

On Fri, Nov 10, 2023, Xiaoyao Li wrote:

On 11/6/2023 12:30 AM, Paolo Bonzini wrote:

diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 68a144cb7dbc..a6de526c0426 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -589,8 +589,20 @@ struct kvm_memory_slot {
u32 flags;
short id;
u16 as_id;
+
+#ifdef CONFIG_KVM_PRIVATE_MEM
+   struct {
+   struct file __rcu *file;
+   pgoff_t pgoff;
+   } gmem;
+#endif
   };
+static inline bool kvm_slot_can_be_private(const struct kvm_memory_slot *slot)
+{
+   return slot && (slot->flags & KVM_MEM_GUEST_MEMFD);
+}
+


maybe we can move this block and ...




@@ -2355,6 +2379,30 @@ bool kvm_arch_pre_set_memory_attributes(struct kvm *kvm,
struct kvm_gfn_range *range);
   bool kvm_arch_post_set_memory_attributes(struct kvm *kvm,
 struct kvm_gfn_range *range);
+
+static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
+{
+   return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) &&
+  kvm_get_memory_attributes(kvm, gfn) & 
KVM_MEMORY_ATTRIBUTE_PRIVATE;
+}
+#else
+static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
+{
+   return false;
+}
   #endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */


this block to Patch 18?


It would work, but my vote is to keep them here to minimize the changes to 
common
KVM code in the x86 enabling.  It's not a strong preference though.  Of course,
at this point, fiddling with this sort of thing is probably a bad idea in terms
of landing guest_memfd.


Indeed. It's OK then.


@@ -4844,6 +4875,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct 
kvm *kvm, long arg)
   #ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES
case KVM_CAP_MEMORY_ATTRIBUTES:
return kvm_supported_mem_attributes(kvm);
+#endif
+#ifdef CONFIG_KVM_PRIVATE_MEM
+   case KVM_CAP_GUEST_MEMFD:
+   return !kvm || kvm_arch_has_private_mem(kvm);
   #endif
default:
break;
@@ -5277,6 +5312,18 @@ static long kvm_vm_ioctl(struct file *filp,
case KVM_GET_STATS_FD:
r = kvm_vm_ioctl_get_stats_fd(kvm);
break;
+#ifdef CONFIG_KVM_PRIVATE_MEM
+   case KVM_CREATE_GUEST_MEMFD: {
+   struct kvm_create_guest_memfd guest_memfd;


Do we need a guard of below?

r = -EINVAL;
if (!kvm_arch_has_private_mem(kvm))
goto out;


Argh, yeah, that's weird since KVM_CAP_GUEST_MEMFD says "not supported" if the
VM doesn't support private memory.

Enforcing that would break guest_memfd_test.c though.  And having to create a
"special" VM just to test basic guest_memfd functionality would be quite
annoying.

So my vote is to do:

case KVM_CAP_GUEST_MEMFD:
return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM);


I'm fine with it.


There's no harm to KVM if userspace creates a file it can't use, and at some
point KVM will hopefully support guest_memfd irrespective of private memory.




Re: (subset) [PATCH v5 0/5] ppc, fbdev: Clean up fbdev mmap helper

2023-11-12 Thread Michael Ellerman
On Fri, 22 Sep 2023 10:04:54 +0200, Thomas Zimmermann wrote:
> Clean up and rename fb_pgprotect() to work without struct file. Then
> refactor the implementation for PowerPC. This change has been discussed
> at [1] in the context of refactoring fbdev's mmap code.
> 
> The first two patches update fbdev and replace fbdev's fb_pgprotect()
> with pgprot_framebuffer() on all architectures. The new helper's stream-
> lined interface enables more refactoring within fbdev's mmap
> implementation.
> 
> [...]

Patches 3-5 applied to powerpc/fixes.

[3/5] arch/powerpc: Remove trailing whitespaces
  https://git.kernel.org/powerpc/c/322948c3198cf80e7c10d953ddad24ebd85757cd
[4/5] arch/powerpc: Remove file parameter from phys_mem_access_prot code
  https://git.kernel.org/powerpc/c/1f92a844c35e483c00bab8a7b7d39c555ee799d8
[5/5] arch/powerpc: Call internal __phys_mem_access_prot() in fbdev code
  https://git.kernel.org/powerpc/c/deebe5f607d7f72f83c41163191ad0c1c4356385

cheers


Re: (subset) [PATCH 0/7] powerpc/rtas: Trivial, coding style, and kernel-doc fixes

2023-11-12 Thread Michael Ellerman
On Mon, 06 Nov 2023 07:42:52 -0600, Nathan Lynch wrote:
> * Fix recently introduced kernel-doc warnings.
> * Make minor coding style adjustments for readability.
> * Remove rtas_service_present() and an old call_rtas() declaration.
> * Move a pseries-specific function prototype to pseries code.
> 

Patches 1-2 applied to powerpc/fixes.

[1/7] powerpc/pseries/rtas-work-area: Fix rtas_work_area_reserve_arena() 
kernel-doc
  https://git.kernel.org/powerpc/c/6508d3d16b282674aeef5cce5c72226c05e0
[2/7] powerpc/rtas: Fix ppc_rtas_rmo_buf_show() kernel-doc
  https://git.kernel.org/powerpc/c/644b6025bcaff59737270d812c70302f5a8d4a8f

cheers


[PATCH] misc: ocxl: main: Remove unnecessary ‘0’ values from rc

2023-11-12 Thread Li kunyu
rc is assigned first, so it does not need to initialize the assignment.

Signed-off-by: Li kunyu 
---
 drivers/misc/ocxl/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/ocxl/main.c b/drivers/misc/ocxl/main.c
index ef73cf35dda2b..658974143c3cc 100644
--- a/drivers/misc/ocxl/main.c
+++ b/drivers/misc/ocxl/main.c
@@ -7,7 +7,7 @@
 
 static int __init init_ocxl(void)
 {
-   int rc = 0;
+   int rc;
 
if (!tlbie_capable)
return -EINVAL;
-- 
2.18.2



[PATCH] misc: ocxl: link: Remove unnecessary (void*) conversions

2023-11-12 Thread Li zeming
The link pointer does not need to cast the type.

Signed-off-by: Li zeming 
---
 drivers/misc/ocxl/link.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/misc/ocxl/link.c b/drivers/misc/ocxl/link.c
index c06c699c0e7b1..03402203cacdb 100644
--- a/drivers/misc/ocxl/link.c
+++ b/drivers/misc/ocxl/link.c
@@ -188,7 +188,7 @@ static void xsl_fault_handler_bh(struct work_struct 
*fault_work)
 
 static irqreturn_t xsl_fault_handler(int irq, void *data)
 {
-   struct ocxl_link *link = (struct ocxl_link *) data;
+   struct ocxl_link *link = data;
struct spa *spa = link->spa;
u64 dsisr, dar, pe_handle;
struct pe_data *pe_data;
@@ -483,7 +483,7 @@ static void release_xsl(struct kref *ref)
 
 void ocxl_link_release(struct pci_dev *dev, void *link_handle)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
 
mutex_lock(_list_lock);
kref_put(>ref, release_xsl);
@@ -540,7 +540,7 @@ int ocxl_link_add_pe(void *link_handle, int pasid, u32 
pidr, u32 tidr,
void (*xsl_err_cb)(void *data, u64 addr, u64 dsisr),
void *xsl_err_data)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
struct spa *spa = link->spa;
struct ocxl_process_element *pe;
int pe_handle, rc = 0;
@@ -630,7 +630,7 @@ EXPORT_SYMBOL_GPL(ocxl_link_add_pe);
 
 int ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
struct spa *spa = link->spa;
struct ocxl_process_element *pe;
int pe_handle, rc;
@@ -666,7 +666,7 @@ int ocxl_link_update_pe(void *link_handle, int pasid, __u16 
tid)
 
 int ocxl_link_remove_pe(void *link_handle, int pasid)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
struct spa *spa = link->spa;
struct ocxl_process_element *pe;
struct pe_data *pe_data;
@@ -752,7 +752,7 @@ EXPORT_SYMBOL_GPL(ocxl_link_remove_pe);
 
 int ocxl_link_irq_alloc(void *link_handle, int *hw_irq)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
int irq;
 
if (atomic_dec_if_positive(>irq_available) < 0)
@@ -771,7 +771,7 @@ EXPORT_SYMBOL_GPL(ocxl_link_irq_alloc);
 
 void ocxl_link_free_irq(void *link_handle, int hw_irq)
 {
-   struct ocxl_link *link = (struct ocxl_link *) link_handle;
+   struct ocxl_link *link = link_handle;
 
xive_native_free_irq(hw_irq);
atomic_inc(>irq_available);
-- 
2.18.2



[PATCH 3/3] PCI: dwc: Add dw_pcie_ep_{read,write}_dbi[2] helpers

2023-11-12 Thread Yoshihiro Shimoda
The current code calculated some dbi[2] registers' offset by calling
dw_pcie_ep_get_dbi[2]_offset() in each function. To improve code
readability, add dw_pcie_ep_{read,write}_dbi[2} and some data-width
related helpers.

Signed-off-by: Yoshihiro Shimoda 
---
 .../pci/controller/dwc/pcie-designware-ep.c   | 230 ++
 1 file changed, 129 insertions(+), 101 deletions(-)

diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c 
b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 1100671db887..dcbed49c9613 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -65,24 +65,89 @@ static unsigned int dw_pcie_ep_get_dbi2_offset(struct 
dw_pcie_ep *ep, u8 func_no
return dbi2_offset;
 }
 
+static u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no, u32 reg,
+  size_t size)
+{
+   unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
+   struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
+
+   return dw_pcie_read_dbi(pci, offset + reg, size);
+}
+
+static void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no, u32 reg,
+size_t size, u32 val)
+{
+   unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
+   struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
+
+   dw_pcie_write_dbi(pci, offset + reg, size, val);
+}
+
+static void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no, u32 reg,
+ size_t size, u32 val)
+{
+   unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no);
+   struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
+
+   dw_pcie_write_dbi2(pci, offset + reg, size, val);
+}
+
+static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no,
+u32 reg, u32 val)
+{
+   dw_pcie_ep_write_dbi(ep, func_no, reg, 0x4, val);
+}
+
+static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no,
+  u32 reg)
+{
+   return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x4);
+}
+
+static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no,
+u32 reg, u16 val)
+{
+   dw_pcie_ep_write_dbi(ep, func_no, reg, 0x2, val);
+}
+
+static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no,
+  u32 reg)
+{
+   return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x2);
+}
+
+static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no,
+u32 reg, u8 val)
+{
+   dw_pcie_ep_write_dbi(ep, func_no, reg, 0x1, val);
+}
+
+static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no,
+ u32 reg)
+{
+   return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x1);
+}
+
+static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no,
+ u32 reg, u32 val)
+{
+   dw_pcie_ep_write_dbi2(ep, func_no, reg, 0x4, val);
+}
+
 static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, u8 func_no,
   enum pci_barno bar, int flags)
 {
-   unsigned int dbi_offset, dbi2_offset;
struct dw_pcie_ep *ep = >ep;
u32 reg, reg_dbi2;
 
-   dbi_offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
-   dbi2_offset = dw_pcie_ep_get_dbi2_offset(ep, func_no);
-
-   reg = dbi_offset + PCI_BASE_ADDRESS_0 + (4 * bar);
-   reg_dbi2 = dbi2_offset + PCI_BASE_ADDRESS_0 + (4 * bar);
+   reg = PCI_BASE_ADDRESS_0 + (4 * bar);
+   reg_dbi2 = PCI_BASE_ADDRESS_0 + (4 * bar);
dw_pcie_dbi_ro_wr_en(pci);
-   dw_pcie_writel_dbi2(pci, reg_dbi2, 0x0);
-   dw_pcie_writel_dbi(pci, reg, 0x0);
+   dw_pcie_ep_writel_dbi2(ep, func_no, reg_dbi2, 0x0);
+   dw_pcie_ep_writel_dbi(ep, func_no, reg, 0x0);
if (flags & PCI_BASE_ADDRESS_MEM_TYPE_64) {
-   dw_pcie_writel_dbi2(pci, reg_dbi2 + 4, 0x0);
-   dw_pcie_writel_dbi(pci, reg + 4, 0x0);
+   dw_pcie_ep_writel_dbi2(ep, func_no, reg_dbi2 + 4, 0x0);
+   dw_pcie_ep_writel_dbi(ep, func_no, reg + 4, 0x0);
}
dw_pcie_dbi_ro_wr_dis(pci);
 }
@@ -99,19 +164,15 @@ void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum 
pci_barno bar)
 EXPORT_SYMBOL_GPL(dw_pcie_ep_reset_bar);
 
 static u8 __dw_pcie_ep_find_next_cap(struct dw_pcie_ep *ep, u8 func_no,
-   u8 cap_ptr, u8 cap)
+u8 cap_ptr, u8 cap)
 {
-   struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
-   unsigned int dbi_offset = 0;
u8 cap_id, next_cap_ptr;
u16 reg;
 
if (!cap_ptr)
return 0;
 
-   dbi_offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
-
-   reg = dw_pcie_readw_dbi(pci, dbi_offset + cap_ptr);
+   reg = dw_pcie_ep_readw_dbi(ep, func_no, cap_ptr);

[PATCH 1/3] PCI: dwc: Rename to .init in struct dw_pcie_ep_ops

2023-11-12 Thread Yoshihiro Shimoda
Since the name of dw_pcie_ep_ops indicates that it's for ep obviously,
rename a member .ep_init to .init.

Signed-off-by: Yoshihiro Shimoda 
---
 drivers/pci/controller/dwc/pci-dra7xx.c   | 2 +-
 drivers/pci/controller/dwc/pci-imx6.c | 2 +-
 drivers/pci/controller/dwc/pci-keystone.c | 2 +-
 drivers/pci/controller/dwc/pci-layerscape-ep.c| 2 +-
 drivers/pci/controller/dwc/pcie-artpec6.c | 2 +-
 drivers/pci/controller/dwc/pcie-designware-ep.c   | 4 ++--
 drivers/pci/controller/dwc/pcie-designware-plat.c | 2 +-
 drivers/pci/controller/dwc/pcie-designware.h  | 2 +-
 drivers/pci/controller/dwc/pcie-keembay.c | 2 +-
 drivers/pci/controller/dwc/pcie-qcom-ep.c | 2 +-
 drivers/pci/controller/dwc/pcie-rcar-gen4.c   | 2 +-
 drivers/pci/controller/dwc/pcie-uniphier-ep.c | 2 +-
 12 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c 
b/drivers/pci/controller/dwc/pci-dra7xx.c
index b445ffe95e3f..f9182cd6fe67 100644
--- a/drivers/pci/controller/dwc/pci-dra7xx.c
+++ b/drivers/pci/controller/dwc/pci-dra7xx.c
@@ -436,7 +436,7 @@ dra7xx_pcie_get_features(struct dw_pcie_ep *ep)
 }
 
 static const struct dw_pcie_ep_ops pcie_ep_ops = {
-   .ep_init = dra7xx_pcie_ep_init,
+   .init = dra7xx_pcie_ep_init,
.raise_irq = dra7xx_pcie_raise_irq,
.get_features = dra7xx_pcie_get_features,
 };
diff --git a/drivers/pci/controller/dwc/pci-imx6.c 
b/drivers/pci/controller/dwc/pci-imx6.c
index 74703362aeec..737d4d90fef2 100644
--- a/drivers/pci/controller/dwc/pci-imx6.c
+++ b/drivers/pci/controller/dwc/pci-imx6.c
@@ -1093,7 +1093,7 @@ imx6_pcie_ep_get_features(struct dw_pcie_ep *ep)
 }
 
 static const struct dw_pcie_ep_ops pcie_ep_ops = {
-   .ep_init = imx6_pcie_ep_init,
+   .init = imx6_pcie_ep_init,
.raise_irq = imx6_pcie_ep_raise_irq,
.get_features = imx6_pcie_ep_get_features,
 };
diff --git a/drivers/pci/controller/dwc/pci-keystone.c 
b/drivers/pci/controller/dwc/pci-keystone.c
index 0def919f89fa..655c7307eb88 100644
--- a/drivers/pci/controller/dwc/pci-keystone.c
+++ b/drivers/pci/controller/dwc/pci-keystone.c
@@ -944,7 +944,7 @@ ks_pcie_am654_get_features(struct dw_pcie_ep *ep)
 }
 
 static const struct dw_pcie_ep_ops ks_pcie_am654_ep_ops = {
-   .ep_init = ks_pcie_am654_ep_init,
+   .init = ks_pcie_am654_ep_init,
.raise_irq = ks_pcie_am654_raise_irq,
.get_features = _pcie_am654_get_features,
 };
diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c 
b/drivers/pci/controller/dwc/pci-layerscape-ep.c
index 3d3c50ef4b6f..4e4b687ef508 100644
--- a/drivers/pci/controller/dwc/pci-layerscape-ep.c
+++ b/drivers/pci/controller/dwc/pci-layerscape-ep.c
@@ -195,7 +195,7 @@ static unsigned int ls_pcie_ep_func_conf_select(struct 
dw_pcie_ep *ep,
 }
 
 static const struct dw_pcie_ep_ops ls_pcie_ep_ops = {
-   .ep_init = ls_pcie_ep_init,
+   .init = ls_pcie_ep_init,
.raise_irq = ls_pcie_ep_raise_irq,
.get_features = ls_pcie_ep_get_features,
.func_conf_select = ls_pcie_ep_func_conf_select,
diff --git a/drivers/pci/controller/dwc/pcie-artpec6.c 
b/drivers/pci/controller/dwc/pcie-artpec6.c
index 9b572a2b2c9a..27ff425c0698 100644
--- a/drivers/pci/controller/dwc/pcie-artpec6.c
+++ b/drivers/pci/controller/dwc/pcie-artpec6.c
@@ -370,7 +370,7 @@ static int artpec6_pcie_raise_irq(struct dw_pcie_ep *ep, u8 
func_no,
 }
 
 static const struct dw_pcie_ep_ops pcie_ep_ops = {
-   .ep_init = artpec6_pcie_ep_init,
+   .init = artpec6_pcie_ep_init,
.raise_irq = artpec6_pcie_raise_irq,
 };
 
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c 
b/drivers/pci/controller/dwc/pcie-designware-ep.c
index f6207989fc6a..ea99a97ce504 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -794,8 +794,8 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
list_add_tail(_func->list, >func_list);
}
 
-   if (ep->ops->ep_init)
-   ep->ops->ep_init(ep);
+   if (ep->ops->init)
+   ep->ops->init(ep);
 
ret = pci_epc_mem_init(epc, ep->phys_base, ep->addr_size,
   ep->page_size);
diff --git a/drivers/pci/controller/dwc/pcie-designware-plat.c 
b/drivers/pci/controller/dwc/pcie-designware-plat.c
index b625841e98aa..97088b7663e0 100644
--- a/drivers/pci/controller/dwc/pcie-designware-plat.c
+++ b/drivers/pci/controller/dwc/pcie-designware-plat.c
@@ -74,7 +74,7 @@ dw_plat_pcie_get_features(struct dw_pcie_ep *ep)
 }
 
 static const struct dw_pcie_ep_ops pcie_ep_ops = {
-   .ep_init = dw_plat_pcie_ep_init,
+   .init = dw_plat_pcie_ep_init,
.raise_irq = dw_plat_pcie_ep_raise_irq,
.get_features = dw_plat_pcie_get_features,
 };
diff --git a/drivers/pci/controller/dwc/pcie-designware.h 
b/drivers/pci/controller/dwc/pcie-designware.h
index 55ff76e3d384..cad0e4c24e11 100644
--- 

[PATCH 2/3] PCI: dwc: Rename to .get_dbi_offset in struct dw_pcie_ep_ops

2023-11-12 Thread Yoshihiro Shimoda
Since meaning of .func_conf_select is difficult to understand,
rename it to .get_dbi_offset.

Signed-off-by: Yoshihiro Shimoda 
---
 .../pci/controller/dwc/pci-layerscape-ep.c|   5 +-
 .../pci/controller/dwc/pcie-designware-ep.c   | 108 +-
 drivers/pci/controller/dwc/pcie-designware.h  |   2 +-
 drivers/pci/controller/dwc/pcie-rcar-gen4.c   |   4 +-
 4 files changed, 59 insertions(+), 60 deletions(-)

diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c 
b/drivers/pci/controller/dwc/pci-layerscape-ep.c
index 4e4b687ef508..961ff1b719a1 100644
--- a/drivers/pci/controller/dwc/pci-layerscape-ep.c
+++ b/drivers/pci/controller/dwc/pci-layerscape-ep.c
@@ -184,8 +184,7 @@ static int ls_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 
func_no,
}
 }
 
-static unsigned int ls_pcie_ep_func_conf_select(struct dw_pcie_ep *ep,
-   u8 func_no)
+static unsigned int ls_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep, u8 
func_no)
 {
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
struct ls_pcie_ep *pcie = to_ls_pcie_ep(pci);
@@ -198,7 +197,7 @@ static const struct dw_pcie_ep_ops ls_pcie_ep_ops = {
.init = ls_pcie_ep_init,
.raise_irq = ls_pcie_ep_raise_irq,
.get_features = ls_pcie_ep_get_features,
-   .func_conf_select = ls_pcie_ep_func_conf_select,
+   .get_dbi_offset = ls_pcie_ep_get_dbi_offset,
 };
 
 static const struct ls_pcie_ep_drvdata ls1_ep_drvdata = {
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c 
b/drivers/pci/controller/dwc/pcie-designware-ep.c
index ea99a97ce504..1100671db887 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -43,14 +43,14 @@ dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 
func_no)
return NULL;
 }
 
-static unsigned int dw_pcie_ep_func_select(struct dw_pcie_ep *ep, u8 func_no)
+static unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep, u8 
func_no)
 {
-   unsigned int func_offset = 0;
+   unsigned int dbi_offset = 0;
 
-   if (ep->ops->func_conf_select)
-   func_offset = ep->ops->func_conf_select(ep, func_no);
+   if (ep->ops->get_dbi_offset)
+   dbi_offset = ep->ops->get_dbi_offset(ep, func_no);
 
-   return func_offset;
+   return dbi_offset;
 }
 
 static unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep, u8 
func_no)
@@ -59,8 +59,8 @@ static unsigned int dw_pcie_ep_get_dbi2_offset(struct 
dw_pcie_ep *ep, u8 func_no
 
if (ep->ops->get_dbi2_offset)
dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no);
-   else if (ep->ops->func_conf_select) /* for backward compatibility */
-   dbi2_offset = ep->ops->func_conf_select(ep, func_no);
+   else if (ep->ops->get_dbi_offset) /* for backward compatibility */
+   dbi2_offset = ep->ops->get_dbi_offset(ep, func_no);
 
return dbi2_offset;
 }
@@ -68,14 +68,14 @@ static unsigned int dw_pcie_ep_get_dbi2_offset(struct 
dw_pcie_ep *ep, u8 func_no
 static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, u8 func_no,
   enum pci_barno bar, int flags)
 {
-   unsigned int func_offset, dbi2_offset;
+   unsigned int dbi_offset, dbi2_offset;
struct dw_pcie_ep *ep = >ep;
u32 reg, reg_dbi2;
 
-   func_offset = dw_pcie_ep_func_select(ep, func_no);
+   dbi_offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
dbi2_offset = dw_pcie_ep_get_dbi2_offset(ep, func_no);
 
-   reg = func_offset + PCI_BASE_ADDRESS_0 + (4 * bar);
+   reg = dbi_offset + PCI_BASE_ADDRESS_0 + (4 * bar);
reg_dbi2 = dbi2_offset + PCI_BASE_ADDRESS_0 + (4 * bar);
dw_pcie_dbi_ro_wr_en(pci);
dw_pcie_writel_dbi2(pci, reg_dbi2, 0x0);
@@ -102,16 +102,16 @@ static u8 __dw_pcie_ep_find_next_cap(struct dw_pcie_ep 
*ep, u8 func_no,
u8 cap_ptr, u8 cap)
 {
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
-   unsigned int func_offset = 0;
+   unsigned int dbi_offset = 0;
u8 cap_id, next_cap_ptr;
u16 reg;
 
if (!cap_ptr)
return 0;
 
-   func_offset = dw_pcie_ep_func_select(ep, func_no);
+   dbi_offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
 
-   reg = dw_pcie_readw_dbi(pci, func_offset + cap_ptr);
+   reg = dw_pcie_readw_dbi(pci, dbi_offset + cap_ptr);
cap_id = (reg & 0x00ff);
 
if (cap_id > PCI_CAP_ID_MAX)
@@ -127,13 +127,13 @@ static u8 __dw_pcie_ep_find_next_cap(struct dw_pcie_ep 
*ep, u8 func_no,
 static u8 dw_pcie_ep_find_capability(struct dw_pcie_ep *ep, u8 func_no, u8 cap)
 {
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
-   unsigned int func_offset = 0;
+   unsigned int dbi_offset = 0;
u8 next_cap_ptr;
u16 reg;
 
-   func_offset = dw_pcie_ep_func_select(ep, func_no);
+   dbi_offset = dw_pcie_ep_get_dbi_offset(ep, func_no);

[PATCH 0/3] PCI: dwc: Improve code readability

2023-11-12 Thread Yoshihiro Shimoda
This patch series is based on the latest pci.git / next branch.
The patch 1/3 is related to the "note" in the commit [1]
The patches [23]/3 are related to the "Note" which in the commit [2].

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9baa8a18e31b7167885c11c38841ce92bbe20f4f

[2]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7873b49b41b92edb3395bff9a528eaf89da5e41c

Yoshihiro Shimoda (3):
  PCI: dwc: Rename to .init in struct dw_pcie_ep_ops
  PCI: dwc: Rename to .get_dbi_offset in struct dw_pcie_ep_ops
  PCI: dwc: Add dw_pcie_ep_{read,write}_dbi[2] helpers

 drivers/pci/controller/dwc/pci-dra7xx.c   |   2 +-
 drivers/pci/controller/dwc/pci-imx6.c |   2 +-
 drivers/pci/controller/dwc/pci-keystone.c |   2 +-
 .../pci/controller/dwc/pci-layerscape-ep.c|   7 +-
 drivers/pci/controller/dwc/pcie-artpec6.c |   2 +-
 .../pci/controller/dwc/pcie-designware-ep.c   | 248 ++
 .../pci/controller/dwc/pcie-designware-plat.c |   2 +-
 drivers/pci/controller/dwc/pcie-designware.h  |   4 +-
 drivers/pci/controller/dwc/pcie-keembay.c |   2 +-
 drivers/pci/controller/dwc/pcie-qcom-ep.c |   2 +-
 drivers/pci/controller/dwc/pcie-rcar-gen4.c   |   6 +-
 drivers/pci/controller/dwc/pcie-uniphier-ep.c |   2 +-
 12 files changed, 154 insertions(+), 127 deletions(-)

-- 
2.34.1



[PATCH] misc: ocxl: afu_irq: Remove unnecessary (void*) conversions

2023-11-12 Thread Li zeming
The irq pointer does not need to cast the type.

Signed-off-by: Li zeming 
---
 drivers/misc/ocxl/afu_irq.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/ocxl/afu_irq.c b/drivers/misc/ocxl/afu_irq.c
index a06920b7e049a..36f7379b8e2de 100644
--- a/drivers/misc/ocxl/afu_irq.c
+++ b/drivers/misc/ocxl/afu_irq.c
@@ -57,7 +57,7 @@ EXPORT_SYMBOL_GPL(ocxl_irq_set_handler);
 
 static irqreturn_t afu_irq_handler(int virq, void *data)
 {
-   struct afu_irq *irq = (struct afu_irq *) data;
+   struct afu_irq *irq = data;
 
trace_ocxl_afu_irq_receive(virq);
 
-- 
2.18.2



[PATCH] misc: ocxl: context: Remove unnecessary (void*) conversions

2023-11-12 Thread Li zeming
The ctx pointer does not need to cast the type.

Signed-off-by: Li zeming 
---
 drivers/misc/ocxl/context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/ocxl/context.c b/drivers/misc/ocxl/context.c
index 7f83116ae11a6..cded7d1caf328 100644
--- a/drivers/misc/ocxl/context.c
+++ b/drivers/misc/ocxl/context.c
@@ -55,7 +55,7 @@ EXPORT_SYMBOL_GPL(ocxl_context_alloc);
  */
 static void xsl_fault_error(void *data, u64 addr, u64 dsisr)
 {
-   struct ocxl_context *ctx = (struct ocxl_context *) data;
+   struct ocxl_context *ctx = data;
 
mutex_lock(>xsl_error_lock);
ctx->xsl_error.addr = addr;
-- 
2.18.2



Re: [GIT PULL] Please pull powerpc/linux.git powerpc-6.7-2 tag

2023-11-12 Thread pr-tracker-bot
The pull request you sent on Sun, 12 Nov 2023 12:25:12 +1100:

> https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git 
> tags/powerpc-6.7-2

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/5dd2020f335a7a60c154375a168791a2b87f35b5

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html


[powerpc:merge] BUILD REGRESSION 275f51172646ac48f0c4e690c72183084fd996d1

2023-11-12 Thread kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git 
merge
branch HEAD: 275f51172646ac48f0c4e690c72183084fd996d1  Automatic merge of 
'master' into merge (2023-11-12 11:39)

Error/Warning ids grouped by kconfigs:

gcc_recent_errors
|-- sh-allmodconfig
|   |-- 
sh4-linux-gcc:internal-compiler-error:Segmentation-fault-signal-terminated-program-cc1
|   |-- standard-input:Error:expected-symbol-name
|   `-- standard-input:Error:pcrel-too-far
`-- sh-allyesconfig
|-- 
sh4-linux-gcc:internal-compiler-error:Segmentation-fault-signal-terminated-program-cc1
|-- standard-input:Error:expected-symbol-name
`-- standard-input:Error:pcrel-too-far

elapsed time: 735m

configs tested: 81
configs skipped: 2

tested configs:
alpha allnoconfig   gcc  
alphaallyesconfig   gcc  
alpha   defconfig   gcc  
arc  allmodconfig   gcc  
arc   allnoconfig   gcc  
arc  allyesconfig   gcc  
arc defconfig   gcc  
arm  allmodconfig   gcc  
arm   allnoconfig   gcc  
arm  allyesconfig   gcc  
arm defconfig   gcc  
csky allmodconfig   gcc  
csky  allnoconfig   gcc  
csky allyesconfig   gcc  
cskydefconfig   gcc  
i386 allmodconfig   gcc  
i386  allnoconfig   gcc  
i386 allyesconfig   gcc  
i386defconfig   gcc  
loongarchallmodconfig   gcc  
loongarch allnoconfig   gcc  
loongarchallyesconfig   gcc  
loongarch   defconfig   gcc  
m68k allmodconfig   gcc  
m68k  allnoconfig   gcc  
m68k allyesconfig   gcc  
m68kdefconfig   gcc  
microblaze   allmodconfig   gcc  
microblazeallnoconfig   gcc  
microblaze   allyesconfig   gcc  
microblaze  defconfig   gcc  
mips allmodconfig   gcc  
mips  allnoconfig   gcc  
mips allyesconfig   gcc  
nios2allmodconfig   gcc  
nios2 allnoconfig   gcc  
nios2allyesconfig   gcc  
nios2   defconfig   gcc  
openrisc allmodconfig   gcc  
openrisc  allnoconfig   gcc  
openrisc allyesconfig   gcc  
openriscdefconfig   gcc  
parisc   allmodconfig   gcc  
pariscallnoconfig   gcc  
parisc   allyesconfig   gcc  
parisc  defconfig   gcc  
parisc64defconfig   gcc  
powerpc  allmodconfig   gcc  
powerpc   allnoconfig   gcc  
powerpc  allyesconfig   gcc  
riscvallmodconfig   gcc  
riscv allnoconfig   gcc  
riscvallyesconfig   gcc  
riscv   defconfig   gcc  
riscv  rv32_defconfig   gcc  
s390 allmodconfig   gcc  
s390  allnoconfig   gcc  
s390 allyesconfig   gcc  
s390defconfig   gcc  
sh   allmodconfig   gcc  
shallnoconfig   gcc  
sh   allyesconfig   gcc  
sh  defconfig   gcc  
sparcallmodconfig   gcc  
sparc allnoconfig   gcc  
sparcallyesconfig   gcc  
sparc   defconfig   gcc  
sparc64  allmodconfig   gcc  
sparc64  allyesconfig   gcc  
sparc64 defconfig   gcc  
um   allmodconfig   clang
umallnoconfig   clang
um   allyesconfig   clang
um  defconfig   gcc  
um i386_defconfig   gcc  
um   x86_64_defconfig   gcc  
x86_64allnoconfig   gcc  
x86_64   allyesconfig   gcc  
x86_64

Re: Fbdev issue after the drm updates 'drm-next-2023-10-31-1'

2023-11-12 Thread Christian Zigotzky

+ Helge Deller 
+ Gerd Knorr 
+ Geert Uytterhoeven 


On 07 November 2023 at 09:36 am, Christian Zigotzky wrote:

Hello,

I have found out that fbdev no longer works with virtio-gpu-pci and 
virtio-vga. It is not a problem with the penguin logos.


Could you please check fbdev in QEMU virtual machines with 
virtio-gpu-pci and virtio-vga graphics?


Many thanks in advance,

Christian


On 02 November 2023 at 03:45 pm, Christian Zigotzky wrote:

Hello,

There is a fbdev issue with the virtio-gpu-pci and virtio-vga. (The 
penguins are not displayed at boot time)


Error message:  [    0.889302] virtio-pci :00:02.0: [drm] *ERROR* 
fbdev: Failed to setup generic emulation (ret=-2)


The kernel 6.6 final doesn't have this issue.

Please check the fbdev changes in the drm updates 
'drm-next-2023-10-31-1'.


Thanks,
Christian