* Re: [PATCH] staging: iio: frequency: ad9834: use guard() for mutex locking
From: Joshua Crofts @ 2026-06-25 12:43 UTC (permalink / raw)
To: Batu Ada Tutkun
Cc: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
Greg Kroah-Hartman, linux-iio, linux-staging, linux-kernel
In-Reply-To: <20260625120456.1267-1-batuadatutkun@gmail.com>
On Thu, 25 Jun 2026 15:04:55 +0300
Batu Ada Tutkun <batuadatutkun@gmail.com> wrote:
> @@ -17,6 +17,7 @@
> #include <linux/regulator/consumer.h>
> #include <linux/err.h>
> #include <linux/module.h>
> +#include <linux/mutex.h>
> #include <asm/div64.h>
You're definitely developing against an old tree - this won't
apply cleanly :( Please update your branch.
> #include <linux/iio/iio.h>
> @@ -152,7 +153,7 @@ static ssize_t ad9834_write(struct device *dev,
> if (ret)
> return ret;
>
> - mutex_lock(&st->lock);
> + guard(mutex)(&st->lock);
Blank line here.
> switch ((u32)this_attr->address) {
--
Kind regards
CJD
^ permalink raw reply
* Re: [PATCH] staging: iio: frequency: ad9834: use guard() for mutex locking
From: Greg Kroah-Hartman @ 2026-06-25 12:40 UTC (permalink / raw)
To: Batu Ada Tutkun
Cc: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
linux-iio, linux-staging, linux-kernel
In-Reply-To: <20260625120456.1267-1-batuadatutkun@gmail.com>
On Thu, Jun 25, 2026 at 03:04:55PM +0300, Batu Ada Tutkun wrote:
> Replace manual mutex_lock()/mutex_unlock() pairs with guard(mutex) in
> ad9834_write() and ad9834_store_wavetype(). The mutex is now released
> automatically when each function returns, removing the need for
> explicit unlock calls.
You only need to do this for new code, no need to change existing code
unless you are fixing a bug by using guard().
thanks,
greg k-h
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned vmem writes when txbuf is byte-offset
From: kernel test robot @ 2026-06-25 13:20 UTC (permalink / raw)
To: suryasaimadhu, andy
Cc: oe-kbuild-all, gregkh, dri-devel, linux-fbdev, linux-staging,
linux-kernel, suryasaimadhu
In-Reply-To: <20260625110237.304435-1-suryasaimadhu369@gmail.com>
Hi suryasaimadhu,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/suryasaimadhu/staging-fbtft-fix-unaligned-vmem-writes-when-txbuf-is-byte-offset/20260625-190423
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260625110237.304435-1-suryasaimadhu369%40gmail.com
patch subject: [PATCH] staging: fbtft: fix unaligned vmem writes when txbuf is byte-offset
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20260625/202606252119.rClVa8On-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260625/202606252119.rClVa8On-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606252119.rClVa8On-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/staging/fbtft/fbtft-bus.c: In function 'fbtft_write_vmem16_bus8':
>> drivers/staging/fbtft/fbtft-bus.c:157:25: error: implicit declaration of function 'put_unaligned' [-Wimplicit-function-declaration]
157 | put_unaligned(cpu_to_be16(vmem16[i]), &txbuf16[i]);
| ^~~~~~~~~~~~~
vim +/put_unaligned +157 drivers/staging/fbtft/fbtft-bus.c
113
114 /*****************************************************************************
115 *
116 * int (*write_vmem)(struct fbtft_par *par);
117 *
118 *****************************************************************************/
119
120 /* 16 bit pixel over 8-bit databus */
121 int fbtft_write_vmem16_bus8(struct fbtft_par *par, size_t offset, size_t len)
122 {
123 u16 *vmem16;
124 __be16 *txbuf16 = par->txbuf.buf;
125 size_t remain;
126 size_t to_copy;
127 size_t tx_array_size;
128 int i;
129 int ret = 0;
130 size_t startbyte_size = 0;
131
132 remain = len / 2;
133 vmem16 = (u16 *)(par->info->screen_buffer + offset);
134
135 gpiod_set_value(par->gpio.dc, 1);
136
137 /* non buffered write */
138 if (!par->txbuf.buf)
139 return par->fbtftops.write(par, vmem16, len);
140
141 /* buffered write */
142 tx_array_size = par->txbuf.len / 2;
143
144 if (par->startbyte) {
145 txbuf16 = par->txbuf.buf + 1;
146 tx_array_size -= 2;
147 *(u8 *)(par->txbuf.buf) = par->startbyte | 0x2;
148 startbyte_size = 1;
149 }
150
151 while (remain) {
152 to_copy = min(tx_array_size, remain);
153 dev_dbg(par->info->device, "to_copy=%zu, remain=%zu\n",
154 to_copy, remain - to_copy);
155
156 for (i = 0; i < to_copy; i++)
> 157 put_unaligned(cpu_to_be16(vmem16[i]), &txbuf16[i]);
158
159 vmem16 = vmem16 + to_copy;
160 ret = par->fbtftops.write(par, par->txbuf.buf,
161 startbyte_size + to_copy * 2);
162 if (ret < 0)
163 return ret;
164 remain -= to_copy;
165 }
166
167 return ret;
168 }
169 EXPORT_SYMBOL(fbtft_write_vmem16_bus8);
170
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned vmem writes when txbuf is byte-offset
From: kernel test robot @ 2026-06-25 13:53 UTC (permalink / raw)
To: suryasaimadhu, andy
Cc: llvm, oe-kbuild-all, gregkh, dri-devel, linux-fbdev,
linux-staging, linux-kernel, suryasaimadhu
In-Reply-To: <20260625110237.304435-1-suryasaimadhu369@gmail.com>
Hi suryasaimadhu,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/suryasaimadhu/staging-fbtft-fix-unaligned-vmem-writes-when-txbuf-is-byte-offset/20260625-190423
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260625110237.304435-1-suryasaimadhu369%40gmail.com
patch subject: [PATCH] staging: fbtft: fix unaligned vmem writes when txbuf is byte-offset
config: hexagon-allmodconfig (https://download.01.org/0day-ci/archive/20260625/202606252144.F56jkpaD-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 6cc609bb250b21b47fc7d394b4019101e9983597)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260625/202606252144.F56jkpaD-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606252144.F56jkpaD-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/staging/fbtft/fbtft-bus.c:157:4: error: call to undeclared function 'put_unaligned'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
157 | put_unaligned(cpu_to_be16(vmem16[i]), &txbuf16[i]);
| ^
1 error generated.
vim +/put_unaligned +157 drivers/staging/fbtft/fbtft-bus.c
113
114 /*****************************************************************************
115 *
116 * int (*write_vmem)(struct fbtft_par *par);
117 *
118 *****************************************************************************/
119
120 /* 16 bit pixel over 8-bit databus */
121 int fbtft_write_vmem16_bus8(struct fbtft_par *par, size_t offset, size_t len)
122 {
123 u16 *vmem16;
124 __be16 *txbuf16 = par->txbuf.buf;
125 size_t remain;
126 size_t to_copy;
127 size_t tx_array_size;
128 int i;
129 int ret = 0;
130 size_t startbyte_size = 0;
131
132 remain = len / 2;
133 vmem16 = (u16 *)(par->info->screen_buffer + offset);
134
135 gpiod_set_value(par->gpio.dc, 1);
136
137 /* non buffered write */
138 if (!par->txbuf.buf)
139 return par->fbtftops.write(par, vmem16, len);
140
141 /* buffered write */
142 tx_array_size = par->txbuf.len / 2;
143
144 if (par->startbyte) {
145 txbuf16 = par->txbuf.buf + 1;
146 tx_array_size -= 2;
147 *(u8 *)(par->txbuf.buf) = par->startbyte | 0x2;
148 startbyte_size = 1;
149 }
150
151 while (remain) {
152 to_copy = min(tx_array_size, remain);
153 dev_dbg(par->info->device, "to_copy=%zu, remain=%zu\n",
154 to_copy, remain - to_copy);
155
156 for (i = 0; i < to_copy; i++)
> 157 put_unaligned(cpu_to_be16(vmem16[i]), &txbuf16[i]);
158
159 vmem16 = vmem16 + to_copy;
160 ret = par->fbtftops.write(par, par->txbuf.buf,
161 startbyte_size + to_copy * 2);
162 if (ret < 0)
163 return ret;
164 remain -= to_copy;
165 }
166
167 return ret;
168 }
169 EXPORT_SYMBOL(fbtft_write_vmem16_bus8);
170
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [PATCH] staging: vme_user: bound slave windows to DMA buffers
From: Yousef Alhouseen @ 2026-06-25 13:54 UTC (permalink / raw)
To: Dan Carpenter, Greg Kroah-Hartman; +Cc: linux-staging, linux-kernel
In-Reply-To: <aj0X1ltvBoJDEbES@stanley.mountain>
Hi Dan, Greg,
Thanks for going through it. Agreed, this version mixes separate fixes
and the helper is the wrong shape. Please drop it.
I found it while reading the vme_user ioctl and read/write paths.
Testing was only git diff --check and checkpatch; I don't have VME
hardware.
I'll rework from the core/bridge side and split out anything that
still holds up.
Thanks,
Yousef
On Thu, 25 Jun 2026 14:58:14 +0300, Dan Carpenter <error27@gmail.com> wrote:
> On Thu, Jun 25, 2026 at 02:51:55PM +0300, Dan Carpenter wrote:
> > There are two bug fixes in this patch:
> >
> > 1) The driver allows you to set any value for size.
> > 2) The vme_get_size() function returns zero on error but nothing
> > checks for error.
> >
> > There is a third bug as well which is not addressed.
> >
> > 3) The slave.vme_addr is not checked and it allows you to read/write
> > to any memory.
> >
> > It sort of looks like bugs 1 and 2 only affect
> > drivers/staging/vme_user/vme_fake.c.
>
> Actually, no. The bugs seem to affect drivers/staging/vme_user/vme_tsi148.c
> but the variables are stored to registers instead of variables so it
> was a little more convoluted.
>
> regards,
> dan carpenter
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned vmem writes when txbuf is byte-offset
From: Andy Shevchenko @ 2026-06-25 13:59 UTC (permalink / raw)
To: suryasaimadhu
Cc: andy, gregkh, dri-devel, linux-fbdev, linux-staging, linux-kernel
In-Reply-To: <20260625110237.304435-1-suryasaimadhu369@gmail.com>
On Thu, Jun 25, 2026 at 07:02:37PM +0800, suryasaimadhu wrote:
> fbtft_write_vmem16_bus8() and fb_ra8875's write_vmem16_bus8() offset
> txbuf16 by one byte for a command/start prefix, then store 16-bit pixel
> data via txbuf16[i]. On strict-alignment architectures this can fault
> the same way as the write_reg path fixed in the previous patch.
.write_reg()
Can you provide a real world example of the failure?
> Use put_unaligned() for these stores.
Sounds like a fix without Fixes tag.
> Signed-off-by: suryasaimadhu <suryasaimadhu369@gmail.com>
Use your name in accordance with your official documents.
...
> +++ b/drivers/staging/fbtft/fb_ra8875.c
> @@ -10,6 +10,7 @@
> #include <linux/delay.h>
>
You should move this blank line to be...
> #include <linux/gpio/consumer.h>
> +#include <linux/unaligned.h>
...here.
> #include "fbtft.h"
...
> #define DRVNAME "fb_ra8875"
Are other drivers also being affected?
...
> +++ b/drivers/staging/fbtft/fbtft-bus.c
Also needs linux/unaligned.h.
> + put_unaligned(cpu_to_be16(vmem16[i]), &txbuf16[i]);
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned access and txbuf safety issues
From: Andy Shevchenko @ 2026-06-25 14:05 UTC (permalink / raw)
To: suryasaimadhu
Cc: andy, gregkh, dri-devel, linux-fbdev, linux-staging, linux-kernel
In-Reply-To: <20260625114215.325973-1-suryasaimadhu369@gmail.com>
On Thu, Jun 25, 2026 at 07:42:15PM +0800, suryasaimadhu wrote:
> This patch addresses several pre-existing issues in the fbtft driver:
>
> 1. define_fbtft_write_reg(): when par->startbyte is set, buf is
> advanced by one byte creating a misaligned pointer for 16-bit types.
> Use put_unaligned() for register writes and fix the SPI transfer
> size from len * (sizeof(data_type) + offset) to
> len * sizeof(data_type) + offset.
>
> 2. fbtft_write_vmem16_bus8() and fb_ra8875 write_vmem16_bus8(): same
> unaligned 16-bit stores when txbuf is byte-offset for a start
> prefix. Use put_unaligned() for pixel data copies.
>
> 3. tx_array_size underflow: both vmem helpers subtract 2 from
> tx_array_size when a startbyte prefix is used. A small txbuflen
> device property causes unsigned underflow and out-of-bounds heap
> writes. Fall back to the non-buffered write path when the buffer
> is too small.
>
> 4. fb_ra8875 write_vmem16_bus8(): missing NULL check for
> par->txbuf.buf, which remains NULL on big-endian when txbuflen is
> 0 because the PAGE_SIZE fallback is little-endian only. Fall back
> to direct write when the buffer is missing.
>
> Also replace empty modifier arguments in define_fbtft_write_reg() with
> a no-op macro to fix checkpatch warnings.
This looks like v2 of the thing without changelog and addressing the comments
that have been given against v1. I'm not even going to review that.
Please, consolidate feedback, take your time to study process documentation
(Documentation/process/* in the Linux kernel source tree) and try again a bit
later.
(The fix and report are valuable in general, thanks for doing that.)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned access and buffer size when startbyte is used
From: Andy Shevchenko @ 2026-06-25 14:08 UTC (permalink / raw)
To: suryasaimadhu
Cc: andy, gregkh, dri-devel, linux-fbdev, linux-staging, linux-kernel
In-Reply-To: <20260625103041.281190-1-suryasaimadhu369@gmail.com>
On Thu, Jun 25, 2026 at 06:30:41PM +0800, suryasaimadhu wrote:
> When par->startbyte is non-zero, buf is advanced by one byte creating
> an unaligned pointer for 16-bit types (u16, __be16). Dereferencing this
> unaligned pointer can cause a kernel panic on strict-alignment
> architectures.
>
> Fix by using put_unaligned() instead of direct pointer dereference.
>
> Also fix incorrect buffer size calculation in fbtft_write_buf_dc() call:
> len * (sizeof(data_type) + offset) /* wrong: multiplies offset by len */
> len * sizeof(data_type) + offset /* correct: one startbyte +
> len items */
Same comments as per your other patch contributions. Make it cleaner next time.
So it seem a v2 should be a mini-series with fixes for different
issues/drivers/et cetera.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH] staging: fbtft: replace empty modifier argument with no-op macro
From: Andy Shevchenko @ 2026-06-25 14:09 UTC (permalink / raw)
To: Sai Madhu
Cc: Dan Carpenter, andy, gregkh, dri-devel, linux-fbdev,
linux-staging, linux-kernel
In-Reply-To: <CAB0uMAeMOV4Xhq2cNVjxne89yqF8vdubM8-OpPYGK4f4yBLMNw@mail.gmail.com>
On Thu, Jun 25, 2026 at 04:00:24PM +0530, Sai Madhu wrote:
First of all, do not top-post!
> Thank you for the feedback. I understand and will drop this patch.
>
> I have also noticed two pre-existing bugs in the same file
> (unaligned access and buffer size calculation when startbyte is used)
> and have sent a separate patch to fix those.
> On Thu, 25 Jun 2026 at 15:58, Dan Carpenter <error27@gmail.com> wrote:
> > On Thu, Jun 25, 2026 at 05:27:21PM +0800, suryasaimadhu wrote:
> > I don't hate this patch, but I think we've decided to leave this
> > as-is.
Yep. as Dan said,
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* [PATCH] staging: rtl8723bs: rename shadowed variable
From: Aditya Tipre @ 2026-06-25 15:16 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Ethan Tidmore, Rohan Tripathi, Nikolay Kulikov, Dan Carpenter,
Minu Jin, linux-staging, linux-kernel, Aditya Tipre
The inner variable ie in update_bcn_erpinfo_ie() shadows an outer local
variable of the same name. This triggers a -Wshadow warning.
Rename the inner variable to erp_ie to remove the warning
and make the code less ambiguous.
No functional change.
Signed-off-by: Aditya Tipre <tipreaditya@gmail.com>
---
drivers/staging/rtl8723bs/core/rtw_ap.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_ap.c b/drivers/staging/rtl8723bs/core/rtw_ap.c
index 065850a9e894..a86685922913 100644
--- a/drivers/staging/rtl8723bs/core/rtw_ap.c
+++ b/drivers/staging/rtl8723bs/core/rtw_ap.c
@@ -1307,20 +1307,21 @@ static void update_bcn_erpinfo_ie(struct adapter *padapter)
&len,
(pnetwork->ie_length - _BEACON_IE_OFFSET_));
if (p && len > 0) {
- struct ndis_80211_var_ie *ie = (struct ndis_80211_var_ie *)p;
+ struct ndis_80211_var_ie *erp_ie = (struct ndis_80211_var_ie *)p;
if (pmlmepriv->num_sta_non_erp == 1)
- ie->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT | RTW_ERP_INFO_USE_PROTECTION;
+ erp_ie->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT |
+ RTW_ERP_INFO_USE_PROTECTION;
else
- ie->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT |
- RTW_ERP_INFO_USE_PROTECTION);
+ erp_ie->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT |
+ RTW_ERP_INFO_USE_PROTECTION);
if (pmlmepriv->num_sta_no_short_preamble > 0)
- ie->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
+ erp_ie->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
else
- ie->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
+ erp_ie->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
- ERP_IE_handler(padapter, ie);
+ ERP_IE_handler(padapter, erp_ie);
}
}
--
2.54.0
^ permalink raw reply related
* [PATCH] staging: rtl8723bs: fix OOB reads in rtw_get_wps_ie()
From: Moksh Panicker @ 2026-06-25 20:29 UTC (permalink / raw)
To: gregkh; +Cc: linux-staging, linux-kernel, stable, skhan, Moksh Panicker
rtw_get_wps_ie() iterates over IE data from network frames without
validating that the IE header and payload fit within the remaining
buffer before reading them. Specifically:
- in_ie[cnt + 1] is read without checking cnt + 1 < in_len
- memcmp(&in_ie[cnt + 2], ...) accesses cnt + 2 without bounds check
- in_ie[cnt + 1] is used as length without verifying payload fits
Add bounds checks at the top of the loop body to break early if fewer
than 2 bytes remain for the IE header, or if the declared payload
extends past the end of the buffer. Also require at least 4 bytes of
payload before comparing the WPS OUI.
Fixes: 554c0a3abf21 ("staging: rtl8723bs: add r8723bs driver")
Cc: stable@vger.kernel.org
Signed-off-by: Moksh Panicker <mokshpanicker.7@gmail.com>
---
drivers/staging/rtl8723bs/core/rtw_ieee80211.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_ieee80211.c b/drivers/staging/rtl8723bs/core/rtw_ieee80211.c
index d0bbe1bb979c..82dc0ad27e79 100644
--- a/drivers/staging/rtl8723bs/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723bs/core/rtw_ieee80211.c
@@ -660,7 +660,14 @@ u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
while (cnt < in_len) {
eid = in_ie[cnt];
- if ((eid == WLAN_EID_VENDOR_SPECIFIC) && (!memcmp(&in_ie[cnt + 2], wps_oui, 4))) {
+ if (cnt + 2 > in_len)
+ break;
+
+ if (in_ie[cnt + 1] + 2 > in_len - cnt)
+ break;
+
+ if ((eid == WLAN_EID_VENDOR_SPECIFIC) && (in_ie[cnt + 1] >= 4) &&
+ (!memcmp(&in_ie[cnt + 2], wps_oui, 4))) {
wpsie_ptr = &in_ie[cnt];
if (wps_ie)
--
2.34.1
^ permalink raw reply related
* Re: [PATCH] staging: sm750fb: make g_fbmode array const pointer const
From: kernel test robot @ 2026-06-25 21:51 UTC (permalink / raw)
To: Shravya, sudipm.mukherjee, teddy.wang, gregkh
Cc: llvm, oe-kbuild-all, linux-fbdev, linux-staging, linux-kernel,
Shravya
In-Reply-To: <20260624233907.67886-1-shravy112@gmail.com>
Hi Shravya,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/Shravya/staging-sm750fb-make-g_fbmode-array-const-pointer-const/20260625-074236
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260624233907.67886-1-shravy112%40gmail.com
patch subject: [PATCH] staging: sm750fb: make g_fbmode array const pointer const
config: riscv-allyesconfig (https://download.01.org/0day-ci/archive/20260626/202606260516.p4J1BHu3-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 6cc609bb250b21b47fc7d394b4019101e9983597)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260626/202606260516.p4J1BHu3-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606260516.p4J1BHu3-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/staging/sm750fb/sm750.c:773:19: error: cannot assign to variable 'g_fbmode' with const-qualified type 'const char *const[2]'
773 | g_fbmode[index] = g_def_fbmode;
| ~~~~~~~~~~~~~~~ ^
drivers/staging/sm750fb/sm750.c:24:27: note: variable 'g_fbmode' declared const here
24 | static const char * const g_fbmode[] = {NULL, NULL};
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/sm750fb/sm750.c:775:20: error: cannot assign to variable 'g_fbmode' with const-qualified type 'const char *const[2]'
775 | g_fbmode[index] = g_fbmode[0];
| ~~~~~~~~~~~~~~~ ^
drivers/staging/sm750fb/sm750.c:24:27: note: variable 'g_fbmode' declared const here
24 | static const char * const g_fbmode[] = {NULL, NULL};
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/sm750fb/sm750.c:884:17: error: cannot assign to variable 'g_fbmode' with const-qualified type 'const char *const[2]'
884 | g_fbmode[0] = opt;
| ~~~~~~~~~~~ ^
drivers/staging/sm750fb/sm750.c:24:27: note: variable 'g_fbmode' declared const here
24 | static const char * const g_fbmode[] = {NULL, NULL};
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/sm750fb/sm750.c:888:17: error: cannot assign to variable 'g_fbmode' with const-qualified type 'const char *const[2]'
888 | g_fbmode[1] = opt;
| ~~~~~~~~~~~ ^
drivers/staging/sm750fb/sm750.c:24:27: note: variable 'g_fbmode' declared const here
24 | static const char * const g_fbmode[] = {NULL, NULL};
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
4 errors generated.
vim +773 drivers/staging/sm750fb/sm750.c
81dee67e215b23 Sudip Mukherjee 2015-03-03 707
81dee67e215b23 Sudip Mukherjee 2015-03-03 708 static int lynxfb_set_fbinfo(struct fb_info *info, int index)
81dee67e215b23 Sudip Mukherjee 2015-03-03 709 {
81dee67e215b23 Sudip Mukherjee 2015-03-03 710 int i;
81dee67e215b23 Sudip Mukherjee 2015-03-03 711 struct lynxfb_par *par;
e359b6a863e19f Mike Rapoport 2015-10-26 712 struct sm750_dev *sm750_dev;
81dee67e215b23 Sudip Mukherjee 2015-03-03 713 struct lynxfb_crtc *crtc;
81dee67e215b23 Sudip Mukherjee 2015-03-03 714 struct lynxfb_output *output;
81dee67e215b23 Sudip Mukherjee 2015-03-03 715 struct fb_var_screeninfo *var;
81dee67e215b23 Sudip Mukherjee 2015-03-03 716 struct fb_fix_screeninfo *fix;
81dee67e215b23 Sudip Mukherjee 2015-03-03 717
81dee67e215b23 Sudip Mukherjee 2015-03-03 718 const struct fb_videomode *pdb[] = {
81dee67e215b23 Sudip Mukherjee 2015-03-03 719 lynx750_ext, NULL, vesa_modes,
81dee67e215b23 Sudip Mukherjee 2015-03-03 720 };
81dee67e215b23 Sudip Mukherjee 2015-03-03 721 int cdb[] = {ARRAY_SIZE(lynx750_ext), 0, VESA_MODEDB_SIZE};
d0856045f0e9fc Hungyu Lin 2026-04-01 722 static const char * const fix_id[2] = {
81dee67e215b23 Sudip Mukherjee 2015-03-03 723 "sm750_fb1", "sm750_fb2",
81dee67e215b23 Sudip Mukherjee 2015-03-03 724 };
81dee67e215b23 Sudip Mukherjee 2015-03-03 725
81dee67e215b23 Sudip Mukherjee 2015-03-03 726 int ret, line_length;
81dee67e215b23 Sudip Mukherjee 2015-03-03 727
81dee67e215b23 Sudip Mukherjee 2015-03-03 728 ret = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 729 par = (struct lynxfb_par *)info->par;
e359b6a863e19f Mike Rapoport 2015-10-26 730 sm750_dev = par->dev;
81dee67e215b23 Sudip Mukherjee 2015-03-03 731 crtc = &par->crtc;
81dee67e215b23 Sudip Mukherjee 2015-03-03 732 output = &par->output;
81dee67e215b23 Sudip Mukherjee 2015-03-03 733 var = &info->var;
81dee67e215b23 Sudip Mukherjee 2015-03-03 734 fix = &info->fix;
81dee67e215b23 Sudip Mukherjee 2015-03-03 735
81dee67e215b23 Sudip Mukherjee 2015-03-03 736 /* set index */
81dee67e215b23 Sudip Mukherjee 2015-03-03 737 par->index = index;
81dee67e215b23 Sudip Mukherjee 2015-03-03 738 output->channel = &crtc->channel;
81dee67e215b23 Sudip Mukherjee 2015-03-03 739 sm750fb_set_drv(par);
81dee67e215b23 Sudip Mukherjee 2015-03-03 740
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 741 /*
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 742 * set current cursor variable and proc pointer,
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 743 * must be set after crtc member initialized
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 744 */
fdc234d85210d9 Benjamin Philip 2021-07-28 745 crtc->cursor.offset = crtc->o_screen + crtc->vidmem_size - 1024;
e359b6a863e19f Mike Rapoport 2015-10-26 746 crtc->cursor.mmio = sm750_dev->pvReg +
e359b6a863e19f Mike Rapoport 2015-10-26 747 0x800f0 + (int)crtc->channel * 0x140;
81dee67e215b23 Sudip Mukherjee 2015-03-03 748
cd33da26036ea5 Christopher Carbone 2022-08-23 749 crtc->cursor.max_h = 64;
cd33da26036ea5 Christopher Carbone 2022-08-23 750 crtc->cursor.max_w = 64;
39f9137268ee3d Benjamin Philip 2021-07-26 751 crtc->cursor.size = crtc->cursor.max_h * crtc->cursor.max_w * 2 / 8;
f50b4602fea62f Jennifer Guo 2026-05-09 752 crtc->cursor.vstart = sm750_dev->vmem + crtc->cursor.offset;
81dee67e215b23 Sudip Mukherjee 2015-03-03 753
3de08a2d14ff8c Lorenzo Stoakes 2015-03-20 754 memset_io(crtc->cursor.vstart, 0, crtc->cursor.size);
f7c8a046577e09 Thomas Zimmermann 2023-11-27 755 if (!g_hwcursor)
52d0744d751d8f Arnd Bergmann 2016-11-09 756 sm750_hw_cursor_disable(&crtc->cursor);
81dee67e215b23 Sudip Mukherjee 2015-03-03 757
81dee67e215b23 Sudip Mukherjee 2015-03-03 758 /* set info->fbops, must be set before fb_find_mode */
e359b6a863e19f Mike Rapoport 2015-10-26 759 if (!sm750_dev->accel_off) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 760 /* use 2d acceleration */
f7c8a046577e09 Thomas Zimmermann 2023-11-27 761 if (!g_hwcursor)
f7c8a046577e09 Thomas Zimmermann 2023-11-27 762 info->fbops = &lynxfb_ops_accel;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 763 else
f7c8a046577e09 Thomas Zimmermann 2023-11-27 764 info->fbops = &lynxfb_ops_accel_with_cursor;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 765 } else {
f7c8a046577e09 Thomas Zimmermann 2023-11-27 766 if (!g_hwcursor)
81dee67e215b23 Sudip Mukherjee 2015-03-03 767 info->fbops = &lynxfb_ops;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 768 else
f7c8a046577e09 Thomas Zimmermann 2023-11-27 769 info->fbops = &lynxfb_ops_with_cursor;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 770 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 771
81dee67e215b23 Sudip Mukherjee 2015-03-03 772 if (!g_fbmode[index]) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 @773 g_fbmode[index] = g_def_fbmode;
81dee67e215b23 Sudip Mukherjee 2015-03-03 774 if (index)
81dee67e215b23 Sudip Mukherjee 2015-03-03 775 g_fbmode[index] = g_fbmode[0];
81dee67e215b23 Sudip Mukherjee 2015-03-03 776 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 777
81dee67e215b23 Sudip Mukherjee 2015-03-03 778 for (i = 0; i < 3; i++) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 779 ret = fb_find_mode(var, info, g_fbmode[index],
81dee67e215b23 Sudip Mukherjee 2015-03-03 780 pdb[i], cdb[i], NULL, 8);
81dee67e215b23 Sudip Mukherjee 2015-03-03 781
db7fb3588ab492 Artem Lytkin 2026-02-23 782 if (ret == 1 || ret == 2)
81dee67e215b23 Sudip Mukherjee 2015-03-03 783 break;
81dee67e215b23 Sudip Mukherjee 2015-03-03 784 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 785
81dee67e215b23 Sudip Mukherjee 2015-03-03 786 /* set par */
81dee67e215b23 Sudip Mukherjee 2015-03-03 787 par->info = info;
81dee67e215b23 Sudip Mukherjee 2015-03-03 788
81dee67e215b23 Sudip Mukherjee 2015-03-03 789 /* set info */
e3a3f9f5123683 Mike Rapoport 2015-10-26 790 line_length = ALIGN((var->xres_virtual * var->bits_per_pixel / 8),
e3a3f9f5123683 Mike Rapoport 2015-10-26 791 crtc->line_pad);
81dee67e215b23 Sudip Mukherjee 2015-03-03 792
81dee67e215b23 Sudip Mukherjee 2015-03-03 793 info->pseudo_palette = &par->pseudo_palette[0];
cc59bde1c920ab Benjamin Philip 2021-07-28 794 info->screen_base = crtc->v_screen;
81dee67e215b23 Sudip Mukherjee 2015-03-03 795 info->screen_size = line_length * var->yres_virtual;
81dee67e215b23 Sudip Mukherjee 2015-03-03 796
81dee67e215b23 Sudip Mukherjee 2015-03-03 797 /* set info->fix */
81dee67e215b23 Sudip Mukherjee 2015-03-03 798 fix->type = FB_TYPE_PACKED_PIXELS;
81dee67e215b23 Sudip Mukherjee 2015-03-03 799 fix->type_aux = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 800 fix->xpanstep = crtc->xpanstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 801 fix->ypanstep = crtc->ypanstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 802 fix->ywrapstep = crtc->ywrapstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 803 fix->accel = FB_ACCEL_SMI;
81dee67e215b23 Sudip Mukherjee 2015-03-03 804
8c475735085a7d Tim Wassink 2025-12-21 805 strscpy(fix->id, fix_id[index], sizeof(fix->id));
81dee67e215b23 Sudip Mukherjee 2015-03-03 806
fdc234d85210d9 Benjamin Philip 2021-07-28 807 fix->smem_start = crtc->o_screen + sm750_dev->vidmem_start;
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 808 /*
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 809 * according to mmap experiment from user space application,
81dee67e215b23 Sudip Mukherjee 2015-03-03 810 * fix->mmio_len should not larger than virtual size
81dee67e215b23 Sudip Mukherjee 2015-03-03 811 * (xres_virtual x yres_virtual x ByPP)
81dee67e215b23 Sudip Mukherjee 2015-03-03 812 * Below line maybe buggy when user mmap fb dev node and write
81dee67e215b23 Sudip Mukherjee 2015-03-03 813 * data into the bound over virtual size
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 814 */
81dee67e215b23 Sudip Mukherjee 2015-03-03 815 fix->smem_len = crtc->vidmem_size;
81dee67e215b23 Sudip Mukherjee 2015-03-03 816 info->screen_size = fix->smem_len;
81dee67e215b23 Sudip Mukherjee 2015-03-03 817 fix->line_length = line_length;
e359b6a863e19f Mike Rapoport 2015-10-26 818 fix->mmio_start = sm750_dev->vidreg_start;
e359b6a863e19f Mike Rapoport 2015-10-26 819 fix->mmio_len = sm750_dev->vidreg_size;
b610e1193a917f Matej Dujava 2020-04-30 820
b610e1193a917f Matej Dujava 2020-04-30 821 lynxfb_set_visual_mode(info);
81dee67e215b23 Sudip Mukherjee 2015-03-03 822
81dee67e215b23 Sudip Mukherjee 2015-03-03 823 /* set var */
81dee67e215b23 Sudip Mukherjee 2015-03-03 824 var->activate = FB_ACTIVATE_NOW;
81dee67e215b23 Sudip Mukherjee 2015-03-03 825 var->accel_flags = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 826 var->vmode = FB_VMODE_NONINTERLACED;
81dee67e215b23 Sudip Mukherjee 2015-03-03 827
61c507cf652da1 Michel von Czettritz 2015-03-26 828 ret = fb_alloc_cmap(&info->cmap, 256, 0);
61c507cf652da1 Michel von Czettritz 2015-03-26 829 if (ret < 0) {
fbab250eb51d6d Artem Lytkin 2026-02-07 830 dev_err(info->device, "Could not allocate memory for cmap.\n");
81dee67e215b23 Sudip Mukherjee 2015-03-03 831 goto exit;
81dee67e215b23 Sudip Mukherjee 2015-03-03 832 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 833
81dee67e215b23 Sudip Mukherjee 2015-03-03 834 exit:
81dee67e215b23 Sudip Mukherjee 2015-03-03 835 lynxfb_ops_check_var(var, info);
81dee67e215b23 Sudip Mukherjee 2015-03-03 836 return ret;
81dee67e215b23 Sudip Mukherjee 2015-03-03 837 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 838
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [PATCH] staging: sm750fb: fix const pointer declaration
From: kernel test robot @ 2026-06-26 0:22 UTC (permalink / raw)
To: suryasaimadhu, sudipm.mukherjee, teddy.wang
Cc: oe-kbuild-all, gregkh, linux-fbdev, linux-staging, linux-kernel,
suryasaimadhu
In-Reply-To: <20260625071348.132880-1-suryasaimadhu369@gmail.com>
Hi suryasaimadhu,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/suryasaimadhu/staging-sm750fb-fix-const-pointer-declaration/20260625-151537
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260625071348.132880-1-suryasaimadhu369%40gmail.com
patch subject: [PATCH] staging: sm750fb: fix const pointer declaration
config: i386-buildonly-randconfig-001-20260626 (https://download.01.org/0day-ci/archive/20260626/202606260825.72C9EkKG-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260626/202606260825.72C9EkKG-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606260825.72C9EkKG-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/staging/sm750fb/sm750.c: In function 'lynxfb_set_fbinfo':
>> drivers/staging/sm750fb/sm750.c:773:33: error: assignment of read-only location 'g_fbmode[index]'
773 | g_fbmode[index] = g_def_fbmode;
| ^
drivers/staging/sm750fb/sm750.c:775:41: error: assignment of read-only location 'g_fbmode[index]'
775 | g_fbmode[index] = g_fbmode[0];
| ^
drivers/staging/sm750fb/sm750.c: In function 'sm750fb_setup':
>> drivers/staging/sm750fb/sm750.c:884:45: error: assignment of read-only location 'g_fbmode[0]'
884 | g_fbmode[0] = opt;
| ^
drivers/staging/sm750fb/sm750.c:888:45: error: assignment of read-only location 'g_fbmode[1]'
888 | g_fbmode[1] = opt;
| ^
vim +773 drivers/staging/sm750fb/sm750.c
81dee67e215b23 Sudip Mukherjee 2015-03-03 707
81dee67e215b23 Sudip Mukherjee 2015-03-03 708 static int lynxfb_set_fbinfo(struct fb_info *info, int index)
81dee67e215b23 Sudip Mukherjee 2015-03-03 709 {
81dee67e215b23 Sudip Mukherjee 2015-03-03 710 int i;
81dee67e215b23 Sudip Mukherjee 2015-03-03 711 struct lynxfb_par *par;
e359b6a863e19f Mike Rapoport 2015-10-26 712 struct sm750_dev *sm750_dev;
81dee67e215b23 Sudip Mukherjee 2015-03-03 713 struct lynxfb_crtc *crtc;
81dee67e215b23 Sudip Mukherjee 2015-03-03 714 struct lynxfb_output *output;
81dee67e215b23 Sudip Mukherjee 2015-03-03 715 struct fb_var_screeninfo *var;
81dee67e215b23 Sudip Mukherjee 2015-03-03 716 struct fb_fix_screeninfo *fix;
81dee67e215b23 Sudip Mukherjee 2015-03-03 717
81dee67e215b23 Sudip Mukherjee 2015-03-03 718 const struct fb_videomode *pdb[] = {
81dee67e215b23 Sudip Mukherjee 2015-03-03 719 lynx750_ext, NULL, vesa_modes,
81dee67e215b23 Sudip Mukherjee 2015-03-03 720 };
81dee67e215b23 Sudip Mukherjee 2015-03-03 721 int cdb[] = {ARRAY_SIZE(lynx750_ext), 0, VESA_MODEDB_SIZE};
d0856045f0e9fc Hungyu Lin 2026-04-01 722 static const char * const fix_id[2] = {
81dee67e215b23 Sudip Mukherjee 2015-03-03 723 "sm750_fb1", "sm750_fb2",
81dee67e215b23 Sudip Mukherjee 2015-03-03 724 };
81dee67e215b23 Sudip Mukherjee 2015-03-03 725
81dee67e215b23 Sudip Mukherjee 2015-03-03 726 int ret, line_length;
81dee67e215b23 Sudip Mukherjee 2015-03-03 727
81dee67e215b23 Sudip Mukherjee 2015-03-03 728 ret = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 729 par = (struct lynxfb_par *)info->par;
e359b6a863e19f Mike Rapoport 2015-10-26 730 sm750_dev = par->dev;
81dee67e215b23 Sudip Mukherjee 2015-03-03 731 crtc = &par->crtc;
81dee67e215b23 Sudip Mukherjee 2015-03-03 732 output = &par->output;
81dee67e215b23 Sudip Mukherjee 2015-03-03 733 var = &info->var;
81dee67e215b23 Sudip Mukherjee 2015-03-03 734 fix = &info->fix;
81dee67e215b23 Sudip Mukherjee 2015-03-03 735
81dee67e215b23 Sudip Mukherjee 2015-03-03 736 /* set index */
81dee67e215b23 Sudip Mukherjee 2015-03-03 737 par->index = index;
81dee67e215b23 Sudip Mukherjee 2015-03-03 738 output->channel = &crtc->channel;
81dee67e215b23 Sudip Mukherjee 2015-03-03 739 sm750fb_set_drv(par);
81dee67e215b23 Sudip Mukherjee 2015-03-03 740
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 741 /*
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 742 * set current cursor variable and proc pointer,
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 743 * must be set after crtc member initialized
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 744 */
fdc234d85210d9 Benjamin Philip 2021-07-28 745 crtc->cursor.offset = crtc->o_screen + crtc->vidmem_size - 1024;
e359b6a863e19f Mike Rapoport 2015-10-26 746 crtc->cursor.mmio = sm750_dev->pvReg +
e359b6a863e19f Mike Rapoport 2015-10-26 747 0x800f0 + (int)crtc->channel * 0x140;
81dee67e215b23 Sudip Mukherjee 2015-03-03 748
cd33da26036ea5 Christopher Carbone 2022-08-23 749 crtc->cursor.max_h = 64;
cd33da26036ea5 Christopher Carbone 2022-08-23 750 crtc->cursor.max_w = 64;
39f9137268ee3d Benjamin Philip 2021-07-26 751 crtc->cursor.size = crtc->cursor.max_h * crtc->cursor.max_w * 2 / 8;
f50b4602fea62f Jennifer Guo 2026-05-09 752 crtc->cursor.vstart = sm750_dev->vmem + crtc->cursor.offset;
81dee67e215b23 Sudip Mukherjee 2015-03-03 753
3de08a2d14ff8c Lorenzo Stoakes 2015-03-20 754 memset_io(crtc->cursor.vstart, 0, crtc->cursor.size);
f7c8a046577e09 Thomas Zimmermann 2023-11-27 755 if (!g_hwcursor)
52d0744d751d8f Arnd Bergmann 2016-11-09 756 sm750_hw_cursor_disable(&crtc->cursor);
81dee67e215b23 Sudip Mukherjee 2015-03-03 757
81dee67e215b23 Sudip Mukherjee 2015-03-03 758 /* set info->fbops, must be set before fb_find_mode */
e359b6a863e19f Mike Rapoport 2015-10-26 759 if (!sm750_dev->accel_off) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 760 /* use 2d acceleration */
f7c8a046577e09 Thomas Zimmermann 2023-11-27 761 if (!g_hwcursor)
f7c8a046577e09 Thomas Zimmermann 2023-11-27 762 info->fbops = &lynxfb_ops_accel;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 763 else
f7c8a046577e09 Thomas Zimmermann 2023-11-27 764 info->fbops = &lynxfb_ops_accel_with_cursor;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 765 } else {
f7c8a046577e09 Thomas Zimmermann 2023-11-27 766 if (!g_hwcursor)
81dee67e215b23 Sudip Mukherjee 2015-03-03 767 info->fbops = &lynxfb_ops;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 768 else
f7c8a046577e09 Thomas Zimmermann 2023-11-27 769 info->fbops = &lynxfb_ops_with_cursor;
f7c8a046577e09 Thomas Zimmermann 2023-11-27 770 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 771
81dee67e215b23 Sudip Mukherjee 2015-03-03 772 if (!g_fbmode[index]) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 @773 g_fbmode[index] = g_def_fbmode;
81dee67e215b23 Sudip Mukherjee 2015-03-03 774 if (index)
81dee67e215b23 Sudip Mukherjee 2015-03-03 775 g_fbmode[index] = g_fbmode[0];
81dee67e215b23 Sudip Mukherjee 2015-03-03 776 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 777
81dee67e215b23 Sudip Mukherjee 2015-03-03 778 for (i = 0; i < 3; i++) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 779 ret = fb_find_mode(var, info, g_fbmode[index],
81dee67e215b23 Sudip Mukherjee 2015-03-03 780 pdb[i], cdb[i], NULL, 8);
81dee67e215b23 Sudip Mukherjee 2015-03-03 781
db7fb3588ab492 Artem Lytkin 2026-02-23 782 if (ret == 1 || ret == 2)
81dee67e215b23 Sudip Mukherjee 2015-03-03 783 break;
81dee67e215b23 Sudip Mukherjee 2015-03-03 784 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 785
81dee67e215b23 Sudip Mukherjee 2015-03-03 786 /* set par */
81dee67e215b23 Sudip Mukherjee 2015-03-03 787 par->info = info;
81dee67e215b23 Sudip Mukherjee 2015-03-03 788
81dee67e215b23 Sudip Mukherjee 2015-03-03 789 /* set info */
e3a3f9f5123683 Mike Rapoport 2015-10-26 790 line_length = ALIGN((var->xres_virtual * var->bits_per_pixel / 8),
e3a3f9f5123683 Mike Rapoport 2015-10-26 791 crtc->line_pad);
81dee67e215b23 Sudip Mukherjee 2015-03-03 792
81dee67e215b23 Sudip Mukherjee 2015-03-03 793 info->pseudo_palette = &par->pseudo_palette[0];
cc59bde1c920ab Benjamin Philip 2021-07-28 794 info->screen_base = crtc->v_screen;
81dee67e215b23 Sudip Mukherjee 2015-03-03 795 info->screen_size = line_length * var->yres_virtual;
81dee67e215b23 Sudip Mukherjee 2015-03-03 796
81dee67e215b23 Sudip Mukherjee 2015-03-03 797 /* set info->fix */
81dee67e215b23 Sudip Mukherjee 2015-03-03 798 fix->type = FB_TYPE_PACKED_PIXELS;
81dee67e215b23 Sudip Mukherjee 2015-03-03 799 fix->type_aux = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 800 fix->xpanstep = crtc->xpanstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 801 fix->ypanstep = crtc->ypanstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 802 fix->ywrapstep = crtc->ywrapstep;
81dee67e215b23 Sudip Mukherjee 2015-03-03 803 fix->accel = FB_ACCEL_SMI;
81dee67e215b23 Sudip Mukherjee 2015-03-03 804
8c475735085a7d Tim Wassink 2025-12-21 805 strscpy(fix->id, fix_id[index], sizeof(fix->id));
81dee67e215b23 Sudip Mukherjee 2015-03-03 806
fdc234d85210d9 Benjamin Philip 2021-07-28 807 fix->smem_start = crtc->o_screen + sm750_dev->vidmem_start;
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 808 /*
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 809 * according to mmap experiment from user space application,
81dee67e215b23 Sudip Mukherjee 2015-03-03 810 * fix->mmio_len should not larger than virtual size
81dee67e215b23 Sudip Mukherjee 2015-03-03 811 * (xres_virtual x yres_virtual x ByPP)
81dee67e215b23 Sudip Mukherjee 2015-03-03 812 * Below line maybe buggy when user mmap fb dev node and write
81dee67e215b23 Sudip Mukherjee 2015-03-03 813 * data into the bound over virtual size
d11ac7cbcc266c Sudip Mukherjee 2015-08-07 814 */
81dee67e215b23 Sudip Mukherjee 2015-03-03 815 fix->smem_len = crtc->vidmem_size;
81dee67e215b23 Sudip Mukherjee 2015-03-03 816 info->screen_size = fix->smem_len;
81dee67e215b23 Sudip Mukherjee 2015-03-03 817 fix->line_length = line_length;
e359b6a863e19f Mike Rapoport 2015-10-26 818 fix->mmio_start = sm750_dev->vidreg_start;
e359b6a863e19f Mike Rapoport 2015-10-26 819 fix->mmio_len = sm750_dev->vidreg_size;
b610e1193a917f Matej Dujava 2020-04-30 820
b610e1193a917f Matej Dujava 2020-04-30 821 lynxfb_set_visual_mode(info);
81dee67e215b23 Sudip Mukherjee 2015-03-03 822
81dee67e215b23 Sudip Mukherjee 2015-03-03 823 /* set var */
81dee67e215b23 Sudip Mukherjee 2015-03-03 824 var->activate = FB_ACTIVATE_NOW;
81dee67e215b23 Sudip Mukherjee 2015-03-03 825 var->accel_flags = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 826 var->vmode = FB_VMODE_NONINTERLACED;
81dee67e215b23 Sudip Mukherjee 2015-03-03 827
61c507cf652da1 Michel von Czettritz 2015-03-26 828 ret = fb_alloc_cmap(&info->cmap, 256, 0);
61c507cf652da1 Michel von Czettritz 2015-03-26 829 if (ret < 0) {
fbab250eb51d6d Artem Lytkin 2026-02-07 830 dev_err(info->device, "Could not allocate memory for cmap.\n");
81dee67e215b23 Sudip Mukherjee 2015-03-03 831 goto exit;
81dee67e215b23 Sudip Mukherjee 2015-03-03 832 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 833
81dee67e215b23 Sudip Mukherjee 2015-03-03 834 exit:
81dee67e215b23 Sudip Mukherjee 2015-03-03 835 lynxfb_ops_check_var(var, info);
81dee67e215b23 Sudip Mukherjee 2015-03-03 836 return ret;
81dee67e215b23 Sudip Mukherjee 2015-03-03 837 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 838
81dee67e215b23 Sudip Mukherjee 2015-03-03 839 /* chip specific g_option configuration routine */
700591a9adc8b1 Mike Rapoport 2015-10-26 840 static void sm750fb_setup(struct sm750_dev *sm750_dev, char *src)
81dee67e215b23 Sudip Mukherjee 2015-03-03 841 {
81dee67e215b23 Sudip Mukherjee 2015-03-03 842 char *opt;
81dee67e215b23 Sudip Mukherjee 2015-03-03 843 int swap;
81dee67e215b23 Sudip Mukherjee 2015-03-03 844
81dee67e215b23 Sudip Mukherjee 2015-03-03 845 swap = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 846
cc34db609ff98c Madhumitha Sundar 2026-01-27 847 sm750_dev->init_parm.chip_clk = 0;
cc34db609ff98c Madhumitha Sundar 2026-01-27 848 sm750_dev->init_parm.mem_clk = 0;
cc34db609ff98c Madhumitha Sundar 2026-01-27 849 sm750_dev->init_parm.master_clk = 0;
45a337c12624fc Jennifer Guo 2026-05-09 850 sm750_dev->init_parm.power_mode = 0;
cc34db609ff98c Madhumitha Sundar 2026-01-27 851 sm750_dev->init_parm.setAllEngOff = 0;
45a337c12624fc Jennifer Guo 2026-05-09 852 sm750_dev->init_parm.reset_memory = 1;
81dee67e215b23 Sudip Mukherjee 2015-03-03 853
81dee67e215b23 Sudip Mukherjee 2015-03-03 854 /* defaultly turn g_hwcursor on for both view */
81dee67e215b23 Sudip Mukherjee 2015-03-03 855 g_hwcursor = 3;
81dee67e215b23 Sudip Mukherjee 2015-03-03 856
81dee67e215b23 Sudip Mukherjee 2015-03-03 857 if (!src || !*src) {
c56de0967a658c Elise Lennion 2016-10-31 858 dev_warn(&sm750_dev->pdev->dev, "no specific g_option.\n");
81dee67e215b23 Sudip Mukherjee 2015-03-03 859 goto NO_PARAM;
81dee67e215b23 Sudip Mukherjee 2015-03-03 860 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 861
0fa96e39279988 Sudip Mukherjee 2015-03-10 862 while ((opt = strsep(&src, ":")) != NULL && *opt != 0) {
c56de0967a658c Elise Lennion 2016-10-31 863 dev_info(&sm750_dev->pdev->dev, "opt=%s\n", opt);
c56de0967a658c Elise Lennion 2016-10-31 864 dev_info(&sm750_dev->pdev->dev, "src=%s\n", src);
81dee67e215b23 Sudip Mukherjee 2015-03-03 865
144634a6b42146 Katie Dunne 2017-02-19 866 if (!strncmp(opt, "swap", strlen("swap"))) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 867 swap = 1;
144634a6b42146 Katie Dunne 2017-02-19 868 } else if (!strncmp(opt, "nocrt", strlen("nocrt"))) {
1757d106a9ce8c Mike Rapoport 2015-10-26 869 sm750_dev->nocrt = 1;
144634a6b42146 Katie Dunne 2017-02-19 870 } else if (!strncmp(opt, "36bit", strlen("36bit"))) {
94c938a0c15863 Shubham Chakraborty 2026-04-07 871 sm750_dev->pnltype = SM750_DOUBLE_TFT;
144634a6b42146 Katie Dunne 2017-02-19 872 } else if (!strncmp(opt, "18bit", strlen("18bit"))) {
94c938a0c15863 Shubham Chakraborty 2026-04-07 873 sm750_dev->pnltype = SM750_DUAL_TFT;
144634a6b42146 Katie Dunne 2017-02-19 874 } else if (!strncmp(opt, "24bit", strlen("24bit"))) {
94c938a0c15863 Shubham Chakraborty 2026-04-07 875 sm750_dev->pnltype = SM750_24TFT;
144634a6b42146 Katie Dunne 2017-02-19 876 } else if (!strncmp(opt, "nohwc0", strlen("nohwc0"))) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 877 g_hwcursor &= ~0x1;
144634a6b42146 Katie Dunne 2017-02-19 878 } else if (!strncmp(opt, "nohwc1", strlen("nohwc1"))) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 879 g_hwcursor &= ~0x2;
144634a6b42146 Katie Dunne 2017-02-19 880 } else if (!strncmp(opt, "nohwc", strlen("nohwc"))) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 881 g_hwcursor = 0;
144634a6b42146 Katie Dunne 2017-02-19 882 } else {
81dee67e215b23 Sudip Mukherjee 2015-03-03 883 if (!g_fbmode[0]) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 @884 g_fbmode[0] = opt;
cee9ba1c30d051 Abdul Rauf 2017-01-08 885 dev_info(&sm750_dev->pdev->dev,
cee9ba1c30d051 Abdul Rauf 2017-01-08 886 "find fbmode0 : %s\n", g_fbmode[0]);
81dee67e215b23 Sudip Mukherjee 2015-03-03 887 } else if (!g_fbmode[1]) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 888 g_fbmode[1] = opt;
cee9ba1c30d051 Abdul Rauf 2017-01-08 889 dev_info(&sm750_dev->pdev->dev,
cee9ba1c30d051 Abdul Rauf 2017-01-08 890 "find fbmode1 : %s\n", g_fbmode[1]);
81dee67e215b23 Sudip Mukherjee 2015-03-03 891 } else {
c56de0967a658c Elise Lennion 2016-10-31 892 dev_warn(&sm750_dev->pdev->dev, "How many view you wann set?\n");
81dee67e215b23 Sudip Mukherjee 2015-03-03 893 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 894 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 895 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 896
81dee67e215b23 Sudip Mukherjee 2015-03-03 897 NO_PARAM:
e359b6a863e19f Mike Rapoport 2015-10-26 898 if (sm750_dev->revid != SM750LE_REVISION_ID) {
a3f92cc94c6126 Mike Rapoport 2016-01-17 899 if (sm750_dev->fb_count > 1) {
81dee67e215b23 Sudip Mukherjee 2015-03-03 900 if (swap)
1757d106a9ce8c Mike Rapoport 2015-10-26 901 sm750_dev->dataflow = sm750_dual_swap;
81dee67e215b23 Sudip Mukherjee 2015-03-03 902 else
1757d106a9ce8c Mike Rapoport 2015-10-26 903 sm750_dev->dataflow = sm750_dual_normal;
81dee67e215b23 Sudip Mukherjee 2015-03-03 904 } else {
81dee67e215b23 Sudip Mukherjee 2015-03-03 905 if (swap)
1757d106a9ce8c Mike Rapoport 2015-10-26 906 sm750_dev->dataflow = sm750_simul_sec;
81dee67e215b23 Sudip Mukherjee 2015-03-03 907 else
1757d106a9ce8c Mike Rapoport 2015-10-26 908 sm750_dev->dataflow = sm750_simul_pri;
81dee67e215b23 Sudip Mukherjee 2015-03-03 909 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 910 } else {
81dee67e215b23 Sudip Mukherjee 2015-03-03 911 /* SM750LE only have one crt channel */
1757d106a9ce8c Mike Rapoport 2015-10-26 912 sm750_dev->dataflow = sm750_simul_sec;
81dee67e215b23 Sudip Mukherjee 2015-03-03 913 /* sm750le do not have complex attributes */
1757d106a9ce8c Mike Rapoport 2015-10-26 914 sm750_dev->nocrt = 0;
81dee67e215b23 Sudip Mukherjee 2015-03-03 915 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 916 }
81dee67e215b23 Sudip Mukherjee 2015-03-03 917
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [PATCH] staging: fbtft: fix unaligned access and buffer size when startbyte is used
From: David Laight @ 2026-06-26 6:48 UTC (permalink / raw)
To: suryasaimadhu
Cc: andy, gregkh, dri-devel, linux-fbdev, linux-staging, linux-kernel
In-Reply-To: <20260625103041.281190-1-suryasaimadhu369@gmail.com>
On Thu, 25 Jun 2026 18:30:41 +0800
suryasaimadhu <suryasaimadhu369@gmail.com> wrote:
> When par->startbyte is non-zero, buf is advanced by one byte creating
> an unaligned pointer for 16-bit types (u16, __be16). Dereferencing this
> unaligned pointer can cause a kernel panic on strict-alignment
> architectures.
>
> Fix by using put_unaligned() instead of direct pointer dereference.
>
> Also fix incorrect buffer size calculation in fbtft_write_buf_dc() call:
> len * (sizeof(data_type) + offset) /* wrong: multiplies offset by len */
> len * sizeof(data_type) + offset /* correct: one startbyte +
> len items */
That should probably be a separate patch.
>
> Signed-off-by: suryasaimadhu <suryasaimadhu369@gmail.com>
> ---
> drivers/staging/fbtft/fbtft-bus.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/staging/fbtft/fbtft-bus.c b/drivers/staging/fbtft/fbtft-bus.c
> index 2169f8d1d..cfcf4d7e7 100644
> --- a/drivers/staging/fbtft/fbtft-bus.c
> +++ b/drivers/staging/fbtft/fbtft-bus.c
> @@ -4,6 +4,7 @@
> #include <linux/gpio/consumer.h>
> #include <linux/spi/spi.h>
> #include "fbtft.h"
> +#include <linux/unaligned.h>
>
> /*****************************************************************************
> *
> @@ -40,7 +41,7 @@ void func(struct fbtft_par *par, int len, ...) \
I'd consider changing that to:
func(struct fbtft_par *par, int len, u8 cmd, ...)
and probably reducing len by one.
It makes it more obvious that the first parameter is mandatory and the ... is
associated data.
David
> offset = 1; \
> } \
> \
> - *buf = modifier((data_type)va_arg(args, unsigned int)); \
> + put_unaligned(modifier((data_type)va_arg(args, unsigned int)), buf); \
> ret = fbtft_write_buf_dc(par, par->buf, sizeof(data_type) + offset, \
> 0); \
> if (ret < 0) \
> @@ -52,11 +53,13 @@ void func(struct fbtft_par *par, int len, ...) \
> \
> if (len) { \
> i = len; \
> - while (i--) \
> - *buf++ = modifier((data_type)va_arg(args, \
> - unsigned int)); \
> + while (i--) { \
> + put_unaligned(modifier((data_type)va_arg(args, \
> + unsigned int)), buf); \
> + buf++; \
> + } \
> fbtft_write_buf_dc(par, par->buf, \
> - len * (sizeof(data_type) + offset), 1); \
> + len * sizeof(data_type) + offset, 1); \
> } \
> out: \
> va_end(args); \
^ permalink raw reply
* Re: [PATCH] staging: fbtft: use ARRAY_SIZE() in NUMARGS macro
From: Joyeta Modak @ 2026-06-26 8:57 UTC (permalink / raw)
To: Andy Shevchenko
Cc: andy, gregkh, dri-devel, linux-fbdev, linux-staging, linux-kernel
In-Reply-To: <ajvAGK-0kCfkThcs@ashevche-desk.local>
Thank you for the feedback and the question.
I checked every write_reg() across all fbtft drivers and found that
the largest number of arguments is 129 in write_reg(par,
MIPI_DCS_WRITE_LUT,...)
As COUNT_ARGS() in args.h only supports up to 15, it is not a safe fit here.
However, the kernel test robot reported a problem with my
implementation as the __must_be_array() check in ARRAY_SIZE() requires
the array to be a compile time constant expression and thus breaks the
call at several places.(example par->bgr)
I tried to reproduce this locally on my system using both GCC and
Clang with ARCH=um on x86_64 but could not reproduce the build
failure.
Since the original sizeof() based approach had no such errors flagged,
I am thinking of dropping the ARRAY_SIZE() approach.
Any other feedback is appreciated. Thanks again.
On Wed, Jun 24, 2026 at 5:01 PM Andy Shevchenko
<andriy.shevchenko@intel.com> wrote:
>
> On Wed, Jun 24, 2026 at 01:08:04PM +0530, Joyeta Modak wrote:
> > NUMARGS() computes the number of arguments by dividing the size of a
> > temporary int array by sizeof(int). Using the standard ARRAY_SIZE()
> > macro is the correct way to count array elements in the kernel, and
> > ARRAY_SIZE() also provides a __must_be_array() compile time check. There
> > are no functional changes.
>
> ...
>
> > -#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__}) / sizeof(int))
> > +#define NUMARGS(...) ARRAY_SIZE(((int[]){__VA_ARGS__}))
> >
> > #define write_reg(par, ...) \
> > ((par)->fbtftops.write_register(par, NUMARGS(__VA_ARGS__), __VA_ARGS__))
>
> What is the maximum parameters .write_register() takes in practice in the
> fbtft drivers? If it's less than or equal to 15, we may use args.h instead.
>
> --
> With Best Regards,
> Andy Shevchenko
>
>
--
Regards,
Joyeta Modak
^ permalink raw reply
page: | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox