On Mon, Jan 04, 2021 at 08:58:23PM -0600, Mike Ximing Chen wrote: > Introduce the dlb device ioctl layer and the first three ioctls: query > device version, query available resources, and create a scheduling domain. > Also introduce the user-space interface file dlb_user.h. > > The device version query is designed to allow each DLB device version/type > to have its own unique ioctl API through the /dev/dlb%d node. Each such API > would share in common the device version command as its first command, and > all subsequent commands can be unique to the particular device. > > The hardware operation for scheduling domain creation will be added in a > subsequent commit. > > Signed-off-by: Gage Eads <gage.e...@intel.com> > Signed-off-by: Mike Ximing Chen <mike.ximing.c...@intel.com> > Reviewed-by: Magnus Karlsson <magnus.karls...@intel.com> > Reviewed-by: Dan Williams <dan.j.willi...@intel.com> > --- > .../userspace-api/ioctl/ioctl-number.rst | 1 + > drivers/misc/dlb/Makefile | 2 +- > drivers/misc/dlb/dlb_bitmap.h | 32 ++++ > drivers/misc/dlb/dlb_ioctl.c | 119 +++++++++++++ > drivers/misc/dlb/dlb_ioctl.h | 11 ++ > drivers/misc/dlb/dlb_main.c | 3 + > drivers/misc/dlb/dlb_main.h | 7 + > drivers/misc/dlb/dlb_pf_ops.c | 21 +++ > drivers/misc/dlb/dlb_resource.c | 63 +++++++ > drivers/misc/dlb/dlb_resource.h | 5 + > include/uapi/linux/dlb.h | 166 ++++++++++++++++++ > 11 files changed, 429 insertions(+), 1 deletion(-) > create mode 100644 drivers/misc/dlb/dlb_ioctl.c > create mode 100644 drivers/misc/dlb/dlb_ioctl.h > create mode 100644 include/uapi/linux/dlb.h > > diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst > b/Documentation/userspace-api/ioctl/ioctl-number.rst > index 55a2d9b2ce33..afca043d59f8 100644 > --- a/Documentation/userspace-api/ioctl/ioctl-number.rst > +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst > @@ -241,6 +241,7 @@ Code Seq# Include File > Comments > 'h' 00-7F > conflict! Charon filesystem > > <mailto:zap...@interlan.net> > 'h' 00-1F linux/hpet.h > conflict! > +'h' 00-1F uapi/linux/dlb.h > conflict! > 'h' 80-8F fs/hfsplus/ioctl.c > 'i' 00-3F linux/i2o-dev.h > conflict! > 'i' 0B-1F linux/ipmi.h > conflict! > diff --git a/drivers/misc/dlb/Makefile b/drivers/misc/dlb/Makefile > index 8a49ea5fd752..aaafb3086d8d 100644 > --- a/drivers/misc/dlb/Makefile > +++ b/drivers/misc/dlb/Makefile > @@ -7,4 +7,4 @@ > obj-$(CONFIG_INTEL_DLB) := dlb.o > > dlb-objs := dlb_main.o > -dlb-objs += dlb_pf_ops.o dlb_resource.o > +dlb-objs += dlb_pf_ops.o dlb_resource.o dlb_ioctl.o > diff --git a/drivers/misc/dlb/dlb_bitmap.h b/drivers/misc/dlb/dlb_bitmap.h > index fb3ef52a306d..3ea78b42c79f 100644 > --- a/drivers/misc/dlb/dlb_bitmap.h > +++ b/drivers/misc/dlb/dlb_bitmap.h > @@ -73,4 +73,36 @@ static inline void dlb_bitmap_free(struct dlb_bitmap > *bitmap) > kfree(bitmap); > } > > +/** > + * dlb_bitmap_longest_set_range() - returns longest contiguous range of set > + * bits > + * @bitmap: pointer to dlb_bitmap structure. > + * > + * Return: > + * Returns the bitmap's longest contiguous range of set bits upon success, > + * <0 otherwise. > + * > + * Errors: > + * EINVAL - bitmap is NULL or is uninitialized. > + */ > +static inline int dlb_bitmap_longest_set_range(struct dlb_bitmap *bitmap) > +{ > + int max_len, len; > + int start, end; > + > + if (!bitmap || !bitmap->map) > + return -EINVAL; > + > + if (bitmap_weight(bitmap->map, bitmap->len) == 0) > + return 0; > + > + max_len = 0; > + bitmap_for_each_set_region(bitmap->map, start, end, 0, bitmap->len) { > + len = end - start; > + if (max_len < len) > + max_len = len; > + } > + return max_len; > +} > + > #endif /* __DLB_OSDEP_BITMAP_H */ > diff --git a/drivers/misc/dlb/dlb_ioctl.c b/drivers/misc/dlb/dlb_ioctl.c > new file mode 100644 > index 000000000000..c072ed9b921c > --- /dev/null > +++ b/drivers/misc/dlb/dlb_ioctl.c > @@ -0,0 +1,119 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright(C) 2016-2020 Intel Corporation. All rights reserved. */ > + > +#include <linux/uaccess.h> > +#include <linux/nospec.h> > + > +#include <uapi/linux/dlb.h> > + > +#include "dlb_ioctl.h" > +#include "dlb_main.h" > + > +/* [7:0]: device revision, [15:8]: device version */ > +#define DLB_SET_DEVICE_VERSION(ver, rev) (((ver) << 8) | (rev)) > + > +static int > +dlb_ioctl_get_device_version(struct dlb *dlb __attribute__((unused)),
We don't use __attribute__((unused)) for function variables in Linux. Please remove and tell whatever operating system you ported this from to get with the times :) thanks, greg k-h