SMU13 overrides dynamic PCIe lane width and dynamic speed by when on
certain hosts. commit 87c617c72628 ("drm/amd/pm: conditionally disable
pcie lane switching for some sienna_cichlid SKUs") worked around this
issue by setting up certain SKUs to set up certain limits, but the same
fundamental probl
SMU7 does a check if the dGPU is inserted into a Rocket Lake system,
to turn off DPM. Extend this check to all systems that have problems
with dynamic switching by using the
amdgpu_device_pcie_dynamic_switching_supported() helper.
Signed-off-by: Mario Limonciello
---
.../gpu/drm/amd/pm/powerpla
NV and VI currently set up a quirk to not enable ASPM on Alder Lake
systems, but the issue appears to be tied to hosts without support
for dynamic speed switching. Migrate both of these over to use
amdgpu_device_pcie_dynamic_switching_supported() instead and drop
amdgpu_device_aspm_support_quirk().
amdgpu_device_pcie_dynamic_switching_supported() currently only covers
SMU13. It sets up the pcietables so that effectively DPM can't change
speed or lane width dynamically on problematic hosts.
Earlier quirks to SMU11 did a similar solution by looking at specific
PCI IDs typically paired with pro
This helper is used for checking if the connected host supports
the feature, it can be moved into generic code to be used by other
smu implementations as well.
Signed-off-by: Mario Limonciello
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Delay release TTM BOs when the kernel default setting is init_on_free.
This offloads the overhead of clearing the system memory to the work
item and potentially a different CPU. This could be very beneficial when
the application does a lot of malloc/free style allocations of system
memory.
Reviewe
Yeah that's an unfortunate mismatch.
Leave it then. We can always clean it up later if theres a strong preference
to do so.
Jon
From: Huang, JinHuiEric
Sent: Friday, July 7, 2023 8:25 PM
To: Kim, Jonathan ; amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/
Thanks for your review. The prefix name change will be contradictory
that new functions prefix name is different with existing functions
prefix name. Are you sure it doesn't matter?
Regards,
Eric
On 2023-07-07 19:52, Kim, Jonathan wrote:
I would change the static prefix names from kgd_gfx_ to
I would change the static prefix names from kgd_gfx_ to kgd_gc_ to match file
name and specify it as the target GC version.
With that fixed and assuming grace period instance fix ups will follow after,
this patch and series is:
Reviewed-by: Jonathan Kim
From:
From: Pekka Paalanen
Specify how the atomic state is maintained between userspace and
kernel, plus the special case for async flips.
Signed-off-by: Pekka Paalanen
Signed-off-by: André Almeida
---
v4: total rework by Pekka
---
Documentation/gpu/drm-uapi.rst | 41 +++
Given that prop changes may lead to modesetting, which would defeat the
fast path of the async flip, refuse any atomic prop change for async
flips in atomic API. The only exceptions are the framebuffer ID to flip
to and the mode ID, that could be referring to an identical mode.
Signed-off-by: Andr
From: Simon Ser
amdgpu_dm_commit_planes() already sets the flip_immediate flag for
async page-flips. This flag is used to set the UNP_FLIP_CONTROL
register. Thus, no additional change is required to handle async
page-flips with the atomic uAPI.
Signed-off-by: Simon Ser
Reviewed-by: André Almeid
From: Simon Ser
This new field indicates whether the driver has the necessary logic
to support async page-flips via the atomic uAPI. This is leveraged by
the next commit to allow user-space to use this functionality.
All atomic drivers setting drm_mode_config.async_page_flip are updated
to also
From: Simon Ser
This new kernel capability indicates whether async page-flips are
supported via the atomic uAPI. DRM clients can use it to check
for support before feeding DRM_MODE_PAGE_FLIP_ASYNC to the kernel.
Make it clear that DRM_CAP_ASYNC_PAGE_FLIP is for legacy uAPI only.
Signed-off-by:
From: Simon Ser
If the driver supports it, allow user-space to supply the
DRM_MODE_PAGE_FLIP_ASYNC flag to request an async page-flip.
Set drm_crtc_state.async_flip accordingly.
Document that drivers will reject atomic commits if an async
flip isn't possible. This allows user-space to fall back
Hi,
This work from me and Simon adds support for DRM_MODE_PAGE_FLIP_ASYNC through
the atomic API. This feature is already available via the legacy API. The use
case is to be able to present a new frame immediately (or as soon as
possible), even if after missing a vblank. This might result in teari
On Fri, Jul 7, 2023 at 6:01 AM Chen, Guchun wrote:
>
> [Public]
>
> Hi Mike,
>
> Yes, we are aware of this problem, and we are working on that. The problem is
> caused by recent code stores xcp_id to amdgpu bo for accounting memory usage
> and so on. However, not all VMs are attached to that lik
On Fri, Jul 7, 2023 at 3:32 PM Mario Limonciello
wrote:
>
> When ASPM is enabled, DPM is used to perform dynamic switching. When
> connected to an Intel PCIe controller this causes malfunctions.
>
> Identify this combination and disable dynamic switching in SMU13.
>
> This series superceeds my ot
Hi Christian,
On Fri, Jul 7, 2023 at 2:06 PM Christian König
wrote:
> Am 06.07.23 um 10:36 schrieb Geert Uytterhoeven:
> > On 32-bit:
> >
> > ../tests/amdgpu/amdgpu_stress.c: In function ‘alloc_bo’:
> > ../tests/amdgpu/amdgpu_stress.c:178:49: warning: format ‘%lx’ expects
> > argument
From: Evan Quan
So that SMU13.0.0 and SMU13.0.7 do not need to have one copy each.
Signed-off-by: Evan Quan
Signed-off-by: Mario Limonciello
---
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 4 +++
.../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c| 31 +
.../drm/amd/pm/swsmu/s
Intel platforms such as Sapphire Rapids and Raptor Lake don't support
dynamic pcie lane or speed switching.
This limitation seems to carry over from one generation to another.
To be safer, disable dynamic pcie lane width and speed switching when
running on an Intel platform.
Link:
https://edc.in
When ASPM is enabled, DPM is used to perform dynamic switching. When
connected to an Intel PCIe controller this causes malfunctions.
Identify this combination and disable dynamic switching in SMU13.
This series superceeds my other series [1] and fixes it in a cleaner way.
[1] https://patchwork.
[Public]
> -Original Message-
> From: Kim, Jonathan
> Sent: Friday, July 7, 2023 1:06 PM
> To: Huang, JinHuiEric ; amd-
> g...@lists.freedesktop.org
> Cc: Joshi, Mukul
> Subject: RE: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
>
>
>
> > -Original Message-
> > From
Applied. thanks!
On Fri, Jul 7, 2023 at 7:47 AM Christian König wrote:
>
> Am 07.07.23 um 13:11 schrieb Arnd Bergmann:
> > From: Arnd Bergmann
> >
> > On 32-bit architectures comparing a resource against a value larger than
> > U32_MAX can cause a warning:
> >
> > drivers/gpu/drm/amd/amdgpu/amd
From: Jonathan Kim
Set watch points for all xcc instances on GFX943.
Signed-off-by: Jonathan Kim
Reviewed-by: Felix Kuehling
Signed-off-by: Eric Huang
Reviewed-by: Jonathan Kim
---
drivers/gpu/drm/amd/amdkfd/kfd_debug.c | 8 +---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --g
From: Jonathan Kim
Similar to GC v9.4.2, GC v9.4.3 should use the 5-Dword extended
MAP_PROCESS packet to support multi-process debugging. Update the
mutli-process debug support list so that the KFD updates the runlist
on debug mode setting and that it allocates enough GTT memory during
KFD devic
From: Jonathan Kim
Implement the similarities as GC v9.4.2, and the difference
for GC v9.4.3 HW spec, i.e. xcc instance.
Signed-off-by: Jonathan Kim
Signed-off-by: Eric Huang
---
.../drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c | 8 +-
.../drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.h | 27 +++
.
From: Jonathan Kim
The additional information that the KFD reports to the debugger was
destroyed when the following commit was merged:
"drm/amdkfd: convert switches to IP version checking"
Signed-off-by: Jonathan Kim
Reviewed-by: Harish Kasiviswanathan
Signed-off-by: Jonathan Kim
Acked-by: Am
Jonathan Kim (4):
drm/amdkfd: add kfd2kgd debugger callbacks for GC v9.4.3
drm/amdkfd: restore debugger additional info for gfx v9_4_3
drm/amdkfd: enable watch points globally for gfx943
drm/amdkfd: add multi-process debugging support for GC v9.4.3
.../drm/amd/amdgpu/amdgpu_amdkfd_aldebar
On 2023-07-07 13:15, Felix Kuehling
wrote:
On
2023-07-07 11:49, Philip Yang wrote:
Retry faults are delegated to soft IH ring
and then processed by
deferred worker. Current soft IH ring size PAGE_SIZE can store
128
On 2023-07-07 11:49, Philip Yang wrote:
Retry faults are delegated to soft IH ring and then processed by
deferred worker. Current soft IH ring size PAGE_SIZE can store 128
entries, which may overflow and drop retry faults, causes HW stucks
because the retry fault is not recovered.
Increase soft
[Public]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Friday, July 7, 2023 12:44 PM
> To: Kim, Jonathan ; amd-gfx@lists.freedesktop.org
> Cc: Joshi, Mukul
> Subject: Re: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
>
>
> On 2023-07-07 11:56, Kim, Jonathan wrote:
On 2023-07-07 11:56, Kim, Jonathan wrote:
[Public]
-Original Message-
From: Huang, JinHuiEric
Sent: Friday, July 7, 2023 11:46 AM
To: Kim, Jonathan ; amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
On 2023-07-07 10:59, Kim, Jo
[Public]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Friday, July 7, 2023 11:46 AM
> To: Kim, Jonathan ; amd-gfx@lists.freedesktop.org
> Subject: Re: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
>
>
> On 2023-07-07 10:59, Kim, Jonathan wrote:
> > [Public]
> >
>
Retry faults are delegated to soft IH ring and then processed by
deferred worker. Current soft IH ring size PAGE_SIZE can store 128
entries, which may overflow and drop retry faults, causes HW stucks
because the retry fault is not recovered.
Increase soft IH ring size to 8KB, enough to store 256 C
On 2023-07-07 10:59, Kim, Jonathan wrote:
[Public]
-Original Message-
From: Huang, JinHuiEric
Sent: Thursday, July 6, 2023 2:19 PM
To: amd-gfx@lists.freedesktop.org
Cc: Kim, Jonathan ; Huang, JinHuiEric
Subject: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
each xcc
add session context buffer to decoder ring test.
v5 - clear the session ct buffer (Christian)
v4 - data type, explain change of ib size change (Christian)
v3 - indent and v2 changes correction. (Christian)
v2 - put the buffer at the end of the IB (Christian)
Signed-off-by: Saleemkhan Jamadar
Ac
Am 2023-07-07 um 10:14 schrieb Philip Yang:
Retry faults are delegated to IH soft ring and then processed by
deferred worker. Current IH soft ring size PAGE_SIZE can store 128
entries, which may overflow and drop retry faults, causes HW stucks
because the retry fault is not recovered.
Increase
[Public]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Thursday, July 6, 2023 2:19 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Kim, Jonathan ; Kim, Jonathan
> ; Kuehling, Felix ;
> Huang, JinHuiEric
> Subject: [PATCH 6/6] drm/amdkfd: add multi-process debugging support for
> GC
[Public]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Thursday, July 6, 2023 2:19 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Kim, Jonathan ; Kim, Jonathan
> ; Kuehling, Felix ;
> Huang, JinHuiEric
> Subject: [PATCH 3/6] drm/amdkfd: enable watch points globally for gfx943
>
>
Hi Christian,
response inline [Saleem].
Regards,
Saleem
On 07/07/23 12:35, Christian König wrote:
Am 06.07.23 um 16:47 schrieb Saleemkhan Jamadar:
add session context buffer to decoder ring test.
v4 - data type, explain change of ib size change (Christian)
v3 - indent and v2 changes co
[Public]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Thursday, July 6, 2023 2:19 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Kim, Jonathan ; Huang, JinHuiEric
>
> Subject: [PATCH 4/6] drm/amdkfd: enable grace period for xcc instance
>
> each xcc instance needs to get iq wait
[AMD Official Use Only - General]
> -Original Message-
> From: Yang, Philip
> Sent: Friday, July 7, 2023 10:15 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Kuehling, Felix ; Joshi, Mukul
> ; Yang, Philip
> Subject: [PATCH] drm/amdgpu: Increase IH soft ring size
>
> Retry faults are deleg
[Public]
If we implement this in the GC 9.4.3 KGD disable call in patch 1 (see comments
for that one), then it will look less awkward and we can drop this.
Thanks,
Jon
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Thursday, July 6, 2023 2:19 PM
> To: amd-gfx@lists.freedesktop
[AMD Official Use Only - General]
> -Original Message-
> From: Huang, JinHuiEric
> Sent: Thursday, July 6, 2023 2:19 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Kim, Jonathan ; Kim, Jonathan
> ; Huang, JinHuiEric
> Subject: [PATCH 1/6] drm/amdkfd: add kfd2kgd debugger callbacks for GC
>
Retry faults are delegated to IH soft ring and then processed by
deferred worker. Current IH soft ring size PAGE_SIZE can store 128
entries, which may overflow and drop retry faults, causes HW stucks
because the retry fault is not recovered.
Increase IH soft ring size to the same size as IH ring,
Why:
If the reg mmMP1_SMN_C2PMSG_90 is being programed to 0x0 before
guest initialization, then modprobe amdgpu will fail at smu hw_init.
(the default mmMP1_SMN_C2PMSG_90 at a clean guest environment is 0x1).
How to fix:
this patch is to check whether smu is idle by sending a test
message to smu.
On 07/07/2023 14:28, Christian König wrote:
Am 07.07.23 um 12:02 schrieb Shashank Sharma:
On 07/07/2023 10:37, Christian König wrote:
Am 07.07.23 um 09:46 schrieb Shashank Sharma:
On 07/07/2023 09:24, Christian König wrote:
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue
Am 07.07.23 um 12:02 schrieb Shashank Sharma:
On 07/07/2023 10:37, Christian König wrote:
Am 07.07.23 um 09:46 schrieb Shashank Sharma:
On 07/07/2023 09:24, Christian König wrote:
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue descriptor (MQD) of a userqueue defines it in
Am 06.07.23 um 10:36 schrieb Geert Uytterhoeven:
On 32-bit:
../tests/amdgpu/amdgpu_stress.c: In function ‘alloc_bo’:
../tests/amdgpu/amdgpu_stress.c:178:49: warning: format ‘%lx’ expects
argument of type ‘long unsigned int’, but argument 4 has type ‘uint64_t’ {aka
‘long long unsig
On 7/7/2023 5:19 PM, Lang Yu wrote:
On 07/07/ , Lazar, Lijo wrote:
On 7/7/2023 5:01 PM, Lang Yu wrote:
It uses the same UCODE ID(VCN0_RAM) but differnet cmd buffers
for all instances.
Fixes: e928b52c58dd ("drm/amdgpu: use psp_execute_load_ip_fw_cmd_buf instead")
Signed-off-by: Lang Yu
-
On 07/07/ , Lazar, Lijo wrote:
>
>
> On 7/7/2023 5:01 PM, Lang Yu wrote:
> > It uses the same UCODE ID(VCN0_RAM) but differnet cmd buffers
> > for all instances.
> >
> > Fixes: e928b52c58dd ("drm/amdgpu: use psp_execute_load_ip_fw_cmd_buf
> > instead")
> >
> > Signed-off-by: Lang Yu
> > ---
>
Am 07.07.23 um 13:11 schrieb Arnd Bergmann:
From: Arnd Bergmann
On 32-bit architectures comparing a resource against a value larger than
U32_MAX can cause a warning:
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:1344:18: error: result of comparison
of constant 4294967296 with expression of type
On 7/7/2023 5:01 PM, Lang Yu wrote:
It uses the same UCODE ID(VCN0_RAM) but differnet cmd buffers
for all instances.
Fixes: e928b52c58dd ("drm/amdgpu: use psp_execute_load_ip_fw_cmd_buf instead")
Signed-off-by: Lang Yu
---
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 2 +-
1 file changed, 1
It uses the same UCODE ID(VCN0_RAM) but differnet cmd buffers
for all instances.
Fixes: e928b52c58dd ("drm/amdgpu: use psp_execute_load_ip_fw_cmd_buf instead")
Signed-off-by: Lang Yu
---
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/
On 07/07/ , Lazar, Lijo wrote:
>
>
> On 6/29/2023 1:44 PM, Lang Yu wrote:
> > Ping.
> >
> > On 06/27/ , Lang Yu wrote:
> > > Replace the old ones with psp_execute_load_ip_fw_cmd_buf.
> > >
> > > Signed-off-by: Lang Yu
> > > ---
> > > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 31 -
From: Arnd Bergmann
On 32-bit architectures comparing a resource against a value larger than
U32_MAX can cause a warning:
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:1344:18: error: result of comparison
of constant 4294967296 with expression of type 'resource_size_t' (aka 'unsigned
int') is alw
On 7/7/2023 3:47 PM, Danijel Slivka wrote:
Why:
If the reg mmMP1_SMN_C2PMSG_90 is being programed to 0x0 before
guest initialization, then modprobe amdgpu will fail at smu hw_init.
(the default mmMP1_SMN_C2PMSG_90 at a clean guest environment is 0x1).
A response to the FW message doesn't mea
On 6/29/2023 1:44 PM, Lang Yu wrote:
Ping.
On 06/27/ , Lang Yu wrote:
Replace the old ones with psp_execute_load_ip_fw_cmd_buf.
Signed-off-by: Lang Yu
---
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 31 -
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 2 --
drivers/gp
Why:
If the reg mmMP1_SMN_C2PMSG_90 is being programed to 0x0 before
guest initialization, then modprobe amdgpu will fail at smu hw_init.
(the default mmMP1_SMN_C2PMSG_90 at a clean guest environment is 0x1).
How to fix:
this patch is to check whether smu is idle by sending a test
message to smu.
On 07/07/2023 10:37, Christian König wrote:
Am 07.07.23 um 09:46 schrieb Shashank Sharma:
On 07/07/2023 09:24, Christian König wrote:
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue descriptor (MQD) of a userqueue defines it in
the hw's context. As MQD format can vary between
On 07/07/2023 09:57, Christian König wrote:
Am 07.07.23 um 09:39 schrieb Shashank Sharma:
On 07/07/2023 09:15, Christian König wrote:
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
The userspace sends us the doorbell object and the relative doobell
index in the object to be used for the user
Am 07.07.23 um 09:46 schrieb Shashank Sharma:
On 07/07/2023 09:24, Christian König wrote:
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue descriptor (MQD) of a userqueue defines it in
the hw's context. As MQD format can vary between different
graphics IPs, we need gfx GEN specif
Am 06.07.23 um 20:55 schrieb Alex Deucher:
rlc_init() is part of sw_init() so it should not touch hardware.
Additionally, calling the rlc update_spm_vmid() callback
directly invokes a gfx on/off cycle which could result in
powergating being enabled before hw init is complete. Split
update_spm_vm
Am 07.07.23 um 09:28 schrieb Friedrich Vock:
Hi Christian,
On 07.07.23 08:56, Christian König wrote:
Am 07.07.23 um 08:28 schrieb Friedrich Vock:
During gfxoff, the per-VMID GDS registers are reset and not restored
afterwards.
Hui? Since when? Those registers should be part of the saved on
Am 07.07.23 um 09:39 schrieb Shashank Sharma:
On 07/07/2023 09:15, Christian König wrote:
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
The userspace sends us the doorbell object and the relative doobell
index in the object to be used for the usermode queue, but the FW
expects the absolute doo
On 07/07/2023 09:24, Christian König wrote:
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue descriptor (MQD) of a userqueue defines it in
the hw's context. As MQD format can vary between different
graphics IPs, we need gfx GEN specific handlers to create MQDs.
This patch:
- Int
On 07/07/2023 09:17, Christian König wrote:
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
This patch adds code to cleanup any leftover userqueues which
a user might have missed to destroy due to a crash or any other
programming error.
Cc: Alex Deucher
Cc: Christian Koenig
Suggested-by: Ba
On 07/07/2023 09:15, Christian König wrote:
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
The userspace sends us the doorbell object and the relative doobell
index in the object to be used for the usermode queue, but the FW
expects the absolute doorbell index on the PCI BAR in the MQD. This
pa
Hi Christian,
On 07.07.23 08:56, Christian König wrote:
Am 07.07.23 um 08:28 schrieb Friedrich Vock:
During gfxoff, the per-VMID GDS registers are reset and not restored
afterwards.
Hui? Since when? Those registers should be part of the saved ones.
Have you found that by observation?
yes
Am 06.07.23 um 14:35 schrieb Shashank Sharma:
A Memory queue descriptor (MQD) of a userqueue defines it in
the hw's context. As MQD format can vary between different
graphics IPs, we need gfx GEN specific handlers to create MQDs.
This patch:
- Introduces MQD handler functions for the usermode
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
This patch adds code to cleanup any leftover userqueues which
a user might have missed to destroy due to a crash or any other
programming error.
Cc: Alex Deucher
Cc: Christian Koenig
Suggested-by: Bas Nieuwenhuizen
Signed-off-by: Bas Nieuwenhui
Am 06.07.23 um 14:36 schrieb Shashank Sharma:
The userspace sends us the doorbell object and the relative doobell
index in the object to be used for the usermode queue, but the FW
expects the absolute doorbell index on the PCI BAR in the MQD. This
patch adds a function to convert this relative do
Am 06.07.23 um 16:47 schrieb Saleemkhan Jamadar:
add session context buffer to decoder ring test.
v4 - data type, explain change of ib size change (Christian)
v3 - indent and v2 changes correction. (Christian)
v2 - put the buffer at the end of the IB (Christian)
Signed-off-by: Saleemkhan Ja
74 matches
Mail list logo