x86,swiotlb: Adjust SWIOTLB bounce buffer size for SEV guests

[e998879d4fb7991856916972168cf27c0d86ed12 upstream]

For SEV, all DMA to and from guest has to use shared (un-encrypted) pages.
SEV uses SWIOTLB to make this happen without requiring changes to device
drivers.  However, depending on the workload being run, the default 64MB
of it might not be enough and it may run out of buffers to use for DMA,
resulting in I/O errors and/or performance degradation for high
I/O workloads.

Adjust the default size of SWIOTLB for SEV guests using a
percentage of the total memory available to guest for the SWIOTLB buffers.

Adds a new sev_setup_arch() function which is invoked from setup_arch()
and it calls into a new swiotlb generic code function swiotlb_adjust_size()
to do the SWIOTLB buffer adjustment.

v5 fixed build errors and warnings as
Reported-by: kbuild test robot <lkp@intel.com>

Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
Co-developed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
(cherry picked from commit e998879d4fb7991856916972168cf27c0d86ed12)
Signed-off-by: Robert Kolchmeyer <rkolchmeyer@google.com>

Conflicts:
  arch/x86/mm/mem_encrypt.c

BUG=b/210929026
TEST=presubmit
SOURCE=UPSTREAM(e998879d4fb7991856916972168cf27c0d86ed12)
RELEASE_NOTE=Fixed an issue in the Linux kernel where I/Os would
sometimes fail on SEV-enabled machines due to a full swiotlb buffer.

Change-Id: Idbf9dcee97ccd5deebad3a97cf06aa0618de1601
Reviewed-on: https://cos-review.googlesource.com/c/third_party/kernel/+/29440
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
Reviewed-by: Oleksandr Tymoshenko <ovt@google.com>
5 files changed