Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18dabf47 authored by Jens Axboe's avatar Jens Axboe
Browse files

Change table chaining layout



Change the page member of the scatterlist structure to be an unsigned
long, and encode more stuff in the lower bits:

- Bits 0 and 1 zero: this is a normal sg entry. Next sg entry is located
  at sg + 1.
- Bit 0 set: this is a chain entry, the next real entry is at ->page_link
  with the two low bits masked off.
- Bit 1 set: this is the final entry in the sg entry. sg_next() will return
  NULL when passed such an entry.

It's thus important that sg table users use the proper accessors to get
and set the page member.

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 58b053e4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
#include <asm/types.h>
  
struct scatterlist {
	struct page *page;
	unsigned long page_link;
	unsigned int offset;

	unsigned int length;
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
#include <asm/types.h>

struct scatterlist {
	struct page	*page;		/* buffer page			 */
	unsigned long	page_link;
	unsigned int	offset;		/* buffer offset		 */
	dma_addr_t	dma_address;	/* dma address			 */
	unsigned int	length;		/* length			 */
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
#include <asm/types.h>

struct scatterlist {
    struct page		*page;
    unsigned long	page_link;
    unsigned int	offset;
    dma_addr_t		dma_address;
    unsigned int	length;
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
#include <linux/mm.h>

struct scatterlist {
	struct page *page;
	unsigned long page_link;
	unsigned int offset;
	dma_addr_t dma_address;
	unsigned int length;
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ struct scatterlist {
	unsigned int length;

	/* The following is i386 highmem junk - not used by us */
	struct page * page; /* Location for highmem page, if any */
	unsigned long page_link;
	unsigned int offset;/* for highmem, page offset */

};
Loading