]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
resource: Use typedef for alignf callback
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 7 May 2024 10:25:19 +0000 (13:25 +0300)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 28 May 2024 16:14:14 +0000 (11:14 -0500)
To make it simpler to declare resource constraint alignf callbacks, add
typedef for it and document it.

Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240507102523.57320-5-ilpo.jarvinen@linux.intel.com
Tested-by: Lidong Wang <lidong.wang@intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pci/bus.c
include/linux/ioport.h
include/linux/pci.h
kernel/resource.c

index 826b5016a101022b990045fa7b68afe85be80c7a..dfc99b3cb95850e1fc0685014f04ad6e32e18224 100644 (file)
@@ -176,10 +176,7 @@ static void pci_clip_resource_to_region(struct pci_bus *bus,
 static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res,
                resource_size_t size, resource_size_t align,
                resource_size_t min, unsigned long type_mask,
-               resource_size_t (*alignf)(void *,
-                                         const struct resource *,
-                                         resource_size_t,
-                                         resource_size_t),
+               resource_alignf alignf,
                void *alignf_data,
                struct pci_bus_region *region)
 {
@@ -250,10 +247,7 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res,
 int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
                resource_size_t size, resource_size_t align,
                resource_size_t min, unsigned long type_mask,
-               resource_size_t (*alignf)(void *,
-                                         const struct resource *,
-                                         resource_size_t,
-                                         resource_size_t),
+               resource_alignf alignf,
                void *alignf_data)
 {
 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
index db7fe25f33700c164a5aa8e882e2ad60286a4e49..28266426e5bf57f78930ea0cf13a7daeb4aeb26f 100644 (file)
@@ -188,6 +188,23 @@ enum {
 #define DEFINE_RES_DMA(_dma)                                           \
        DEFINE_RES_DMA_NAMED((_dma), NULL)
 
+/**
+ * typedef resource_alignf - Resource alignment callback
+ * @data:      Private data used by the callback
+ * @res:       Resource candidate range (an empty resource space)
+ * @size:      The minimum size of the empty space
+ * @align:     Alignment from the constraints
+ *
+ * Callback allows calculating resource placement and alignment beyond min,
+ * max, and align fields in the struct resource_constraint.
+ *
+ * Return: Start address for the resource.
+ */
+typedef resource_size_t (*resource_alignf)(void *data,
+                                          const struct resource *res,
+                                          resource_size_t size,
+                                          resource_size_t align);
+
 /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
 extern struct resource ioport_resource;
 extern struct resource iomem_resource;
@@ -207,10 +224,7 @@ extern void arch_remove_reservations(struct resource *avail);
 extern int allocate_resource(struct resource *root, struct resource *new,
                             resource_size_t size, resource_size_t min,
                             resource_size_t max, resource_size_t align,
-                            resource_size_t (*alignf)(void *,
-                                                      const struct resource *,
-                                                      resource_size_t,
-                                                      resource_size_t),
+                            resource_alignf alignf,
                             void *alignf_data);
 struct resource *lookup_resource(struct resource *root, resource_size_t start);
 int adjust_resource(struct resource *res, resource_size_t start,
index fb004fd4e8890537e002e0181427487c9e021732..760fdc4b37cca244d25ca4acb3e70d315e2ee348 100644 (file)
@@ -1551,10 +1551,7 @@ int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
                        struct resource *res, resource_size_t size,
                        resource_size_t align, resource_size_t min,
                        unsigned long type_mask,
-                       resource_size_t (*alignf)(void *,
-                                                 const struct resource *,
-                                                 resource_size_t,
-                                                 resource_size_t),
+                       resource_alignf alignf,
                        void *alignf_data);
 
 
index 3f15a32d9c422cbdc6b1b0d4cabe365b11428229..26ad6f223652aec5bd2c0c9d8dc5c4e0cecfd09e 100644 (file)
@@ -63,8 +63,7 @@ EXPORT_SYMBOL(iomem_resource);
  */
 struct resource_constraint {
        resource_size_t min, max, align;
-       resource_size_t (*alignf)(void *, const struct resource *,
-                       resource_size_t, resource_size_t);
+       resource_alignf alignf;
        void *alignf_data;
 };
 
@@ -783,10 +782,7 @@ out:
 int allocate_resource(struct resource *root, struct resource *new,
                      resource_size_t size, resource_size_t min,
                      resource_size_t max, resource_size_t align,
-                     resource_size_t (*alignf)(void *,
-                                               const struct resource *,
-                                               resource_size_t,
-                                               resource_size_t),
+                     resource_alignf alignf,
                      void *alignf_data)
 {
        int err;