[Kernel-packages] [Bug 1910618] Re: bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 LTS

2021-01-21 Thread Mathew Hodson
*** This bug is a duplicate of bug 1872908 ***
https://bugs.launchpad.net/bugs/1872908

** This bug has been marked a duplicate of bug 1872908
   bcmwl kernel module does not build with 5.6.0 kernel or later

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to bcmwl in Ubuntu.
https://bugs.launchpad.net/bugs/1910618

Title:
  bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu
  20.04.1 LTS

Status in bcmwl package in Ubuntu:
  Confirmed

Bug description:
  Ubuntu 20.04.1 LTS
  bcmwl-kernel-source_6.30.223.271

  
  I believe the important part of the 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log is below.

  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In 
function ‘wl_reg_proc_entry’:
  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: 
error: passing argument 4 of ‘proc_create_data’ from incompatible pointe
  r type [-Werror=incompatible-pointer-types]
   3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, 
wl)) == NULL) {
|  ^~~~
|  |
|  const struct 
file_operations *
  In file included from 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
  ./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ 
but argument is of type ‘const struct file_operations *’
102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
|   ^~~~

  
  It looks like 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c uses the 
file_operations structure.

  lines 3359-3381 from wl_linux.c

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
  static const struct file_operations wl_fops = {
.owner  = THIS_MODULE,
.read   = wl_proc_read,
.write  = wl_proc_write,
  };
  #endif

  static int
  wl_reg_proc_entry(wl_info_t *wl)
  {
char tmp[32];
sprintf(tmp, "%s%d", HYBRID_PROC, wl->pub->unit);
  #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
if ((wl->proc_entry = create_proc_entry(tmp, 0644, NULL)) == NULL) {
WL_ERROR(("%s: create_proc_entry %s failed\n", __FUNCTION__, 
tmp));
  #else
if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, wl)) 
== NULL) {
WL_ERROR(("%s: proc_create_data %s failed\n", __FUNCTION__, 
tmp));
  #endif
ASSERT(0);
return -1;
}

  
  However, it looks like proc_fs.h uses a different structure (proc_ops).

  /usr/src/linux-headers-5.8.0-34-generic/include/linux/proc_fs.h
  /usr/src/linux-hwe-5.8-headers-5.8.0-34/include/linux/proc_fs.h

  kernel 5.8.0-34
  proc_fs.h
  lines 29-43 

  struct proc_ops {
unsigned int proc_flags;
int (*proc_open)(struct inode *, struct file *);
ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
ssize_t (*proc_write)(struct file *, const char __user *, size_t, 
loff_t *);
loff_t  (*proc_lseek)(struct file *, loff_t, int);
int (*proc_release)(struct inode *, struct file *);
__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
long(*proc_ioctl)(struct file *, unsigned int, unsigned long);
  #ifdef CONFIG_COMPAT
long(*proc_compat_ioctl)(struct file *, unsigned int, unsigned 
long);
  #endif
int (*proc_mmap)(struct file *, struct vm_area_struct *);
unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, 
unsigned long, unsigned long, unsigned long);
  } __randomize_layout;

  and lines 102-107

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct proc_ops *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

  
  Looking back at the linux 5.4.0-59 headers, proc_fs.h appears to use the 
file_operations structure.

  /usr/src/linux-headers-5.4.0-59-generic/include/linux/proc_fs.h
  /usr/src/linux-headers-5.4.0-59/include/linux/proc_fs.h

  kernel 5.4.0-59
  proc_fs.h
  lines 44-49

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct file_operations *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct file_operations
  *proc_fops);

  
  If this is where the problem lies, I 

[Kernel-packages] [Bug 1910618] Re: bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 LTS

2021-01-12 Thread Paul Wilson
Hi @zdravko-g

Thank you for the update. I have temporarily removed bcmwl-kernel-source
and have installed broadcom-sta until the new release comes out.  WiFi
is currently running.

It will be interesting to how the file_operations to proc_ops conversion
is dealt with in the new release (wl_linux.c) or if I am chasing the
wrong rabbit.

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to bcmwl in Ubuntu.
https://bugs.launchpad.net/bugs/1910618

Title:
  bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu
  20.04.1 LTS

Status in bcmwl package in Ubuntu:
  Confirmed

Bug description:
  Ubuntu 20.04.1 LTS
  bcmwl-kernel-source_6.30.223.271

  
  I believe the important part of the 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log is below.

  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In 
function ‘wl_reg_proc_entry’:
  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: 
error: passing argument 4 of ‘proc_create_data’ from incompatible pointe
  r type [-Werror=incompatible-pointer-types]
   3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, 
