* [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups
@ 2018-07-20 3:49 Todd Poynor
2018-07-20 3:49 ` [PATCH 01/20] staging: gasket: allow compile for ARM64 in Kconfig Todd Poynor
` (20 more replies)
0 siblings, 21 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Various fixes mainly from the chromium review of the gasket and apex
drivers. More to come.
Todd Poynor (20):
staging: gasket: allow compile for ARM64 in Kconfig
staging: gasket: gasket_enable_dev remove unnecessary variable
staging: gasket: remove code for no physical device
staging: gasket: fix class create bug handling
staging: gasket: remove unnecessary code in coherent allocator
staging: gasket: don't treat no device reset callback as an error
staging: gasket: gasket_mmap return error instead of valid BAR index
staging: gasket: apex_clock_gating simplify logic, reduce indentation
staging: gasket: gasket page table functions use bool return type
staging: gasket: remove else clause after return in if clause
staging: gasket: fix comment syntax in apex.h
staging: gasket: remove unnecessary parens in page table code
staging: gasket: gasket_mmap use PAGE_MASK
staging: gasket: remove extra parens in gasket_write_mappable_regions
staging: gasket: fix multi-line comment syntax in gasket_core.h
staging: gasket: always allow root open for write
staging: gasket: top ioctl handler add __user annotations
staging: gasket: apex ioctl add __user annotations
staging: gasket: common ioctl dispatcher add __user annotations
staging: gasket: common ioctls add __user annotations
Patches changed from v3 in v4:
staging: gasket: remove X86 Kconfig restriction
Rename: staging: gasket: allow compile for ARM64 in Kconfig
Restore existing "depends on" for X86_64, add ARM64. Only compile for
64-bit architectures known to work with this driver.
staging: gasket: always allow root open for write
Fold in patch to convert apex_ioctl_check_permissions to return bool
Convert gasket_ioctl_check_permissions to use bool types.
staging: gasket: apex_ioctl_check_permissions use bool return type
Folded into above patch.
staging: gasket: annotate ioctl arg with __user
Split up into new patches:
staging: gasket: top ioctl handler add __user annotations
staging: gasket: apex ioctl add __user annotations
staging: gasket: common ioctl dispatcher add __user annotations
staging: gasket: common ioctls add __user annotations
Convert various uses of void * to actual type.
Minor formatting and naming changes.
Drop Reviewed-By: Dmitry Torokhov due to changes since review.
Patches unchanged from v3 in v4:
staging: gasket: gasket_enable_dev remove unnecessary variable
staging: gasket: remove code for no physical device
staging: gasket: fix class create bug handling
staging: gasket: remove unnecessary code in coherent allocator
staging: gasket: don't treat no device reset callback as an error
staging: gasket: gasket_mmap return error instead of valid BAR index
staging: gasket: apex_clock_gating simplify logic, reduce indentation
staging: gasket: gasket page table functions use bool return type
staging: gasket: remove else clause after return in if clause
staging: gasket: fix comment syntax in apex.h
staging: gasket: remove unnecessary parens in page table code
staging: gasket: gasket_mmap use PAGE_MASK
staging: gasket: remove extra parens in gasket_write_mappable_regions
staging: gasket: fix multi-line comment syntax in gasket_core.h
Patches removed from v3 in v4 (already merged to staging-next):
staging: gasket: fix typo in apex_enter_reset
staging: gasket: fix typo in gasket_core.h comments
staging: gasket: whitespace fix in gasket_page_table_init
staging: gasket: remove driver registration on class creation failure
staging: gasket: hold mutex on gasket driver unregistration
staging: gasket: Return EBUSY on mapping create when already in use
staging: gasket: Remove stale pointers on error allocating attr array
staging: gasket: convert gasket_mmap_has_permissions to bool return
staging: gasket: fix gasket_wait_with_reschedule timeout return code
staging: gasket: gasket_wait_with_reschedule use msleep
staging: gasket: gasket_wait_with_reschedule simplify logic
staging: gasket: gasket_wait_with_reschedule use 32 bits of retry
staging: gasket: bail out of reset sequence on device callback error
staging: gasket: drop gasket_cdev_get_info, use container_of
drivers/staging/gasket/Kconfig | 2 +-
drivers/staging/gasket/apex.h | 7 +-
drivers/staging/gasket/apex_driver.c | 73 +++++------
drivers/staging/gasket/gasket_core.c | 44 +++----
drivers/staging/gasket/gasket_core.h | 10 +-
drivers/staging/gasket/gasket_ioctl.c | 144 +++++++++++----------
drivers/staging/gasket/gasket_ioctl.h | 4 +-
drivers/staging/gasket/gasket_page_table.c | 64 +++++----
drivers/staging/gasket/gasket_page_table.h | 8 +-
9 files changed, 174 insertions(+), 182 deletions(-)
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 01/20] staging: gasket: allow compile for ARM64 in Kconfig
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable Todd Poynor
` (19 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
The gasket and apex drivers are also to be used on ARM64 architectures.
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/Kconfig b/drivers/staging/gasket/Kconfig
index c836389c1402d..970e299046c37 100644
--- a/drivers/staging/gasket/Kconfig
+++ b/drivers/staging/gasket/Kconfig
@@ -2,7 +2,7 @@ menu "Gasket devices"
config STAGING_GASKET_FRAMEWORK
tristate "Gasket framework"
- depends on PCI && X86_64
+ depends on PCI && (X86_64 || ARM64)
help
This framework supports Gasket-compatible devices, such as Apex.
It is required for any of the following module(s).
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
2018-07-20 3:49 ` [PATCH 01/20] staging: gasket: allow compile for ARM64 in Kconfig Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-21 6:48 ` Greg Kroah-Hartman
2018-07-20 3:49 ` [PATCH 03/20] staging: gasket: remove code for no physical device Todd Poynor
` (18 subsequent siblings)
20 siblings, 1 reply; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Remove unnecessary variable, pass constant param instead.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index 0d5ba7359af73..f327c9d7f90a3 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -898,7 +898,6 @@ static int gasket_enable_dev(
{
int tbl_idx;
int ret;
- bool has_dma_ops;
struct device *ddev;
const struct gasket_driver_desc *driver_desc =
internal_desc->driver_desc;
@@ -917,8 +916,6 @@ static int gasket_enable_dev(
return ret;
}
- has_dma_ops = true;
-
for (tbl_idx = 0; tbl_idx < driver_desc->num_page_tables; tbl_idx++) {
gasket_log_debug(
gasket_dev, "Initializing page table %d.", tbl_idx);
@@ -936,7 +933,7 @@ static int gasket_enable_dev(
&gasket_dev->bar_data[
driver_desc->page_table_bar_index],
&driver_desc->page_table_configs[tbl_idx],
- ddev, gasket_dev->pci_dev, has_dma_ops);
+ ddev, gasket_dev->pci_dev, true);
if (ret) {
gasket_log_error(
gasket_dev,
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 03/20] staging: gasket: remove code for no physical device
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
2018-07-20 3:49 ` [PATCH 01/20] staging: gasket: allow compile for ARM64 in Kconfig Todd Poynor
2018-07-20 3:49 ` [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 04/20] staging: gasket: fix class create bug handling Todd Poynor
` (17 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
gasket_enable_dev code for enabling a gasket device with no physical PCI
device registered shouldn't be necessary.
Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index f327c9d7f90a3..18cc8e3283b39 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -898,7 +898,6 @@ static int gasket_enable_dev(
{
int tbl_idx;
int ret;
- struct device *ddev;
const struct gasket_driver_desc *driver_desc =
internal_desc->driver_desc;
@@ -919,21 +918,12 @@ static int gasket_enable_dev(
for (tbl_idx = 0; tbl_idx < driver_desc->num_page_tables; tbl_idx++) {
gasket_log_debug(
gasket_dev, "Initializing page table %d.", tbl_idx);
- if (gasket_dev->pci_dev) {
- ddev = &gasket_dev->pci_dev->dev;
- } else {
- gasket_log_error(
- gasket_dev,
- "%s with no physical device!!", __func__);
- WARN_ON(1);
- ddev = NULL;
- }
ret = gasket_page_table_init(
&gasket_dev->page_table[tbl_idx],
&gasket_dev->bar_data[
driver_desc->page_table_bar_index],
&driver_desc->page_table_configs[tbl_idx],
- ddev, gasket_dev->pci_dev, true);
+ &gasket_dev->pci_dev->dev, gasket_dev->pci_dev, true);
if (ret) {
gasket_log_error(
gasket_dev,
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 04/20] staging: gasket: fix class create bug handling
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (2 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 03/20] staging: gasket: remove code for no physical device Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 05/20] staging: gasket: remove unnecessary code in coherent allocator Todd Poynor
` (16 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
class_create() never returns NULL, and this driver should never return
PTR_ERR(NULL) anyway.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
---
drivers/staging/gasket/gasket_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index 18cc8e3283b39..53236e1ba4e48 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -321,7 +321,7 @@ int gasket_register_device(const struct gasket_driver_desc *driver_desc)
internal->class =
class_create(driver_desc->module, driver_desc->name);
- if (IS_ERR_OR_NULL(internal->class)) {
+ if (IS_ERR(internal->class)) {
gasket_nodev_error("Cannot register %s class [ret=%ld]",
driver_desc->name, PTR_ERR(internal->class));
ret = PTR_ERR(internal->class);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 05/20] staging: gasket: remove unnecessary code in coherent allocator
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (3 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 04/20] staging: gasket: fix class create bug handling Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 06/20] staging: gasket: don't treat no device reset callback as an error Todd Poynor
` (15 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Remove extraneous statement in gasket_config_coherent_allocator()
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_ioctl.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/staging/gasket/gasket_ioctl.c b/drivers/staging/gasket/gasket_ioctl.c
index 0c2f85cf54480..d0142ed048a65 100644
--- a/drivers/staging/gasket/gasket_ioctl.c
+++ b/drivers/staging/gasket/gasket_ioctl.c
@@ -420,10 +420,8 @@ static int gasket_config_coherent_allocator(
if (ibuf.page_table_index >= gasket_dev->num_page_tables)
return -EFAULT;
- if (ibuf.size > PAGE_SIZE * MAX_NUM_COHERENT_PAGES) {
- ibuf.size = PAGE_SIZE * MAX_NUM_COHERENT_PAGES;
+ if (ibuf.size > PAGE_SIZE * MAX_NUM_COHERENT_PAGES)
return -ENOMEM;
- }
if (ibuf.enable == 0) {
ret = gasket_free_coherent_memory(
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 06/20] staging: gasket: don't treat no device reset callback as an error
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (4 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 05/20] staging: gasket: remove unnecessary code in coherent allocator Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 07/20] staging: gasket: gasket_mmap return error instead of valid BAR index Todd Poynor
` (14 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
It is not an error for a device to not have a reset callback registered.
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index 53236e1ba4e48..eb5ad161ccda2 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -1836,11 +1836,8 @@ int gasket_reset_nolock(struct gasket_dev *gasket_dev, uint reset_type)
const struct gasket_driver_desc *driver_desc;
driver_desc = gasket_dev->internal_desc->driver_desc;
- if (!driver_desc->device_reset_cb) {
- gasket_log_error(
- gasket_dev, "No device reset callback was registered.");
- return -EINVAL;
- }
+ if (!driver_desc->device_reset_cb)
+ return 0;
/* Perform a device reset of the requested type. */
ret = driver_desc->device_reset_cb(gasket_dev, reset_type);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 07/20] staging: gasket: gasket_mmap return error instead of valid BAR index
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (5 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 06/20] staging: gasket: don't treat no device reset callback as an error Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 08/20] staging: gasket: apex_clock_gating simplify logic, reduce indentation Todd Poynor
` (13 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
When offset to be mapped matches both a BAR region and a coherent mapped
region return an error as intended, not the BAR index.
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index eb5ad161ccda2..3cf918f9d2604 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -1627,7 +1627,7 @@ static int gasket_mmap(struct file *filp, struct vm_area_struct *vma)
"0x%lx",
raw_offset);
trace_gasket_mmap_exit(bar_index);
- return bar_index;
+ return -EINVAL;
}
vma->vm_private_data = gasket_dev;
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 08/20] staging: gasket: apex_clock_gating simplify logic, reduce indentation
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (6 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 07/20] staging: gasket: gasket_mmap return error instead of valid BAR index Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 09/20] staging: gasket: gasket page table functions use bool return type Todd Poynor
` (12 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Collapse together two checks and return immediately, avoid conditional
indentation for most of function code.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/apex_driver.c | 43 +++++++++++++---------------
1 file changed, 20 insertions(+), 23 deletions(-)
diff --git a/drivers/staging/gasket/apex_driver.c b/drivers/staging/gasket/apex_driver.c
index 3a83c3d4d5561..a01b1f2b827ea 100644
--- a/drivers/staging/gasket/apex_driver.c
+++ b/drivers/staging/gasket/apex_driver.c
@@ -666,33 +666,30 @@ static long apex_clock_gating(struct gasket_dev *gasket_dev, ulong arg)
{
struct apex_gate_clock_ioctl ibuf;
- if (bypass_top_level)
+ if (bypass_top_level || !allow_sw_clock_gating)
return 0;
- if (allow_sw_clock_gating) {
- if (copy_from_user(&ibuf, (void __user *)arg, sizeof(ibuf)))
- return -EFAULT;
+ if (copy_from_user(&ibuf, (void __user *)arg, sizeof(ibuf)))
+ return -EFAULT;
- gasket_log_error(
- gasket_dev, "%s %llu", __func__, ibuf.enable);
+ gasket_log_error(gasket_dev, "%s %llu", __func__, ibuf.enable);
- if (ibuf.enable) {
- /* Quiesce AXI, gate GCB clock. */
- gasket_read_modify_write_32(
- gasket_dev, APEX_BAR_INDEX,
- APEX_BAR2_REG_AXI_QUIESCE, 0x1, 1, 16);
- gasket_read_modify_write_32(
- gasket_dev, APEX_BAR_INDEX,
- APEX_BAR2_REG_GCB_CLOCK_GATE, 0x1, 2, 18);
- } else {
- /* Un-gate GCB clock, un-quiesce AXI. */
- gasket_read_modify_write_32(
- gasket_dev, APEX_BAR_INDEX,
- APEX_BAR2_REG_GCB_CLOCK_GATE, 0x0, 2, 18);
- gasket_read_modify_write_32(
- gasket_dev, APEX_BAR_INDEX,
- APEX_BAR2_REG_AXI_QUIESCE, 0x0, 1, 16);
- }
+ if (ibuf.enable) {
+ /* Quiesce AXI, gate GCB clock. */
+ gasket_read_modify_write_32(
+ gasket_dev, APEX_BAR_INDEX,
+ APEX_BAR2_REG_AXI_QUIESCE, 0x1, 1, 16);
+ gasket_read_modify_write_32(
+ gasket_dev, APEX_BAR_INDEX,
+ APEX_BAR2_REG_GCB_CLOCK_GATE, 0x1, 2, 18);
+ } else {
+ /* Un-gate GCB clock, un-quiesce AXI. */
+ gasket_read_modify_write_32(
+ gasket_dev, APEX_BAR_INDEX,
+ APEX_BAR2_REG_GCB_CLOCK_GATE, 0x0, 2, 18);
+ gasket_read_modify_write_32(
+ gasket_dev, APEX_BAR_INDEX,
+ APEX_BAR2_REG_AXI_QUIESCE, 0x0, 1, 16);
}
return 0;
}
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 09/20] staging: gasket: gasket page table functions use bool return type
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (7 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 08/20] staging: gasket: apex_clock_gating simplify logic, reduce indentation Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 10/20] staging: gasket: remove else clause after return in if clause Todd Poynor
` (11 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Convert from int to bool return type for gasket page table functions
that return values used as booleans.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_page_table.c | 58 +++++++++++-----------
drivers/staging/gasket/gasket_page_table.h | 8 +--
2 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/drivers/staging/gasket/gasket_page_table.c b/drivers/staging/gasket/gasket_page_table.c
index 36a560c87af36..2a27db658a4e4 100644
--- a/drivers/staging/gasket/gasket_page_table.c
+++ b/drivers/staging/gasket/gasket_page_table.c
@@ -262,16 +262,16 @@ static void gasket_perform_unmapping(
static void gasket_free_extended_subtable(
struct gasket_page_table *pg_tbl, struct gasket_page_table_entry *pte,
u64 __iomem *att_reg);
-static int gasket_release_page(struct page *page);
+static bool gasket_release_page(struct page *page);
/* Other/utility declarations */
-static inline int gasket_addr_is_simple(
+static inline bool gasket_addr_is_simple(
struct gasket_page_table *pg_tbl, ulong addr);
-static int gasket_is_simple_dev_addr_bad(
+static bool gasket_is_simple_dev_addr_bad(
struct gasket_page_table *pg_tbl, ulong dev_addr, uint num_pages);
-static int gasket_is_extended_dev_addr_bad(
+static bool gasket_is_extended_dev_addr_bad(
struct gasket_page_table *pg_tbl, ulong dev_addr, uint num_pages);
-static int gasket_is_pte_range_free(
+static bool gasket_is_pte_range_free(
struct gasket_page_table_entry *pte, uint num_entries);
static void gasket_page_table_garbage_collect_nolock(
struct gasket_page_table *pg_tbl);
@@ -558,7 +558,7 @@ int gasket_page_table_lookup_page(
}
/* See gasket_page_table.h for description. */
-int gasket_page_table_are_addrs_bad(
+bool gasket_page_table_are_addrs_bad(
struct gasket_page_table *pg_tbl, ulong host_addr, ulong dev_addr,
ulong bytes)
{
@@ -567,7 +567,7 @@ int gasket_page_table_are_addrs_bad(
pg_tbl,
"host mapping address 0x%lx must be page aligned",
host_addr);
- return 1;
+ return true;
}
return gasket_page_table_is_dev_addr_bad(pg_tbl, dev_addr, bytes);
@@ -575,7 +575,7 @@ int gasket_page_table_are_addrs_bad(
EXPORT_SYMBOL(gasket_page_table_are_addrs_bad);
/* See gasket_page_table.h for description. */
-int gasket_page_table_is_dev_addr_bad(
+bool gasket_page_table_is_dev_addr_bad(
struct gasket_page_table *pg_tbl, ulong dev_addr, ulong bytes)
{
uint num_pages = bytes / PAGE_SIZE;
@@ -584,7 +584,7 @@ int gasket_page_table_is_dev_addr_bad(
gasket_pg_tbl_error(
pg_tbl,
"mapping size 0x%lX must be page aligned", bytes);
- return 1;
+ return true;
}
if (num_pages == 0) {
@@ -592,7 +592,7 @@ int gasket_page_table_is_dev_addr_bad(
pg_tbl,
"requested mapping is less than one page: %lu / %lu",
bytes, PAGE_SIZE);
- return 1;
+ return true;
}
if (gasket_addr_is_simple(pg_tbl, dev_addr))
@@ -1285,23 +1285,23 @@ static void gasket_free_extended_subtable(
/*
* Safely return a page to the OS.
* @page: The page to return to the OS.
- * Returns 1 if the page was released, 0 if it was
+ * Returns true if the page was released, false if it was
* ignored.
*/
-static int gasket_release_page(struct page *page)
+static bool gasket_release_page(struct page *page)
{
if (!page)
- return 0;
+ return false;
if (!PageReserved(page))
SetPageDirty(page);
put_page(page);
- return 1;
+ return true;
}
/* Evaluates to nonzero if the specified virtual address is simple. */
-static inline int gasket_addr_is_simple(
+static inline bool gasket_addr_is_simple(
struct gasket_page_table *pg_tbl, ulong addr)
{
return !((addr) & (pg_tbl)->extended_flag);
@@ -1317,7 +1317,7 @@ static inline int gasket_addr_is_simple(
* address to/from page + offset) and that the requested page range starts and
* ends within the set of currently-partitioned simple pages.
*/
-static int gasket_is_simple_dev_addr_bad(
+static bool gasket_is_simple_dev_addr_bad(
struct gasket_page_table *pg_tbl, ulong dev_addr, uint num_pages)
{
ulong page_offset = dev_addr & (PAGE_SIZE - 1);
@@ -1328,7 +1328,7 @@ static int gasket_is_simple_dev_addr_bad(
pg_tbl, 1, page_index, page_offset) != dev_addr) {
gasket_pg_tbl_error(
pg_tbl, "address is invalid, 0x%lX", dev_addr);
- return 1;
+ return true;
}
if (page_index >= pg_tbl->num_simple_entries) {
@@ -1336,7 +1336,7 @@ static int gasket_is_simple_dev_addr_bad(
pg_tbl,
"starting slot at %lu is too large, max is < %u",
page_index, pg_tbl->num_simple_entries);
- return 1;
+ return true;
}
if (page_index + num_pages > pg_tbl->num_simple_entries) {
@@ -1344,10 +1344,10 @@ static int gasket_is_simple_dev_addr_bad(
pg_tbl,
"ending slot at %lu is too large, max is <= %u",
page_index + num_pages, pg_tbl->num_simple_entries);
- return 1;
+ return true;
}
- return 0;
+ return false;
}
/*
@@ -1359,7 +1359,7 @@ static int gasket_is_simple_dev_addr_bad(
* @dev_addr: The device address to which the pages will be mapped.
* @num_pages: The number of second-level/sub pages in the range to consider.
*/
-static int gasket_is_extended_dev_addr_bad(
+static bool gasket_is_extended_dev_addr_bad(
struct gasket_page_table *pg_tbl, ulong dev_addr, uint num_pages)
{
/* Starting byte index of dev_addr into the first mapped page */
@@ -1373,7 +1373,7 @@ static int gasket_is_extended_dev_addr_bad(
if (addr >> (GASKET_EXTENDED_LVL0_WIDTH + GASKET_EXTENDED_LVL0_SHIFT)) {
gasket_pg_tbl_error(pg_tbl, "device address out of bound, 0x%p",
(void *)dev_addr);
- return 1;
+ return true;
}
/* Find the starting sub-page index in the space of all sub-pages. */
@@ -1391,7 +1391,7 @@ static int gasket_is_extended_dev_addr_bad(
pg_tbl, 0, page_global_idx, page_offset) != dev_addr) {
gasket_pg_tbl_error(
pg_tbl, "address is invalid, 0x%p", (void *)dev_addr);
- return 1;
+ return true;
}
if (page_lvl0_idx >= pg_tbl->num_extended_entries) {
@@ -1399,7 +1399,7 @@ static int gasket_is_extended_dev_addr_bad(
pg_tbl,
"starting level 0 slot at %lu is too large, max is < "
"%u", page_lvl0_idx, pg_tbl->num_extended_entries);
- return 1;
+ return true;
}
if (page_lvl0_idx + num_lvl0_pages > pg_tbl->num_extended_entries) {
@@ -1408,10 +1408,10 @@ static int gasket_is_extended_dev_addr_bad(
"ending level 0 slot at %lu is too large, max is <= %u",
page_lvl0_idx + num_lvl0_pages,
pg_tbl->num_extended_entries);
- return 1;
+ return true;
}
- return 0;
+ return false;
}
/*
@@ -1425,17 +1425,17 @@ static int gasket_is_extended_dev_addr_bad(
*
* The page table mutex must be held before this call.
*/
-static int gasket_is_pte_range_free(
+static bool gasket_is_pte_range_free(
struct gasket_page_table_entry *ptes, uint num_entries)
{
int i;
for (i = 0; i < num_entries; i++) {
if (ptes[i].status != PTE_FREE)
- return 0;
+ return false;
}
- return 1;
+ return true;
}
/*
diff --git a/drivers/staging/gasket/gasket_page_table.h b/drivers/staging/gasket/gasket_page_table.h
index 720ce2bc2c012..0e8afdb8c1139 100644
--- a/drivers/staging/gasket/gasket_page_table.h
+++ b/drivers/staging/gasket/gasket_page_table.h
@@ -162,9 +162,9 @@ int gasket_page_table_lookup_page(
* specified by both addresses and the size are valid for mapping pages into
* device memory.
*
- * Returns 1 if true - if the mapping is bad, 0 otherwise.
+ * Returns true if the mapping is bad, false otherwise.
*/
-int gasket_page_table_are_addrs_bad(
+bool gasket_page_table_are_addrs_bad(
struct gasket_page_table *page_table, ulong host_addr, ulong dev_addr,
ulong bytes);
@@ -178,9 +178,9 @@ int gasket_page_table_are_addrs_bad(
* specified by the device address and the size is valid for mapping pages into
* device memory.
*
- * Returns 1 if true - if the address is bad, 0 otherwise.
+ * Returns true if the address is bad, false otherwise.
*/
-int gasket_page_table_is_dev_addr_bad(
+bool gasket_page_table_is_dev_addr_bad(
struct gasket_page_table *page_table, ulong dev_addr, ulong bytes);
/*
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 10/20] staging: gasket: remove else clause after return in if clause
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (8 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 09/20] staging: gasket: gasket page table functions use bool return type Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 11/20] staging: gasket: fix comment syntax in apex.h Todd Poynor
` (10 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Else after return is unnecessary and may cause static code checkers to
complain.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_page_table.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/staging/gasket/gasket_page_table.c b/drivers/staging/gasket/gasket_page_table.c
index 2a27db658a4e4..617d602b8b447 100644
--- a/drivers/staging/gasket/gasket_page_table.c
+++ b/drivers/staging/gasket/gasket_page_table.c
@@ -598,9 +598,7 @@ bool gasket_page_table_is_dev_addr_bad(
if (gasket_addr_is_simple(pg_tbl, dev_addr))
return gasket_is_simple_dev_addr_bad(
pg_tbl, dev_addr, num_pages);
- else
- return gasket_is_extended_dev_addr_bad(
- pg_tbl, dev_addr, num_pages);
+ return gasket_is_extended_dev_addr_bad(pg_tbl, dev_addr, num_pages);
}
EXPORT_SYMBOL(gasket_page_table_is_dev_addr_bad);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 11/20] staging: gasket: fix comment syntax in apex.h
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (9 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 10/20] staging: gasket: remove else clause after return in if clause Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code Todd Poynor
` (9 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Use kernel-style multi-line comment syntax.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/apex.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/gasket/apex.h b/drivers/staging/gasket/apex.h
index 4ef264106f503..d89cc2387b7d4 100644
--- a/drivers/staging/gasket/apex.h
+++ b/drivers/staging/gasket/apex.h
@@ -22,9 +22,10 @@
#define APEX_EXTENDED_SHIFT 63 /* Extended address bit position. */
-/* Addresses are 2^3=8 bytes each. */
-/* page in second level page table */
-/* holds APEX_PAGE_SIZE/8 addresses */
+/*
+ * Addresses are 2^3=8 bytes each. Page in second level page table holds
+ * APEX_PAGE_SIZE/8 addresses.
+ */
#define APEX_ADDR_SHIFT 3
#define APEX_LEVEL_SHIFT (APEX_PAGE_SHIFT - APEX_ADDR_SHIFT)
#define APEX_LEVEL_SIZE BIT(APEX_LEVEL_SHIFT)
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (10 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 11/20] staging: gasket: fix comment syntax in apex.h Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 13/20] staging: gasket: gasket_mmap use PAGE_MASK Todd Poynor
` (8 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
gasket_alloc_coherent_memory() extra parentheses in statement.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_page_table.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_page_table.c b/drivers/staging/gasket/gasket_page_table.c
index 617d602b8b447..9f8116112e0ac 100644
--- a/drivers/staging/gasket/gasket_page_table.c
+++ b/drivers/staging/gasket/gasket_page_table.c
@@ -1639,7 +1639,7 @@ int gasket_alloc_coherent_memory(struct gasket_dev *gasket_dev, u64 size,
dma_addr_t handle;
void *mem;
int j;
- unsigned int num_pages = (size + PAGE_SIZE - 1) / (PAGE_SIZE);
+ unsigned int num_pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;
const struct gasket_driver_desc *driver_desc =
gasket_get_driver_desc(gasket_dev);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 13/20] staging: gasket: gasket_mmap use PAGE_MASK
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (11 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 14/20] staging: gasket: remove extra parens in gasket_write_mappable_regions Todd Poynor
` (7 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
gasket_mmap use PAGE_MASK, instead of performing math on PAGE_SIZE, for
simplicity and clarity.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index 3cf918f9d2604..ae5febec8844c 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -1591,7 +1591,7 @@ static int gasket_mmap(struct file *filp, struct vm_area_struct *vma)
}
driver_desc = gasket_dev->internal_desc->driver_desc;
- if (vma->vm_start & (PAGE_SIZE - 1)) {
+ if (vma->vm_start & ~PAGE_MASK) {
gasket_log_error(
gasket_dev, "Base address not page-aligned: 0x%p\n",
(void *)vma->vm_start);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 14/20] staging: gasket: remove extra parens in gasket_write_mappable_regions
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (12 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 13/20] staging: gasket: gasket_mmap use PAGE_MASK Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 15/20] staging: gasket: fix multi-line comment syntax in gasket_core.h Todd Poynor
` (6 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Remove unneeded parentheses around subexpressions.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index ae5febec8844c..ba48a379b0ada 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -1889,7 +1889,7 @@ static ssize_t gasket_write_mappable_regions(
if (bar_desc.permissions == GASKET_NOMAP)
return 0;
for (i = 0;
- (i < bar_desc.num_mappable_regions) && (total_written < PAGE_SIZE);
+ i < bar_desc.num_mappable_regions && total_written < PAGE_SIZE;
i++) {
min_addr = bar_desc.mappable_regions[i].start -
driver_desc->legacy_mmap_address_offset;
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 15/20] staging: gasket: fix multi-line comment syntax in gasket_core.h
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (13 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 14/20] staging: gasket: remove extra parens in gasket_write_mappable_regions Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 16/20] staging: gasket: always allow root open for write Todd Poynor
` (5 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Use consistent kernel-style multi-line comment syntax.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_core.h b/drivers/staging/gasket/gasket_core.h
index 50ad0c8853183..7ea1df123ba5d 100644
--- a/drivers/staging/gasket/gasket_core.h
+++ b/drivers/staging/gasket/gasket_core.h
@@ -54,7 +54,8 @@ enum gasket_interrupt_type {
PLATFORM_WIRE = 2,
};
-/* Used to describe a Gasket interrupt. Contains an interrupt index, a register,
+/*
+ * Used to describe a Gasket interrupt. Contains an interrupt index, a register,
* and packing data for that interrupt. The register and packing data
* fields are relevant only for PCI_MSIX interrupt type and can be
* set to 0 for everything else.
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 16/20] staging: gasket: always allow root open for write
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (14 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 15/20] staging: gasket: fix multi-line comment syntax in gasket_core.h Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 17/20] staging: gasket: top ioctl handler add __user annotations Todd Poynor
` (4 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Always allow root to open device for writing.
Drop special-casing of ioctl permissions for root vs. owner.
Convert to bool types as appropriate.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/apex_driver.c | 15 ++++----------
drivers/staging/gasket/gasket_core.c | 8 ++++---
drivers/staging/gasket/gasket_ioctl.c | 30 +++++++++++++--------------
3 files changed, 23 insertions(+), 30 deletions(-)
diff --git a/drivers/staging/gasket/apex_driver.c b/drivers/staging/gasket/apex_driver.c
index a01b1f2b827ea..4c00f3609f081 100644
--- a/drivers/staging/gasket/apex_driver.c
+++ b/drivers/staging/gasket/apex_driver.c
@@ -140,7 +140,7 @@ static int apex_reset(struct gasket_dev *gasket_dev, uint type);
static int apex_get_status(struct gasket_dev *gasket_dev);
-static uint apex_ioctl_check_permissions(struct file *file, uint cmd);
+static bool apex_ioctl_check_permissions(struct file *file, uint cmd);
static long apex_ioctl(struct file *file, uint cmd, ulong arg);
@@ -625,18 +625,11 @@ static bool is_gcb_in_reset(struct gasket_dev *gasket_dev)
* @file: File pointer from ioctl.
* @cmd: ioctl command.
*
- * Returns 1 if the current user may execute this ioctl, and 0 otherwise.
+ * Returns true if the current user may execute this ioctl, and false otherwise.
*/
-static uint apex_ioctl_check_permissions(struct file *filp, uint cmd)
+static bool apex_ioctl_check_permissions(struct file *filp, uint cmd)
{
- struct gasket_dev *gasket_dev = filp->private_data;
- int root = capable(CAP_SYS_ADMIN);
- int is_owner = gasket_dev->dev_info.ownership.is_owned &&
- current->tgid == gasket_dev->dev_info.ownership.owner;
-
- if (root || is_owner)
- return 1;
- return 0;
+ return !!(filp->f_mode & FMODE_WRITE);
}
/*
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index ba48a379b0ada..254fb392c05c1 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -1072,6 +1072,7 @@ static int gasket_open(struct inode *inode, struct file *filp)
char task_name[TASK_COMM_LEN];
struct gasket_cdev_info *dev_info =
container_of(inode->i_cdev, struct gasket_cdev_info, cdev);
+ int is_root = capable(CAP_SYS_ADMIN);
gasket_dev = dev_info->gasket_dev_ptr;
driver_desc = gasket_dev->internal_desc->driver_desc;
@@ -1085,7 +1086,7 @@ static int gasket_open(struct inode *inode, struct file *filp)
"Attempting to open with tgid %u (%s) (f_mode: 0%03o, "
"fmode_write: %d is_root: %u)",
current->tgid, task_name, filp->f_mode,
- (filp->f_mode & FMODE_WRITE), capable(CAP_SYS_ADMIN));
+ (filp->f_mode & FMODE_WRITE), is_root);
/* Always allow non-writing accesses. */
if (!(filp->f_mode & FMODE_WRITE)) {
@@ -1099,8 +1100,9 @@ static int gasket_open(struct inode *inode, struct file *filp)
gasket_dev, "Current owner open count (owning tgid %u): %d.",
ownership->owner, ownership->write_open_count);
- /* Opening a node owned by another TGID is an error (even root.) */
- if (ownership->is_owned && ownership->owner != current->tgid) {
+ /* Opening a node owned by another TGID is an error (unless root) */
+ if (ownership->is_owned && ownership->owner != current->tgid &&
+ !is_root) {
gasket_log_error(
gasket_dev,
"Process %u is opening a node held by %u.",
diff --git a/drivers/staging/gasket/gasket_ioctl.c b/drivers/staging/gasket/gasket_ioctl.c
index d0142ed048a65..8fd44979fe713 100644
--- a/drivers/staging/gasket/gasket_ioctl.c
+++ b/drivers/staging/gasket/gasket_ioctl.c
@@ -22,7 +22,7 @@
#define trace_gasket_ioctl_config_coherent_allocator(x, ...)
#endif
-static uint gasket_ioctl_check_permissions(struct file *filp, uint cmd);
+static bool gasket_ioctl_check_permissions(struct file *filp, uint cmd);
static int gasket_set_event_fd(struct gasket_dev *dev, ulong arg);
static int gasket_read_page_table_size(
struct gasket_dev *gasket_dev, ulong arg);
@@ -167,12 +167,13 @@ long gasket_is_supported_ioctl(uint cmd)
* @filp: File structure pointer describing this node usage session.
* @cmd: ioctl number to handle.
*
- * Standard permissions checker.
+ * Check permissions for Gasket ioctls.
+ * Returns true if the file opener may execute this ioctl, or false otherwise.
*/
-static uint gasket_ioctl_check_permissions(struct file *filp, uint cmd)
+static bool gasket_ioctl_check_permissions(struct file *filp, uint cmd)
{
- uint alive, root, device_owner;
- fmode_t read, write;
+ bool alive;
+ bool read, write;
struct gasket_dev *gasket_dev = (struct gasket_dev *)filp->private_data;
alive = (gasket_dev->status == GASKET_STATUS_ALIVE);
@@ -183,36 +184,33 @@ static uint gasket_ioctl_check_permissions(struct file *filp, uint cmd)
alive, gasket_dev->status);
}
- root = capable(CAP_SYS_ADMIN);
- read = filp->f_mode & FMODE_READ;
- write = filp->f_mode & FMODE_WRITE;
- device_owner = (gasket_dev->dev_info.ownership.is_owned &&
- current->tgid == gasket_dev->dev_info.ownership.owner);
+ read = !!(filp->f_mode & FMODE_READ);
+ write = !!(filp->f_mode & FMODE_WRITE);
switch (cmd) {
case GASKET_IOCTL_RESET:
case GASKET_IOCTL_CLEAR_INTERRUPT_COUNTS:
- return root || (write && device_owner);
+ return write;
case GASKET_IOCTL_PAGE_TABLE_SIZE:
case GASKET_IOCTL_SIMPLE_PAGE_TABLE_SIZE:
case GASKET_IOCTL_NUMBER_PAGE_TABLES:
- return root || read;
+ return read;
case GASKET_IOCTL_PARTITION_PAGE_TABLE:
case GASKET_IOCTL_CONFIG_COHERENT_ALLOCATOR:
- return alive && (root || (write && device_owner));
+ return alive && write;
case GASKET_IOCTL_MAP_BUFFER:
case GASKET_IOCTL_UNMAP_BUFFER:
- return alive && (root || (write && device_owner));
+ return alive && write;
case GASKET_IOCTL_CLEAR_EVENTFD:
case GASKET_IOCTL_SET_EVENTFD:
- return alive && (root || (write && device_owner));
+ return alive && write;
}
- return 0; /* unknown permissions */
+ return false; /* unknown permissions */
}
/*
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 17/20] staging: gasket: top ioctl handler add __user annotations
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (15 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 16/20] staging: gasket: always allow root open for write Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 18/20] staging: gasket: apex ioctl " Todd Poynor
` (3 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Add __user annotation to gasket_core top-level ioctl handling pointer
arguments, for sparse checking.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_core.c | 6 ++++--
drivers/staging/gasket/gasket_core.h | 7 +++++--
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
index 254fb392c05c1..40e46ca5228c8 100644
--- a/drivers/staging/gasket/gasket_core.c
+++ b/drivers/staging/gasket/gasket_core.c
@@ -14,6 +14,7 @@
#include "gasket_page_table.h"
#include "gasket_sysfs.h"
+#include <linux/compiler.h>
#include <linux/delay.h>
#include <linux/fs.h>
#include <linux/init.h>
@@ -1781,6 +1782,7 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg)
{
struct gasket_dev *gasket_dev;
const struct gasket_driver_desc *driver_desc;
+ void __user *argp = (void __user *)arg;
char path[256];
if (!filp)
@@ -1810,14 +1812,14 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg)
* check_and_invoke_callback.
*/
if (driver_desc->ioctl_handler_cb)
- return driver_desc->ioctl_handler_cb(filp, cmd, arg);
+ return driver_desc->ioctl_handler_cb(filp, cmd, argp);
gasket_log_error(
gasket_dev, "Received unknown ioctl 0x%x", cmd);
return -EINVAL;
}
- return gasket_handle_ioctl(filp, cmd, arg);
+ return gasket_handle_ioctl(filp, cmd, argp);
}
int gasket_reset(struct gasket_dev *gasket_dev, uint reset_type)
diff --git a/drivers/staging/gasket/gasket_core.h b/drivers/staging/gasket/gasket_core.h
index 7ea1df123ba5d..bf4ed3769efb2 100644
--- a/drivers/staging/gasket/gasket_core.h
+++ b/drivers/staging/gasket/gasket_core.h
@@ -314,9 +314,12 @@ struct gasket_dev {
struct hlist_node legacy_hlist_node;
};
+/* Type of the ioctl handler callback. */
+typedef long (*gasket_ioctl_handler_cb_t)
+ (struct file *file, uint cmd, void __user *argp);
/* Type of the ioctl permissions check callback. See below. */
typedef int (*gasket_ioctl_permissions_cb_t)(
- struct file *filp, uint cmd, ulong arg);
+ struct file *filp, uint cmd, void __user *argp);
/*
* Device type descriptor.
@@ -550,7 +553,7 @@ struct gasket_driver_desc {
* return -EINVAL. Should return an error status (either -EINVAL or
* the error result of the ioctl being handled).
*/
- long (*ioctl_handler_cb)(struct file *filp, uint cmd, ulong arg);
+ gasket_ioctl_handler_cb_t ioctl_handler_cb;
/*
* device_status_cb: Callback to determine device health.
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 18/20] staging: gasket: apex ioctl add __user annotations
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (16 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 17/20] staging: gasket: top ioctl handler add __user annotations Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 19/20] staging: gasket: common ioctl dispatcher " Todd Poynor
` (2 subsequent siblings)
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Add __user annotation to ioctl pointer argument, for sparse checking.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/apex_driver.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/gasket/apex_driver.c b/drivers/staging/gasket/apex_driver.c
index 4c00f3609f081..3e76c4db5db2e 100644
--- a/drivers/staging/gasket/apex_driver.c
+++ b/drivers/staging/gasket/apex_driver.c
@@ -5,6 +5,7 @@
* Copyright (C) 2018 Google, Inc.
*/
+#include <linux/compiler.h>
#include <linux/delay.h>
#include <linux/fs.h>
#include <linux/init.h>
@@ -142,9 +143,10 @@ static int apex_get_status(struct gasket_dev *gasket_dev);
static bool apex_ioctl_check_permissions(struct file *file, uint cmd);
-static long apex_ioctl(struct file *file, uint cmd, ulong arg);
+static long apex_ioctl(struct file *file, uint cmd, void __user *argp);
-static long apex_clock_gating(struct gasket_dev *gasket_dev, ulong arg);
+static long apex_clock_gating(struct gasket_dev *gasket_dev,
+ struct apex_gate_clock_ioctl __user *argp);
static int apex_enter_reset(struct gasket_dev *gasket_dev, uint type);
@@ -635,7 +637,7 @@ static bool apex_ioctl_check_permissions(struct file *filp, uint cmd)
/*
* Apex-specific ioctl handler.
*/
-static long apex_ioctl(struct file *filp, uint cmd, ulong arg)
+static long apex_ioctl(struct file *filp, uint cmd, void __user *argp)
{
struct gasket_dev *gasket_dev = filp->private_data;
@@ -644,7 +646,7 @@ static long apex_ioctl(struct file *filp, uint cmd, ulong arg)
switch (cmd) {
case APEX_IOCTL_GATE_CLOCK:
- return apex_clock_gating(gasket_dev, arg);
+ return apex_clock_gating(gasket_dev, argp);
default:
return -ENOTTY; /* unknown command */
}
@@ -653,16 +655,17 @@ static long apex_ioctl(struct file *filp, uint cmd, ulong arg)
/*
* Gates or un-gates Apex clock.
* @gasket_dev: Gasket device pointer.
- * @arg: User ioctl arg, in this case to a apex_gate_clock_ioctl struct.
+ * @argp: User ioctl arg, pointer to a apex_gate_clock_ioctl struct.
*/
-static long apex_clock_gating(struct gasket_dev *gasket_dev, ulong arg)
+static long apex_clock_gating(struct gasket_dev *gasket_dev,
+ struct apex_gate_clock_ioctl __user *argp)
{
struct apex_gate_clock_ioctl ibuf;
if (bypass_top_level || !allow_sw_clock_gating)
return 0;
- if (copy_from_user(&ibuf, (void __user *)arg, sizeof(ibuf)))
+ if (copy_from_user(&ibuf, argp, sizeof(ibuf)))
return -EFAULT;
gasket_log_error(gasket_dev, "%s %llu", __func__, ibuf.enable);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 19/20] staging: gasket: common ioctl dispatcher add __user annotations
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (17 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 18/20] staging: gasket: apex ioctl " Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-20 3:49 ` [PATCH 20/20] staging: gasket: common ioctls " Todd Poynor
2018-07-21 6:51 ` [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Greg Kroah-Hartman
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Add __user annotation to gasket core common ioctl pointer arguments for
sparse checking.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_ioctl.c | 8 +++++---
drivers/staging/gasket/gasket_ioctl.h | 4 +++-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/gasket/gasket_ioctl.c b/drivers/staging/gasket/gasket_ioctl.c
index 8fd44979fe713..998d0e215523c 100644
--- a/drivers/staging/gasket/gasket_ioctl.c
+++ b/drivers/staging/gasket/gasket_ioctl.c
@@ -7,6 +7,7 @@
#include "gasket_interrupt.h"
#include "gasket_logging.h"
#include "gasket_page_table.h"
+#include <linux/compiler.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
@@ -39,13 +40,14 @@ static int gasket_config_coherent_allocator(
* standard ioctl dispatch function.
* @filp: File structure pointer describing this node usage session.
* @cmd: ioctl number to handle.
- * @arg: ioctl-specific data pointer.
+ * @argp: ioctl-specific data pointer.
*
* Standard ioctl dispatcher; forwards operations to individual handlers.
*/
-long gasket_handle_ioctl(struct file *filp, uint cmd, ulong arg)
+long gasket_handle_ioctl(struct file *filp, uint cmd, void __user *argp)
{
struct gasket_dev *gasket_dev;
+ unsigned long arg = (unsigned long)argp;
int retval;
gasket_dev = (struct gasket_dev *)filp->private_data;
@@ -53,7 +55,7 @@ long gasket_handle_ioctl(struct file *filp, uint cmd, ulong arg)
if (gasket_get_ioctl_permissions_cb(gasket_dev)) {
retval = gasket_get_ioctl_permissions_cb(gasket_dev)(
- filp, cmd, arg);
+ filp, cmd, argp);
if (retval < 0) {
trace_gasket_ioctl_exit(-EPERM);
return retval;
diff --git a/drivers/staging/gasket/gasket_ioctl.h b/drivers/staging/gasket/gasket_ioctl.h
index 461fab27a3e52..51f468c77f041 100644
--- a/drivers/staging/gasket/gasket_ioctl.h
+++ b/drivers/staging/gasket/gasket_ioctl.h
@@ -5,6 +5,8 @@
#include "gasket_core.h"
+#include <linux/compiler.h>
+
/*
* Handle Gasket common ioctls.
* @filp: Pointer to the ioctl's file.
@@ -13,7 +15,7 @@
*
* Returns 0 on success and nonzero on failure.
*/
-long gasket_handle_ioctl(struct file *filp, uint cmd, ulong arg);
+long gasket_handle_ioctl(struct file *filp, uint cmd, void __user *argp);
/*
* Determines if an ioctl is part of the standard Gasket framework.
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 20/20] staging: gasket: common ioctls add __user annotations
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (18 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 19/20] staging: gasket: common ioctl dispatcher " Todd Poynor
@ 2018-07-20 3:49 ` Todd Poynor
2018-07-21 6:51 ` [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Greg Kroah-Hartman
20 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-20 3:49 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Simon Que, Dmitry Torokhov, Guenter Roeck, devel,
linux-kernel, Todd Poynor
From: Todd Poynor <toddpoynor@google.com>
Add __user annotation to gasket common ioctl pointer arguments for
sparse checking.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_ioctl.c | 102 ++++++++++++++------------
1 file changed, 55 insertions(+), 47 deletions(-)
diff --git a/drivers/staging/gasket/gasket_ioctl.c b/drivers/staging/gasket/gasket_ioctl.c
index 998d0e215523c..2e2c9b997093b 100644
--- a/drivers/staging/gasket/gasket_ioctl.c
+++ b/drivers/staging/gasket/gasket_ioctl.c
@@ -24,17 +24,24 @@
#endif
static bool gasket_ioctl_check_permissions(struct file *filp, uint cmd);
-static int gasket_set_event_fd(struct gasket_dev *dev, ulong arg);
+static int gasket_set_event_fd(struct gasket_dev *dev,
+ struct gasket_interrupt_eventfd __user *argp);
static int gasket_read_page_table_size(
- struct gasket_dev *gasket_dev, ulong arg);
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp);
static int gasket_read_simple_page_table_size(
- struct gasket_dev *gasket_dev, ulong arg);
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp);
static int gasket_partition_page_table(
- struct gasket_dev *gasket_dev, ulong arg);
-static int gasket_map_buffers(struct gasket_dev *gasket_dev, ulong arg);
-static int gasket_unmap_buffers(struct gasket_dev *gasket_dev, ulong arg);
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp);
+static int gasket_map_buffers(struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp);
+static int gasket_unmap_buffers(struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp);
static int gasket_config_coherent_allocator(
- struct gasket_dev *gasket_dev, ulong arg);
+ struct gasket_dev *gasket_dev,
+ struct gasket_coherent_alloc_config_ioctl __user *argp);
/*
* standard ioctl dispatch function.
@@ -80,7 +87,7 @@ long gasket_handle_ioctl(struct file *filp, uint cmd, void __user *argp)
retval = gasket_reset(gasket_dev, arg);
break;
case GASKET_IOCTL_SET_EVENTFD:
- retval = gasket_set_event_fd(gasket_dev, arg);
+ retval = gasket_set_event_fd(gasket_dev, argp);
break;
case GASKET_IOCTL_CLEAR_EVENTFD:
trace_gasket_ioctl_integer_data(arg);
@@ -89,31 +96,30 @@ long gasket_handle_ioctl(struct file *filp, uint cmd, void __user *argp)
break;
case GASKET_IOCTL_PARTITION_PAGE_TABLE:
trace_gasket_ioctl_integer_data(arg);
- retval = gasket_partition_page_table(gasket_dev, arg);
+ retval = gasket_partition_page_table(gasket_dev, argp);
break;
case GASKET_IOCTL_NUMBER_PAGE_TABLES:
trace_gasket_ioctl_integer_data(gasket_dev->num_page_tables);
- if (copy_to_user((void __user *)arg,
- &gasket_dev->num_page_tables,
+ if (copy_to_user(argp, &gasket_dev->num_page_tables,
sizeof(uint64_t)))
retval = -EFAULT;
else
retval = 0;
break;
case GASKET_IOCTL_PAGE_TABLE_SIZE:
- retval = gasket_read_page_table_size(gasket_dev, arg);
+ retval = gasket_read_page_table_size(gasket_dev, argp);
break;
case GASKET_IOCTL_SIMPLE_PAGE_TABLE_SIZE:
- retval = gasket_read_simple_page_table_size(gasket_dev, arg);
+ retval = gasket_read_simple_page_table_size(gasket_dev, argp);
break;
case GASKET_IOCTL_MAP_BUFFER:
- retval = gasket_map_buffers(gasket_dev, arg);
+ retval = gasket_map_buffers(gasket_dev, argp);
break;
case GASKET_IOCTL_CONFIG_COHERENT_ALLOCATOR:
- retval = gasket_config_coherent_allocator(gasket_dev, arg);
+ retval = gasket_config_coherent_allocator(gasket_dev, argp);
break;
case GASKET_IOCTL_UNMAP_BUFFER:
- retval = gasket_unmap_buffers(gasket_dev, arg);
+ retval = gasket_unmap_buffers(gasket_dev, argp);
break;
case GASKET_IOCTL_CLEAR_INTERRUPT_COUNTS:
/* Clear interrupt counts doesn't take an arg, so use 0. */
@@ -218,16 +224,15 @@ static bool gasket_ioctl_check_permissions(struct file *filp, uint cmd)
/*
* Associate an eventfd with an interrupt.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to gasket_interrupt_eventfd struct in userspace.
+ * @argp: Pointer to gasket_interrupt_eventfd struct in userspace.
*/
-static int gasket_set_event_fd(struct gasket_dev *gasket_dev, ulong arg)
+static int gasket_set_event_fd(struct gasket_dev *gasket_dev,
+ struct gasket_interrupt_eventfd __user *argp)
{
struct gasket_interrupt_eventfd die;
- if (copy_from_user(&die, (void __user *)arg,
- sizeof(struct gasket_interrupt_eventfd))) {
+ if (copy_from_user(&die, argp, sizeof(struct gasket_interrupt_eventfd)))
return -EFAULT;
- }
trace_gasket_ioctl_eventfd_data(die.interrupt, die.event_fd);
@@ -238,15 +243,16 @@ static int gasket_set_event_fd(struct gasket_dev *gasket_dev, ulong arg)
/*
* Reads the size of the page table.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to gasket_page_table_ioctl struct in userspace.
+ * @argp: Pointer to gasket_page_table_ioctl struct in userspace.
*/
-static int gasket_read_page_table_size(struct gasket_dev *gasket_dev, ulong arg)
+static int gasket_read_page_table_size(
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp)
{
int ret = 0;
struct gasket_page_table_ioctl ibuf;
- if (copy_from_user(&ibuf, (void __user *)arg,
- sizeof(struct gasket_page_table_ioctl)))
+ if (copy_from_user(&ibuf, argp, sizeof(struct gasket_page_table_ioctl)))
return -EFAULT;
if (ibuf.page_table_index >= gasket_dev->num_page_tables)
@@ -259,7 +265,7 @@ static int gasket_read_page_table_size(struct gasket_dev *gasket_dev, ulong arg)
ibuf.page_table_index, ibuf.size, ibuf.host_address,
ibuf.device_address);
- if (copy_to_user((void __user *)arg, &ibuf, sizeof(ibuf)))
+ if (copy_to_user(argp, &ibuf, sizeof(ibuf)))
return -EFAULT;
return ret;
@@ -268,16 +274,16 @@ static int gasket_read_page_table_size(struct gasket_dev *gasket_dev, ulong arg)
/*
* Reads the size of the simple page table.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to gasket_page_table_ioctl struct in userspace.
+ * @argp: Pointer to gasket_page_table_ioctl struct in userspace.
*/
static int gasket_read_simple_page_table_size(
- struct gasket_dev *gasket_dev, ulong arg)
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp)
{
int ret = 0;
struct gasket_page_table_ioctl ibuf;
- if (copy_from_user(&ibuf, (void __user *)arg,
- sizeof(struct gasket_page_table_ioctl)))
+ if (copy_from_user(&ibuf, argp, sizeof(struct gasket_page_table_ioctl)))
return -EFAULT;
if (ibuf.page_table_index >= gasket_dev->num_page_tables)
@@ -290,7 +296,7 @@ static int gasket_read_simple_page_table_size(
ibuf.page_table_index, ibuf.size, ibuf.host_address,
ibuf.device_address);
- if (copy_to_user((void __user *)arg, &ibuf, sizeof(ibuf)))
+ if (copy_to_user(argp, &ibuf, sizeof(ibuf)))
return -EFAULT;
return ret;
@@ -299,16 +305,17 @@ static int gasket_read_simple_page_table_size(
/*
* Sets the boundary between the simple and extended page tables.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to gasket_page_table_ioctl struct in userspace.
+ * @argp: Pointer to gasket_page_table_ioctl struct in userspace.
*/
-static int gasket_partition_page_table(struct gasket_dev *gasket_dev, ulong arg)
+static int gasket_partition_page_table(
+ struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp)
{
int ret;
struct gasket_page_table_ioctl ibuf;
uint max_page_table_size;
- if (copy_from_user(&ibuf, (void __user *)arg,
- sizeof(struct gasket_page_table_ioctl)))
+ if (copy_from_user(&ibuf, argp, sizeof(struct gasket_page_table_ioctl)))
return -EFAULT;
trace_gasket_ioctl_page_table_data(
@@ -340,14 +347,14 @@ static int gasket_partition_page_table(struct gasket_dev *gasket_dev, ulong arg)
/*
* Maps a userspace buffer to a device virtual address.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to a gasket_page_table_ioctl struct in userspace.
+ * @argp: Pointer to a gasket_page_table_ioctl struct in userspace.
*/
-static int gasket_map_buffers(struct gasket_dev *gasket_dev, ulong arg)
+static int gasket_map_buffers(struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp)
{
struct gasket_page_table_ioctl ibuf;
- if (copy_from_user(&ibuf, (void __user *)arg,
- sizeof(struct gasket_page_table_ioctl)))
+ if (copy_from_user(&ibuf, argp, sizeof(struct gasket_page_table_ioctl)))
return -EFAULT;
trace_gasket_ioctl_page_table_data(
@@ -370,14 +377,14 @@ static int gasket_map_buffers(struct gasket_dev *gasket_dev, ulong arg)
/*
* Unmaps a userspace buffer from a device virtual address.
* @gasket_dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to a gasket_page_table_ioctl struct in userspace.
+ * @argp: Pointer to a gasket_page_table_ioctl struct in userspace.
*/
-static int gasket_unmap_buffers(struct gasket_dev *gasket_dev, ulong arg)
+static int gasket_unmap_buffers(struct gasket_dev *gasket_dev,
+ struct gasket_page_table_ioctl __user *argp)
{
struct gasket_page_table_ioctl ibuf;
- if (copy_from_user(&ibuf, (void __user *)arg,
- sizeof(struct gasket_page_table_ioctl)))
+ if (copy_from_user(&ibuf, argp, sizeof(struct gasket_page_table_ioctl)))
return -EFAULT;
trace_gasket_ioctl_page_table_data(
@@ -402,15 +409,16 @@ static int gasket_unmap_buffers(struct gasket_dev *gasket_dev, ulong arg)
* Tell the driver to reserve structures for coherent allocation, and allocate
* or free the corresponding memory.
* @dev: Pointer to the current gasket_dev we're using.
- * @arg: Pointer to a gasket_coherent_alloc_config_ioctl struct in userspace.
+ * @argp: Pointer to a gasket_coherent_alloc_config_ioctl struct in userspace.
*/
static int gasket_config_coherent_allocator(
- struct gasket_dev *gasket_dev, ulong arg)
+ struct gasket_dev *gasket_dev,
+ struct gasket_coherent_alloc_config_ioctl __user *argp)
{
int ret;
struct gasket_coherent_alloc_config_ioctl ibuf;
- if (copy_from_user(&ibuf, (void __user *)arg,
+ if (copy_from_user(&ibuf, argp,
sizeof(struct gasket_coherent_alloc_config_ioctl)))
return -EFAULT;
@@ -432,7 +440,7 @@ static int gasket_config_coherent_allocator(
gasket_dev, ibuf.size, &ibuf.dma_address,
ibuf.page_table_index);
}
- if (copy_to_user((void __user *)arg, &ibuf, sizeof(ibuf)))
+ if (copy_to_user(argp, &ibuf, sizeof(ibuf)))
return -EFAULT;
return ret;
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable
2018-07-20 3:49 ` [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable Todd Poynor
@ 2018-07-21 6:48 ` Greg Kroah-Hartman
0 siblings, 0 replies; 24+ messages in thread
From: Greg Kroah-Hartman @ 2018-07-21 6:48 UTC (permalink / raw)
To: Todd Poynor
Cc: Rob Springer, John Joseph, Ben Chan, devel, Zhongze Hu,
linux-kernel, Simon Que, Guenter Roeck, Todd Poynor,
Dmitry Torokhov
On Thu, Jul 19, 2018 at 08:49:02PM -0700, Todd Poynor wrote:
> From: Todd Poynor <toddpoynor@google.com>
>
> Remove unnecessary variable, pass constant param instead.
>
> Reported-by: Dmitry Torokhov <dtor@chromium.org>
> Signed-off-by: Zhongze Hu <frankhu@chromium.org>
> Signed-off-by: Todd Poynor <toddpoynor@google.com>
> ---
> drivers/staging/gasket/gasket_core.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
> index 0d5ba7359af73..f327c9d7f90a3 100644
> --- a/drivers/staging/gasket/gasket_core.c
> +++ b/drivers/staging/gasket/gasket_core.c
> @@ -898,7 +898,6 @@ static int gasket_enable_dev(
> {
> int tbl_idx;
> int ret;
> - bool has_dma_ops;
> struct device *ddev;
> const struct gasket_driver_desc *driver_desc =
> internal_desc->driver_desc;
> @@ -917,8 +916,6 @@ static int gasket_enable_dev(
> return ret;
> }
>
> - has_dma_ops = true;
> -
> for (tbl_idx = 0; tbl_idx < driver_desc->num_page_tables; tbl_idx++) {
> gasket_log_debug(
> gasket_dev, "Initializing page table %d.", tbl_idx);
> @@ -936,7 +933,7 @@ static int gasket_enable_dev(
> &gasket_dev->bar_data[
> driver_desc->page_table_bar_index],
> &driver_desc->page_table_configs[tbl_idx],
> - ddev, gasket_dev->pci_dev, has_dma_ops);
> + ddev, gasket_dev->pci_dev, true);
As the only call for this function now hard-codes this last parameter,
perhaps that parameter should just be removed now?
Something for a later patch.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
` (19 preceding siblings ...)
2018-07-20 3:49 ` [PATCH 20/20] staging: gasket: common ioctls " Todd Poynor
@ 2018-07-21 6:51 ` Greg Kroah-Hartman
20 siblings, 0 replies; 24+ messages in thread
From: Greg Kroah-Hartman @ 2018-07-21 6:51 UTC (permalink / raw)
To: Todd Poynor
Cc: Rob Springer, John Joseph, Ben Chan, Zhongze Hu, Simon Que,
Dmitry Torokhov, Guenter Roeck, devel, linux-kernel, Todd Poynor
On Thu, Jul 19, 2018 at 08:49:00PM -0700, Todd Poynor wrote:
> From: Todd Poynor <toddpoynor@google.com>
>
> Various fixes mainly from the chromium review of the gasket and apex
> drivers. More to come.
Thanks for sticking with this. Looks good, all now applied.
greg k-h
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code
2018-07-21 12:56 [PATCH 00/14] staging: gasket: assorted cleanups Todd Poynor
@ 2018-07-21 12:57 ` Todd Poynor
0 siblings, 0 replies; 24+ messages in thread
From: Todd Poynor @ 2018-07-21 12:57 UTC (permalink / raw)
To: Rob Springer, John Joseph, Ben Chan, Greg Kroah-Hartman
Cc: Zhongze Hu, Dmitry Torokhov, Guenter Roeck, devel, linux-kernel,
Todd Poynor, Simon Que
From: Todd Poynor <toddpoynor@google.com>
gasket_alloc_coherent_memory() extra parentheses in statement.
Reported-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Simon Que <sque@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
drivers/staging/gasket/gasket_page_table.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/gasket/gasket_page_table.c b/drivers/staging/gasket/gasket_page_table.c
index 617d602b8b447..9f8116112e0ac 100644
--- a/drivers/staging/gasket/gasket_page_table.c
+++ b/drivers/staging/gasket/gasket_page_table.c
@@ -1639,7 +1639,7 @@ int gasket_alloc_coherent_memory(struct gasket_dev *gasket_dev, u64 size,
dma_addr_t handle;
void *mem;
int j;
- unsigned int num_pages = (size + PAGE_SIZE - 1) / (PAGE_SIZE);
+ unsigned int num_pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;
const struct gasket_driver_desc *driver_desc =
gasket_get_driver_desc(gasket_dev);
--
2.18.0.233.g985f88cf7e-goog
^ permalink raw reply related [flat|nested] 24+ messages in thread
end of thread, other threads:[~2018-07-21 12:57 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-20 3:49 [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Todd Poynor
2018-07-20 3:49 ` [PATCH 01/20] staging: gasket: allow compile for ARM64 in Kconfig Todd Poynor
2018-07-20 3:49 ` [PATCH 02/20] staging: gasket: gasket_enable_dev remove unnecessary variable Todd Poynor
2018-07-21 6:48 ` Greg Kroah-Hartman
2018-07-20 3:49 ` [PATCH 03/20] staging: gasket: remove code for no physical device Todd Poynor
2018-07-20 3:49 ` [PATCH 04/20] staging: gasket: fix class create bug handling Todd Poynor
2018-07-20 3:49 ` [PATCH 05/20] staging: gasket: remove unnecessary code in coherent allocator Todd Poynor
2018-07-20 3:49 ` [PATCH 06/20] staging: gasket: don't treat no device reset callback as an error Todd Poynor
2018-07-20 3:49 ` [PATCH 07/20] staging: gasket: gasket_mmap return error instead of valid BAR index Todd Poynor
2018-07-20 3:49 ` [PATCH 08/20] staging: gasket: apex_clock_gating simplify logic, reduce indentation Todd Poynor
2018-07-20 3:49 ` [PATCH 09/20] staging: gasket: gasket page table functions use bool return type Todd Poynor
2018-07-20 3:49 ` [PATCH 10/20] staging: gasket: remove else clause after return in if clause Todd Poynor
2018-07-20 3:49 ` [PATCH 11/20] staging: gasket: fix comment syntax in apex.h Todd Poynor
2018-07-20 3:49 ` [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code Todd Poynor
2018-07-20 3:49 ` [PATCH 13/20] staging: gasket: gasket_mmap use PAGE_MASK Todd Poynor
2018-07-20 3:49 ` [PATCH 14/20] staging: gasket: remove extra parens in gasket_write_mappable_regions Todd Poynor
2018-07-20 3:49 ` [PATCH 15/20] staging: gasket: fix multi-line comment syntax in gasket_core.h Todd Poynor
2018-07-20 3:49 ` [PATCH 16/20] staging: gasket: always allow root open for write Todd Poynor
2018-07-20 3:49 ` [PATCH 17/20] staging: gasket: top ioctl handler add __user annotations Todd Poynor
2018-07-20 3:49 ` [PATCH 18/20] staging: gasket: apex ioctl " Todd Poynor
2018-07-20 3:49 ` [PATCH 19/20] staging: gasket: common ioctl dispatcher " Todd Poynor
2018-07-20 3:49 ` [PATCH 20/20] staging: gasket: common ioctls " Todd Poynor
2018-07-21 6:51 ` [PATCH 00/20 v4] staging: gasket: sundry fixes and fixups Greg Kroah-Hartman
2018-07-21 12:56 [PATCH 00/14] staging: gasket: assorted cleanups Todd Poynor
2018-07-21 12:57 ` [PATCH 12/20] staging: gasket: remove unnecessary parens in page table code Todd Poynor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).