aboutsummaryrefslogtreecommitdiff
path: root/drivers/char/tpm/tpm.h
diff options
context:
space:
mode:
authorGravatar James Bottomley <James.Bottomley@HansenPartnership.com> 2019-10-11 09:02:59 -0700
committerGravatar Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> 2019-11-12 21:45:37 +0200
commit44abdb377b7c399dfec48de7252c564bdde8d26e (patch)
tree11b24209034b5dc69aeeab8227a4c63bb5f5f504 /drivers/char/tpm/tpm.h
parenttpm: add check after commands attribs tab allocation (diff)
downloadlinux-44abdb377b7c399dfec48de7252c564bdde8d26e.tar.gz
linux-44abdb377b7c399dfec48de7252c564bdde8d26e.tar.bz2
linux-44abdb377b7c399dfec48de7252c564bdde8d26e.zip
tpm: use GFP_KERNEL instead of GFP_HIGHMEM for tpm_buf
The current code uses GFP_HIGHMEM, which is wrong because GFP_HIGHMEM (on 32 bit systems) is memory ordinarily inaccessible to the kernel and should only be used for allocations affecting userspace. In order to make highmem visible to the kernel on 32 bit it has to be kmapped, which consumes valuable entries in the kmap region. Since the tpm_buf is only ever used in the kernel, switch to using a GFP_KERNEL allocation so as not to waste kmap space on 32 bits. Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Diffstat (limited to 'drivers/char/tpm/tpm.h')
-rw-r--r--drivers/char/tpm/tpm.h9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 80bca88b1f91..0d1fd37d6218 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -282,7 +282,6 @@ enum tpm_buf_flags {
};
struct tpm_buf {
- struct page *data_page;
unsigned int flags;
u8 *data;
};
@@ -298,20 +297,18 @@ static inline void tpm_buf_reset(struct tpm_buf *buf, u16 tag, u32 ordinal)
static inline int tpm_buf_init(struct tpm_buf *buf, u16 tag, u32 ordinal)
{
- buf->data_page = alloc_page(GFP_HIGHUSER);
- if (!buf->data_page)
+ buf->data = (u8 *)__get_free_page(GFP_KERNEL);
+ if (!buf->data)
return -ENOMEM;
buf->flags = 0;
- buf->data = kmap(buf->data_page);
tpm_buf_reset(buf, tag, ordinal);
return 0;
}
static inline void tpm_buf_destroy(struct tpm_buf *buf)
{
- kunmap(buf->data_page);
- __free_page(buf->data_page);
+ free_page((unsigned long)buf->data);
}
static inline u32 tpm_buf_length(struct tpm_buf *buf)