wl)) == NULL) {
|  ^~~~
|  |
|  const struct 
file_operations *
  In file included from 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
  ./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ 
but argument is of type ‘const struct file_operations *’
102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
|   ^~~~

  
  It looks like 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c uses the 
file_operations structure.

  lines 3359-3381 from wl_linux.c

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
  static const struct file_operations wl_fops = {
.owner  = THIS_MODULE,
.read   = wl_proc_read,
.write  = wl_proc_write,
  };
  #endif

  static int
  wl_reg_proc_entry(wl_info_t *wl)
  {
char tmp[32];
sprintf(tmp, "%s%d", HYBRID_PROC, wl->pub->unit);
  #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
if ((wl->proc_entry = create_proc_entry(tmp, 0644, NULL)) == NULL) {
WL_ERROR(("%s: create_proc_entry %s failed\n", __FUNCTION__, 
tmp));
  #else
if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, wl)) 
== NULL) {
WL_ERROR(("%s: proc_create_data %s failed\n", __FUNCTION__, 
tmp));
  #endif
ASSERT(0);
return -1;
}

  
  However, it looks like proc_fs.h uses a different structure (proc_ops).

  /usr/src/linux-headers-5.8.0-34-generic/include/linux/proc_fs.h
  /usr/src/linux-hwe-5.8-headers-5.8.0-34/include/linux/proc_fs.h

  kernel 5.8.0-34
  proc_fs.h
  lines 29-43 

  struct proc_ops {
unsigned int proc_flags;
int (*proc_open)(struct inode *, struct file *);
ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
ssize_t (*proc_write)(struct file *, const char __user *, size_t, 
loff_t *);
loff_t  (*proc_lseek)(struct file *, loff_t, int);
int (*proc_release)(struct inode *, struct file *);
__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
long(*proc_ioctl)(struct file *, unsigned int, unsigned long);
  #ifdef CONFIG_COMPAT
long(*proc_compat_ioctl)(struct file *, unsigned int, unsigned 
long);
  #endif
int (*proc_mmap)(struct file *, struct vm_area_struct *);
unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, 
unsigned long, unsigned long, unsigned long);
  } __randomize_layout;

  and lines 102-107

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct proc_ops *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

  
  Looking back at the linux 5.4.0-59 headers, proc_fs.h appears to use the 
file_operations structure.

  /usr/src/linux-headers-5.4.0-59-generic/include/linux/proc_fs.h
  /usr/src/linux-headers-5.4.0-59/include/linux/proc_fs.h

  kernel 5.4.0-59
  proc_fs.h
  lines 44-49

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct file_operations *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t 

[Kernel-packages] [Bug 1910618] Re: bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 LTS

2021-01-12 Thread ZdravkoG
Hi @paulwil,
Your bug seems duplicate of Bug #1910555. Take a look there for workaround till 
Canonical fix gets released.  Just a obsolete function ioremap_nocache (and 
one more thing) together with delayed new release of bcmwl-kernel-source (who 
knows why), where new patch has added, dealing with the changes.
Hope this helps.

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to bcmwl in Ubuntu.
https://bugs.launchpad.net/bugs/1910618

Title:
  bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu
  20.04.1 LTS

Status in bcmwl package in Ubuntu:
  Confirmed

Bug description:
  Ubuntu 20.04.1 LTS
  bcmwl-kernel-source_6.30.223.271

  
  I believe the important part of the 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log is below.

  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In 
function ‘wl_reg_proc_entry’:
  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: 
error: passing argument 4 of ‘proc_create_data’ from incompatible pointe
  r type [-Werror=incompatible-pointer-types]
   3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, 
wl)) == NULL) {
|  ^~~~
|  |
|  const struct 
file_operations *
  In file included from 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
  ./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ 
but argument is of type ‘const struct file_operations *’
102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
|   ^~~~

  
  It looks like 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c uses the 
file_operations structure.

  lines 3359-3381 from wl_linux.c

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
  static const struct file_operations wl_fops = {
.owner  = THIS_MODULE,
.read   = wl_proc_read,
.write  = wl_proc_write,
  };
  #endif

  static int
  wl_reg_proc_entry(wl_info_t *wl)
  {
char tmp[32];
sprintf(tmp, "%s%d", HYBRID_PROC, wl->pub->unit);
  #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
if ((wl->proc_entry = create_proc_entry(tmp, 0644, NULL)) == NULL) {
WL_ERROR(("%s: create_proc_entry %s failed\n", __FUNCTION__, 
tmp));
  #else
if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, wl)) 
== NULL) {
WL_ERROR(("%s: proc_create_data %s failed\n", __FUNCTION__, 
tmp));
  #endif
ASSERT(0);
return -1;
}

  
  However, it looks like proc_fs.h uses a different structure (proc_ops).

  /usr/src/linux-headers-5.8.0-34-generic/include/linux/proc_fs.h
  /usr/src/linux-hwe-5.8-headers-5.8.0-34/include/linux/proc_fs.h

  kernel 5.8.0-34
  proc_fs.h
  lines 29-43 

  struct proc_ops {
unsigned int proc_flags;
int (*proc_open)(struct inode *, struct file *);
ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
ssize_t (*proc_write)(struct file *, const char __user *, size_t, 
loff_t *);
loff_t  (*proc_lseek)(struct file *, loff_t, int);
int (*proc_release)(struct inode *, struct file *);
__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
long(*proc_ioctl)(struct file *, unsigned int, unsigned long);
  #ifdef CONFIG_COMPAT
long(*proc_compat_ioctl)(struct file *, unsigned int, unsigned 
long);
  #endif
int (*proc_mmap)(struct file *, struct vm_area_struct *);
unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, 
unsigned long, unsigned long, unsigned long);
  } __randomize_layout;

  and lines 102-107

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct proc_ops *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

  
  Looking back at the linux 5.4.0-59 headers, proc_fs.h appears to use the 
file_operations structure.

  /usr/src/linux-headers-5.4.0-59-generic/include/linux/proc_fs.h
  /usr/src/linux-headers-5.4.0-59/include/linux/proc_fs.h

  kernel 5.4.0-59
  proc_fs.h
  lines 44-49

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct file_operations *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,

[Kernel-packages] [Bug 1910618] Re: bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 LTS

2021-01-12 Thread Launchpad Bug Tracker
Status changed to 'Confirmed' because the bug affects multiple users.

** Changed in: bcmwl (Ubuntu)
   Status: New => Confirmed

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to bcmwl in Ubuntu.
https://bugs.launchpad.net/bugs/1910618

Title:
  bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu
  20.04.1 LTS

Status in bcmwl package in Ubuntu:
  Confirmed

Bug description:
  Ubuntu 20.04.1 LTS
  bcmwl-kernel-source_6.30.223.271

  
  I believe the important part of the 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log is below.

  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In 
function ‘wl_reg_proc_entry’:
  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: 
error: passing argument 4 of ‘proc_create_data’ from incompatible pointe
  r type [-Werror=incompatible-pointer-types]
   3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, 
wl)) == NULL) {
|  ^~~~
|  |
|  const struct 
file_operations *
  In file included from 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
  ./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ 
but argument is of type ‘const struct file_operations *’
102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
|   ^~~~

  
  It looks like 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c uses the 
file_operations structure.

  lines 3359-3381 from wl_linux.c

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
  static const struct file_operations wl_fops = {
.owner  = THIS_MODULE,
.read   = wl_proc_read,
.write  = wl_proc_write,
  };
  #endif

  static int
  wl_reg_proc_entry(wl_info_t *wl)
  {
char tmp[32];
sprintf(tmp, "%s%d", HYBRID_PROC, wl->pub->unit);
  #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
if ((wl->proc_entry = create_proc_entry(tmp, 0644, NULL)) == NULL) {
WL_ERROR(("%s: create_proc_entry %s failed\n", __FUNCTION__, 
tmp));
  #else
if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, wl)) 
== NULL) {
WL_ERROR(("%s: proc_create_data %s failed\n", __FUNCTION__, 
tmp));
  #endif
ASSERT(0);
return -1;
}

  
  However, it looks like proc_fs.h uses a different structure (proc_ops).

  /usr/src/linux-headers-5.8.0-34-generic/include/linux/proc_fs.h
  /usr/src/linux-hwe-5.8-headers-5.8.0-34/include/linux/proc_fs.h

  kernel 5.8.0-34
  proc_fs.h
  lines 29-43 

  struct proc_ops {
unsigned int proc_flags;
int (*proc_open)(struct inode *, struct file *);
ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
ssize_t (*proc_write)(struct file *, const char __user *, size_t, 
loff_t *);
loff_t  (*proc_lseek)(struct file *, loff_t, int);
int (*proc_release)(struct inode *, struct file *);
__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
long(*proc_ioctl)(struct file *, unsigned int, unsigned long);
  #ifdef CONFIG_COMPAT
long(*proc_compat_ioctl)(struct file *, unsigned int, unsigned 
long);
  #endif
int (*proc_mmap)(struct file *, struct vm_area_struct *);
unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, 
unsigned long, unsigned long, unsigned long);
  } __randomize_layout;

  and lines 102-107

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct proc_ops *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

  
  Looking back at the linux 5.4.0-59 headers, proc_fs.h appears to use the 
file_operations structure.

  /usr/src/linux-headers-5.4.0-59-generic/include/linux/proc_fs.h
  /usr/src/linux-headers-5.4.0-59/include/linux/proc_fs.h

  kernel 5.4.0-59
  proc_fs.h
  lines 44-49

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct file_operations *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct file_operations
  *proc_fops);

  
  If this is where the problem lies, I am guessing it is better to try to fix 
the Broadcom package/ wl_linux.c than 

[Kernel-packages] [Bug 1910618] Re: bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 LTS

2021-01-11 Thread Paul Wilson
** Summary changed:

- bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04 LTS
+ bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu 20.04.1 
LTS

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to bcmwl in Ubuntu.
https://bugs.launchpad.net/bugs/1910618

Title:
  bcmwl 6.30.223.271+bdcom build fails with kernel 5.8.0-34/36 Ubuntu
  20.04.1 LTS

Status in bcmwl package in Ubuntu:
  New

Bug description:
  Ubuntu 20.04.1 LTS
  bcmwl-kernel-source_6.30.223.271

  
  I believe the important part of the 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log is below.

  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In 
function ‘wl_reg_proc_entry’:
  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: 
error: passing argument 4 of ‘proc_create_data’ from incompatible pointe
  r type [-Werror=incompatible-pointer-types]
   3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, 
wl)) == NULL) {
|  ^~~~
|  |
|  const struct 
file_operations *
  In file included from 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
  ./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ 
but argument is of type ‘const struct file_operations *’
102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
|   ^~~~

  
  It looks like 
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c uses the 
file_operations structure.

  lines 3359-3381 from wl_linux.c

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
  static const struct file_operations wl_fops = {
.owner  = THIS_MODULE,
.read   = wl_proc_read,
.write  = wl_proc_write,
  };
  #endif

  static int
  wl_reg_proc_entry(wl_info_t *wl)
  {
char tmp[32];
sprintf(tmp, "%s%d", HYBRID_PROC, wl->pub->unit);
  #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
if ((wl->proc_entry = create_proc_entry(tmp, 0644, NULL)) == NULL) {
WL_ERROR(("%s: create_proc_entry %s failed\n", __FUNCTION__, 
tmp));
  #else
if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, _fops, wl)) 
== NULL) {
WL_ERROR(("%s: proc_create_data %s failed\n", __FUNCTION__, 
tmp));
  #endif
ASSERT(0);
return -1;
}

  
  However, it looks like proc_fs.h uses a different structure (proc_ops).

  /usr/src/linux-headers-5.8.0-34-generic/include/linux/proc_fs.h
  /usr/src/linux-hwe-5.8-headers-5.8.0-34/include/linux/proc_fs.h

  kernel 5.8.0-34
  proc_fs.h
  lines 29-43 

  struct proc_ops {
unsigned int proc_flags;
int (*proc_open)(struct inode *, struct file *);
ssize_t (*proc_read)(struct file *, char __user *, size_t, loff_t *);
ssize_t (*proc_write)(struct file *, const char __user *, size_t, 
loff_t *);
loff_t  (*proc_lseek)(struct file *, loff_t, int);
int (*proc_release)(struct inode *, struct file *);
__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
long(*proc_ioctl)(struct file *, unsigned int, unsigned long);
  #ifdef CONFIG_COMPAT
long(*proc_compat_ioctl)(struct file *, unsigned int, unsigned 
long);
  #endif
int (*proc_mmap)(struct file *, struct vm_area_struct *);
unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, 
unsigned long, unsigned long, unsigned long);
  } __randomize_layout;

  and lines 102-107

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct proc_ops *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

  
  Looking back at the linux 5.4.0-59 headers, proc_fs.h appears to use the 
file_operations structure.

  /usr/src/linux-headers-5.4.0-59-generic/include/linux/proc_fs.h
  /usr/src/linux-headers-5.4.0-59/include/linux/proc_fs.h

  kernel 5.4.0-59
  proc_fs.h
  lines 44-49

  extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
   struct proc_dir_entry *,
   const struct file_operations *,
   void *);

  struct proc_dir_entry *proc_create(const char *name, umode_t mode,
  struct proc_dir_entry *parent, const struct file_operations
  *proc_fops);

  
  If this is where the problem lies, I am guessing it is better to try to