Date: Sat, 28 Jan 2017 16:30:14 +0000 (UTC) From: Baptiste Daroussin <bapt@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r312926 - in head: bin/ed contrib/dma share/mk sys/amd64/amd64 sys/amd64/cloudabi64 sys/cam/ctl sys/cddl/dev/fbt/x86 sys/compat/cloudabi sys/compat/cloudabi64 sys/compat/linuxkpi/common... Message-ID: <201701281630.v0SGUEfW063907@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bapt Date: Sat Jan 28 16:30:14 2017 New Revision: 312926 URL: https://svnweb.freebsd.org/changeset/base/312926 Log: Revert r312923 a better approach will be taken later Modified: head/bin/ed/Makefile head/contrib/dma/mail.c head/share/mk/bsd.doc.mk head/sys/amd64/amd64/db_trace.c head/sys/amd64/cloudabi64/cloudabi64_sysvec.c head/sys/cam/ctl/ctl_ioctl.h head/sys/cddl/dev/fbt/x86/fbt_isa.c head/sys/compat/cloudabi/cloudabi_fd.c head/sys/compat/cloudabi64/cloudabi64_poll.c head/sys/compat/linuxkpi/common/include/linux/slab.h head/sys/contrib/dev/acpica/components/namespace/nsxfeval.c head/sys/contrib/dev/acpica/include/acpixf.h head/sys/ddb/ddb.h head/sys/dev/drm2/drm_agpsupport.c head/sys/dev/drm2/drm_bufs.c head/sys/dev/drm2/drm_dma.c head/sys/dev/drm2/drm_drv.c head/sys/dev/drm2/drm_os_freebsd.c head/sys/dev/drm2/drm_os_freebsd.h head/sys/dev/drm2/drm_stub.c head/sys/fs/nfsserver/nfs_nfsdstate.c head/sys/kern/kern_descrip.c head/sys/kern/kern_shutdown.c head/sys/modules/drm2/drm2/Makefile head/tools/build/Makefile head/tools/tools/locale/etc/unicode.conf head/usr.bin/getconf/confstr.gperf head/usr.bin/getconf/getconf.c head/usr.bin/getconf/limits.gperf head/usr.bin/getconf/pathconf.gperf head/usr.bin/getconf/progenv.gperf head/usr.bin/getconf/sysconf.gperf head/usr.sbin/nscd/nscd.c head/usr.sbin/nscd/nscdcli.c Modified: head/bin/ed/Makefile ============================================================================== --- head/bin/ed/Makefile Sat Jan 28 16:24:06 2017 (r312925) +++ head/bin/ed/Makefile Sat Jan 28 16:30:14 2017 (r312926) @@ -9,7 +9,7 @@ LINKS= ${BINDIR}/ed ${BINDIR}/red MLINKS= ed.1 red.1 .if ${MK_OPENSSL} != "no" && ${MK_ED_CRYPTO} != "no" -CFLAGS+=-DDES +CFLAGS+=-DDES -I/usr/include/private/openssl LIBADD= crypto .endif Modified: head/contrib/dma/mail.c ============================================================================== --- head/contrib/dma/mail.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/contrib/dma/mail.c Sat Jan 28 16:30:14 2017 (r312926) @@ -38,6 +38,7 @@ #include <signal.h> #include <syslog.h> #include <unistd.h> +#include <ctype.h> #include "dma.h" @@ -341,18 +342,41 @@ newaddr: goto again; } +static int +writeline(struct queue *queue, const char *line, ssize_t linelen) +{ + ssize_t len; + + while (linelen > 0) { + len = linelen; + if (linelen > 1000) { + len = 990; + } + if (fwrite(line, len, 1, queue->mailf) != 1) + return (-1); + if (linelen <= 1000) + break; + if (fwrite("\n", 1, 1, queue->mailf) != 1) + return (-1); + line += 990; + linelen = strlen(line); + } + return (0); +} + int readmail(struct queue *queue, int nodot, int recp_from_header) { struct parse_state parse_state; - char line[1000]; /* by RFC2822 */ - size_t linelen; + char *line = NULL; + ssize_t linelen; + size_t linecap = 0; + char newline[1000]; size_t error; int had_headers = 0; int had_from = 0; int had_messagid = 0; int had_date = 0; - int had_last_line = 0; int nocopy = 0; parse_state.state = NONE; @@ -372,24 +396,15 @@ readmail(struct queue *queue, int nodot, return (-1); while (!feof(stdin)) { - if (fgets(line, sizeof(line) - 1, stdin) == NULL) + newline[0] = '\0'; + if ((linelen = getline(&line, &linecap, stdin)) <= 0) break; - if (had_last_line) - errlogx(EX_DATAERR, "bad mail input format:" - " from %s (uid %d) (envelope-from %s)", - username, useruid, queue->sender); - linelen = strlen(line); - if (linelen == 0 || line[linelen - 1] != '\n') { - /* - * This line did not end with a newline character. - * If we fix it, it better be the last line of - * the file. - */ - line[linelen] = '\n'; - line[linelen + 1] = 0; - had_last_line = 1; - } if (!had_headers) { + if (linelen > 1000) + errlogx(EX_DATAERR, "bad mail input format:" + " from %s (uid %d) (envelope-from %s)", + username, useruid, queue->sender); + /* * Unless this is a continuation, switch of * the Bcc: nocopy flag. @@ -425,36 +440,44 @@ readmail(struct queue *queue, int nodot, } } - if (strcmp(line, "\n") == 0 && !had_headers) { + if (line[0] == '\n' && !had_headers) { had_headers = 1; while (!had_date || !had_messagid || !had_from) { if (!had_date) { had_date = 1; - snprintf(line, sizeof(line), "Date: %s\n", rfc822date()); + snprintf(newline, sizeof(newline), "Date: %s\n", rfc822date()); } else if (!had_messagid) { /* XXX msgid, assign earlier and log? */ had_messagid = 1; - snprintf(line, sizeof(line), "Message-Id: <%"PRIxMAX".%s.%"PRIxMAX"@%s>\n", + snprintf(newline, sizeof(newline), "Message-Id: <%"PRIxMAX".%s.%"PRIxMAX"@%s>\n", (uintmax_t)time(NULL), queue->id, (uintmax_t)random(), hostname()); } else if (!had_from) { had_from = 1; - snprintf(line, sizeof(line), "From: <%s>\n", queue->sender); + snprintf(newline, sizeof(newline), "From: <%s>\n", queue->sender); } - if (fwrite(line, strlen(line), 1, queue->mailf) != 1) - return (-1); + if (fwrite(newline, strlen(newline), 1, queue->mailf) != 1) + goto fail; } - strcpy(line, "\n"); + strlcpy(newline, "\n", sizeof(newline)); } if (!nodot && linelen == 2 && line[0] == '.') break; if (!nocopy) { - if (fwrite(line, strlen(line), 1, queue->mailf) != 1) - return (-1); + if (newline[0] != '\0') { + if (fwrite(newline, strlen(newline), 1, queue->mailf) != 1) + goto fail; + } else { + if (writeline(queue, line, linelen) != 0) + goto fail; + } } } return (0); +fail: + free(line); + return (-1); } Modified: head/share/mk/bsd.doc.mk ============================================================================== --- head/share/mk/bsd.doc.mk Sat Jan 28 16:24:06 2017 (r312925) +++ head/share/mk/bsd.doc.mk Sat Jan 28 16:30:14 2017 (r312926) @@ -54,10 +54,10 @@ INDXBIB?= indxbib PIC?= pic REFER?= refer .for _dev in ${PRINTERDEVICE:Mascii} -ROFF.ascii?= groff -Tascii -P-c ${TRFLAGS} -mtty-char ${MACROS} ${PAGES:C/^/-o/1} +ROFF.ascii?= nroff -Tascii -P-c ${TRFLAGS} -mtty-char ${MACROS} ${PAGES:C/^/-o/1} .endfor .for _dev in ${PRINTERDEVICE:Nascii} -ROFF.${_dev}?= groff -T${_dev} ${TRFLAGS} ${MACROS} ${PAGES:C/^/-o/1} +ROFF.${_dev}?= nroff -T${_dev} ${TRFLAGS} ${MACROS} ${PAGES:C/^/-o/1} .endfor SOELIM?= soelim TBL?= tbl Modified: head/sys/amd64/amd64/db_trace.c ============================================================================== --- head/sys/amd64/amd64/db_trace.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/amd64/amd64/db_trace.c Sat Jan 28 16:30:14 2017 (r312926) @@ -270,6 +270,7 @@ db_nextframe(struct amd64_frame **fp, db *fp = (struct amd64_frame *) rbp; } + static int db_backtrace(struct thread *td, struct trapframe *tf, struct amd64_frame *frame, db_addr_t pc, register_t sp, int count) @@ -384,6 +385,20 @@ db_trace_self(void) db_backtrace(curthread, NULL, frame, callpc, 0, -1); } +void +db_trace_self_depth(int depth) +{ + struct amd64_frame *frame; + db_addr_t callpc; + register_t rbp; + + __asm __volatile("movq %%rbp,%0" : "=r" (rbp)); + frame = (struct amd64_frame *)rbp; + callpc = (db_addr_t)db_get_value((long)&frame->f_retaddr, 8, FALSE); + frame = frame->f_frame; + db_backtrace(curthread, NULL, frame, callpc, 0, depth); +} + int db_trace_thread(struct thread *thr, int count) { Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Sat Jan 28 16:30:14 2017 (r312926) @@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> +#include <sys/systm.h> #include <sys/imgact.h> #include <sys/kernel.h> #include <sys/proc.h> @@ -38,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include <machine/frame.h> #include <machine/pcb.h> #include <machine/vmparam.h> +#include <machine/cpu.h> #include <compat/cloudabi/cloudabi_util.h> Modified: head/sys/cam/ctl/ctl_ioctl.h ============================================================================== --- head/sys/cam/ctl/ctl_ioctl.h Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/cam/ctl/ctl_ioctl.h Sat Jan 28 16:30:14 2017 (r312926) @@ -150,7 +150,7 @@ struct ctl_lun_io_stats { uint64_t lun_number; uint32_t blocksize; ctl_lun_stats_flags flags; - struct ctl_lun_io_port_stats ports[CTL_MAX_PORTS]; + struct ctl_lun_io_port_stats *ports; }; struct ctl_stats { Modified: head/sys/cddl/dev/fbt/x86/fbt_isa.c ============================================================================== --- head/sys/cddl/dev/fbt/x86/fbt_isa.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/cddl/dev/fbt/x86/fbt_isa.c Sat Jan 28 16:30:14 2017 (r312926) @@ -34,6 +34,8 @@ #include <sys/dtrace.h> +#include <machine/cpu.h> + #include "fbt.h" #define FBT_PUSHL_EBP 0x55 Modified: head/sys/compat/cloudabi/cloudabi_fd.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_fd.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/compat/cloudabi/cloudabi_fd.c Sat Jan 28 16:30:14 2017 (r312926) @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include <sys/socketvar.h> #include <sys/syscallsubr.h> #include <sys/sysproto.h> +#include <sys/seq.h> #include <sys/systm.h> #include <sys/unistd.h> #include <sys/vnode.h> Modified: head/sys/compat/cloudabi64/cloudabi64_poll.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_poll.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/compat/cloudabi64/cloudabi64_poll.c Sat Jan 28 16:30:14 2017 (r312926) @@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> +#include <sys/systm.h> #include <sys/proc.h> #include <sys/syscallsubr.h> Modified: head/sys/compat/linuxkpi/common/include/linux/slab.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/slab.h Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/compat/linuxkpi/common/include/linux/slab.h Sat Jan 28 16:30:14 2017 (r312926) @@ -72,6 +72,14 @@ struct linux_kmem_cache { }; #define SLAB_HWCACHE_ALIGN 0x0001 +static inline void * +kmalloc_array(size_t n, size_t size, gfp_t flags) +{ + if (size != 0 && n > SIZE_MAX / size) + return (NULL); + return kmalloc(n * size, flags); +} +} static inline int linux_kmem_ctor(void *mem, int size, void *arg, int flags) Modified: head/sys/contrib/dev/acpica/components/namespace/nsxfeval.c ============================================================================== --- head/sys/contrib/dev/acpica/components/namespace/nsxfeval.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/contrib/dev/acpica/components/namespace/nsxfeval.c Sat Jan 28 16:30:14 2017 (r312926) @@ -1022,23 +1022,25 @@ ACPI_EXPORT_SYMBOL (AcpiDetachData) /******************************************************************************* * - * FUNCTION: AcpiGetData + * FUNCTION: AcpiGetDataFull * * PARAMETERS: ObjHandle - Namespace node - * Handler - Handler used in call to AttachData + * Handle - Handler used in call to attach_data * Data - Where the data is returned + * Callback - function to execute before returning * * RETURN: Status * - * DESCRIPTION: Retrieve data that was previously attached to a namespace node. + * DESCRIPTION: Retrieve data that was previously attached to a namespace node + * and execute a callback before returning. * ******************************************************************************/ - ACPI_STATUS -AcpiGetData ( +AcpiGetDataFull ( ACPI_HANDLE ObjHandle, ACPI_OBJECT_HANDLER Handler, - void **Data) + void **Data, + void (*Callback)(void *)) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; @@ -1069,10 +1071,34 @@ AcpiGetData ( } Status = AcpiNsGetAttachedData (Node, Handler, Data); - + if (ACPI_SUCCESS(Status) && Callback) { + Callback(*Data); + } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } +ACPI_EXPORT_SYMBOL (AcpiGetDataFull) +/******************************************************************************* + * + * FUNCTION: AcpiGetData + * + * PARAMETERS: ObjHandle - Namespace node + * Handler - Handler used in call to AttachData + * Data - Where the data is returned + * + * RETURN: Status + * + * DESCRIPTION: Retrieve data that was previously attached to a namespace node. + * + ******************************************************************************/ +ACPI_STATUS +AcpiGetData ( + ACPI_HANDLE ObjHandle, + ACPI_OBJECT_HANDLER Handler, + void **Data) +{ + return (AcpiGetDataFull(ObjHandle, Handler, Data, NULL)); +} ACPI_EXPORT_SYMBOL (AcpiGetData) Modified: head/sys/contrib/dev/acpica/include/acpixf.h ============================================================================== --- head/sys/contrib/dev/acpica/include/acpixf.h Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/contrib/dev/acpica/include/acpixf.h Sat Jan 28 16:30:14 2017 (r312926) @@ -672,6 +672,14 @@ AcpiGetData ( ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS +AcpiGetDataFull ( + ACPI_HANDLE Object, + ACPI_OBJECT_HANDLER Handler, + void **Data, + void (*Callback)(void *))) + +ACPI_EXTERNAL_RETURN_STATUS ( +ACPI_STATUS AcpiDebugTrace ( const char *Name, UINT32 DebugLevel, Modified: head/sys/ddb/ddb.h ============================================================================== --- head/sys/ddb/ddb.h Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/ddb/ddb.h Sat Jan 28 16:30:14 2017 (r312926) @@ -219,6 +219,7 @@ bool db_stop_at_pc(int type, int code, bool *is_watchpoint); #define db_strcpy strcpy void db_trace_self(void); +void db_trace_self_depth(int); int db_trace_thread(struct thread *, int); bool db_value_of_name(const char *name, db_expr_t *valuep); bool db_value_of_name_pcpu(const char *name, db_expr_t *valuep); Modified: head/sys/dev/drm2/drm_agpsupport.c ============================================================================== --- head/sys/dev/drm2/drm_agpsupport.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_agpsupport.c Sat Jan 28 16:30:14 2017 (r312926) @@ -35,7 +35,6 @@ __FBSDID("$FreeBSD$"); #include <dev/drm2/drmP.h> -#include <linux/slab.h> #if __OS_HAS_AGP @@ -209,13 +208,15 @@ int drm_agp_alloc(struct drm_device *dev if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = kzalloc(sizeof(*entry), GFP_KERNEL))) + if (!(entry = malloc(sizeof(*entry), DRM_MEM_AGPLISTS, M_NOWAIT))) return -ENOMEM; + memset(entry, 0, sizeof(*entry)); + pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE; type = (u32) request->type; if (!(memory = agp_alloc_memory(dev->agp->bridge, type, pages << PAGE_SHIFT))) { - kfree(entry); + free(entry, DRM_MEM_AGPLISTS); return -ENOMEM; } @@ -375,7 +376,7 @@ int drm_agp_free(struct drm_device *dev, list_del(&entry->head); drm_free_agp(entry->memory, entry->pages); - kfree(entry); + free(entry, DRM_MEM_AGPLISTS); return 0; } EXPORT_SYMBOL(drm_agp_free); @@ -403,11 +404,12 @@ struct drm_agp_head *drm_agp_init(struct { struct drm_agp_head *head = NULL; - if (!(head = kzalloc(sizeof(*head), GFP_KERNEL))) + if (!(head = malloc(sizeof(*head), DRM_MEM_AGPLISTS, M_NOWAIT))) return NULL; + memset((void *)head, 0, sizeof(*head)); head->bridge = agp_find_device(); if (!head->bridge) { - kfree(head); + free(head, DRM_MEM_AGPLISTS); return NULL; } else { agp_get_info(head->bridge, &head->agp_info); Modified: head/sys/dev/drm2/drm_bufs.c ============================================================================== --- head/sys/dev/drm2/drm_bufs.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_bufs.c Sat Jan 28 16:30:14 2017 (r312926) @@ -39,6 +39,9 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/shm.h> +#include <linux/vmalloc.h> +#include <linux/slab.h> + #include <dev/pci/pcireg.h> #include <dev/drm2/drmP.h> @@ -216,7 +219,7 @@ static int drm_addmap_core(struct drm_de int ret; int align; - map = malloc(sizeof(*map), DRM_MEM_MAPS, M_NOWAIT); + map = kmalloc(sizeof(*map), GFP_KERNEL); if (!map) return -ENOMEM; @@ -230,7 +233,7 @@ static int drm_addmap_core(struct drm_de * when processes fork. */ if ((map->flags & _DRM_REMOVABLE) && map->type != _DRM_SHM) { - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } DRM_DEBUG("offset = 0x%08llx, size = 0x%08lx, type = %d\n", @@ -249,7 +252,7 @@ static int drm_addmap_core(struct drm_de * constant. */ if ((map->offset & ((resource_size_t)PAGE_MASK)) || (map->size & (PAGE_MASK))) { - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } map->mtrr = -1; @@ -281,7 +284,7 @@ static int drm_addmap_core(struct drm_de list->map->size = map->size; } - free(map, DRM_MEM_MAPS); + kfree(map); *maplist = list; return 0; } @@ -298,7 +301,7 @@ static int drm_addmap_core(struct drm_de if (map->type == _DRM_REGISTERS) { drm_core_ioremap(map, dev); if (!map->handle) { - free(map, DRM_MEM_MAPS); + kfree(map); return -ENOMEM; } } @@ -314,23 +317,23 @@ static int drm_addmap_core(struct drm_de list->map->size = map->size; } - free(map, DRM_MEM_MAPS); + kfree(map); *maplist = list; return 0; } - map->handle = malloc(map->size, DRM_MEM_MAPS, M_NOWAIT); + map->handle = vmalloc_user(map->size); DRM_DEBUG("%lu %d %p\n", map->size, drm_order(map->size), map->handle); if (!map->handle) { - free(map, DRM_MEM_MAPS); + kfree(map); return -ENOMEM; } map->offset = (unsigned long)map->handle; if (map->flags & _DRM_CONTAINS_LOCK) { /* Prevent a 2nd X Server from creating a 2nd lock */ if (dev->primary->master->lock.hw_lock != NULL) { - free(map->handle, DRM_MEM_MAPS); - free(map, DRM_MEM_MAPS); + kfree(map->handle); + kfree(map); return -EBUSY; } dev->sigdata.lock = dev->primary->master->lock.hw_lock = map->handle; /* Pointer to lock */ @@ -341,7 +344,7 @@ static int drm_addmap_core(struct drm_de int valid = 0; if (!drm_core_has_AGP(dev)) { - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } #ifdef __linux__ @@ -376,7 +379,7 @@ static int drm_addmap_core(struct drm_de } } if (!list_empty(&dev->agp->memory) && !valid) { - free(map, DRM_MEM_MAPS); + kfree(map); return -EPERM; } DRM_DEBUG("AGP offset = 0x%08llx, size = 0x%08lx\n", @@ -389,7 +392,7 @@ static int drm_addmap_core(struct drm_de break; case _DRM_SCATTER_GATHER: if (!dev->sg) { - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } map->handle = (void *)(dev->sg->vaddr + offset); @@ -405,7 +408,7 @@ static int drm_addmap_core(struct drm_de align = PAGE_SIZE; dmah = drm_pci_alloc(dev, map->size, align, BUS_SPACE_MAXADDR); if (!dmah) { - free(map, DRM_MEM_MAPS); + kfree(map); return -ENOMEM; } map->handle = dmah->vaddr; @@ -413,15 +416,15 @@ static int drm_addmap_core(struct drm_de map->dmah = dmah; break; default: - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } - list = malloc(sizeof(*list), DRM_MEM_MAPS, M_ZERO | M_NOWAIT); + list = kzalloc(sizeof(*list), GFP_KERNEL); if (!list) { if (map->type == _DRM_REGISTERS) drm_core_ioremapfree(map, dev); - free(map, DRM_MEM_MAPS); + kfree(map); return -EINVAL; } list->map = map; @@ -438,8 +441,8 @@ static int drm_addmap_core(struct drm_de if (ret) { if (map->type == _DRM_REGISTERS) drm_core_ioremapfree(map, dev); - free(map, DRM_MEM_MAPS); - free(list, DRM_MEM_MAPS); + kfree(map); + kfree(list); DRM_UNLOCK(dev); return ret; } @@ -523,7 +526,7 @@ int drm_rmmap_locked(struct drm_device * list_del(&r_list->head); drm_ht_remove_key(&dev->map_hash, r_list->user_token >> PAGE_SHIFT); - free(r_list, DRM_MEM_MAPS); + kfree(r_list); found = 1; break; } @@ -545,7 +548,7 @@ int drm_rmmap_locked(struct drm_device * } break; case _DRM_SHM: - free(map->handle, DRM_MEM_MAPS); + kfree(map->handle); if (master) { if (dev->sigdata.lock == master->lock.hw_lock) dev->sigdata.lock = NULL; @@ -564,7 +567,7 @@ int drm_rmmap_locked(struct drm_device * DRM_ERROR("tried to rmmap GEM object\n"); break; } - free(map, DRM_MEM_MAPS); + kfree(map); return 0; } @@ -655,16 +658,16 @@ static void drm_cleanup_buf_error(struct drm_pci_free(dev, entry->seglist[i]); } } - free(entry->seglist, DRM_MEM_SEGS); + kfree(entry->seglist); entry->seg_count = 0; } if (entry->buf_count) { for (i = 0; i < entry->buf_count; i++) { - free(entry->buflist[i].dev_private, DRM_MEM_BUFS); + kfree(entry->buflist[i].dev_private); } - free(entry->buflist, DRM_MEM_BUFS); + kfree(entry->buflist); entry->buf_count = 0; } @@ -761,8 +764,7 @@ int drm_addbufs_agp(struct drm_device * return -EINVAL; } - entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + entry->buflist = kcalloc(count, sizeof(*entry->buflist), GFP_KERNEL); if (!entry->buflist) { DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); @@ -790,8 +792,7 @@ int drm_addbufs_agp(struct drm_device * buf->file_priv = NULL; buf->dev_priv_size = dev->driver->dev_priv_size; - buf->dev_private = malloc(buf->dev_priv_size, DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + buf->dev_private = kzalloc(buf->dev_priv_size, GFP_KERNEL); if (!buf->dev_private) { /* Set count correctly so we free the proper amount. */ entry->buf_count = count; @@ -810,9 +811,8 @@ int drm_addbufs_agp(struct drm_device * DRM_DEBUG("byte_count: %d\n", byte_count); - temp_buflist = realloc(dma->buflist, - (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), - DRM_MEM_BUFS, M_NOWAIT); + temp_buflist = krealloc(dma->buflist, + (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), GFP_KERNEL); if (!temp_buflist) { /* Free the entry because it isn't valid */ drm_cleanup_buf_error(dev, entry); @@ -912,18 +912,16 @@ int drm_addbufs_pci(struct drm_device * return -EINVAL; } - entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + entry->buflist = kcalloc(count, sizeof(*entry->buflist), GFP_KERNEL); if (!entry->buflist) { DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; } - entry->seglist = malloc(count * sizeof(*entry->seglist), DRM_MEM_SEGS, - M_NOWAIT | M_ZERO); + entry->seglist = kcalloc(count, sizeof(*entry->seglist), GFP_KERNEL); if (!entry->seglist) { - free(entry->buflist, DRM_MEM_BUFS); + kfree(entry->buflist); DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; @@ -932,11 +930,12 @@ int drm_addbufs_pci(struct drm_device * /* Keep the original pagelist until we know all the allocations * have succeeded */ - temp_pagelist = malloc((dma->page_count + (count << page_order)) * - sizeof(*dma->pagelist), DRM_MEM_PAGES, M_NOWAIT); + temp_pagelist = kmalloc_array(dma->page_count + (count << page_order), + sizeof(*dma->pagelist), + GFP_KERNEL); if (!temp_pagelist) { - free(entry->buflist, DRM_MEM_BUFS); - free(entry->seglist, DRM_MEM_SEGS); + kfree(entry->buflist); + kfree(entry->seglist); DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; @@ -960,7 +959,7 @@ int drm_addbufs_pci(struct drm_device * entry->buf_count = count; entry->seg_count = count; drm_cleanup_buf_error(dev, entry); - free(temp_pagelist, DRM_MEM_PAGES); + kfree(temp_pagelist); DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; @@ -990,14 +989,14 @@ int drm_addbufs_pci(struct drm_device * buf->file_priv = NULL; buf->dev_priv_size = dev->driver->dev_priv_size; - buf->dev_private = malloc(buf->dev_priv_size, - DRM_MEM_BUFS, M_NOWAIT | M_ZERO); + buf->dev_private = kzalloc(buf->dev_priv_size, + GFP_KERNEL); if (!buf->dev_private) { /* Set count correctly so we free the proper amount. */ entry->buf_count = count; entry->seg_count = count; drm_cleanup_buf_error(dev, entry); - free(temp_pagelist, DRM_MEM_PAGES); + kfree(temp_pagelist); DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; @@ -1009,13 +1008,13 @@ int drm_addbufs_pci(struct drm_device * byte_count += PAGE_SIZE << page_order; } - temp_buflist = realloc(dma->buflist, - (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), - DRM_MEM_BUFS, M_NOWAIT); + temp_buflist = krealloc(dma->buflist, + (dma->buf_count + entry->buf_count) * + sizeof(*dma->buflist), GFP_KERNEL); if (!temp_buflist) { /* Free the entry because it isn't valid */ drm_cleanup_buf_error(dev, entry); - free(temp_pagelist, DRM_MEM_PAGES); + kfree(temp_pagelist); DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); return -ENOMEM; @@ -1030,7 +1029,7 @@ int drm_addbufs_pci(struct drm_device * * with the new one. */ if (dma->page_count) { - free(dma->pagelist, DRM_MEM_PAGES); + kfree(dma->pagelist); } dma->pagelist = temp_pagelist; @@ -1124,8 +1123,7 @@ static int drm_addbufs_sg(struct drm_dev return -EINVAL; } - entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + entry->buflist = kcalloc(count, sizeof(*entry->buflist), GFP_KERNEL); if (!entry->buflist) { DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); @@ -1154,8 +1152,7 @@ static int drm_addbufs_sg(struct drm_dev buf->file_priv = NULL; buf->dev_priv_size = dev->driver->dev_priv_size; - buf->dev_private = malloc(buf->dev_priv_size, DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + buf->dev_private = kzalloc(buf->dev_priv_size, GFP_KERNEL); if (!buf->dev_private) { /* Set count correctly so we free the proper amount. */ entry->buf_count = count; @@ -1174,9 +1171,9 @@ static int drm_addbufs_sg(struct drm_dev DRM_DEBUG("byte_count: %d\n", byte_count); - temp_buflist = realloc(dma->buflist, - (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), - DRM_MEM_BUFS, M_NOWAIT); + temp_buflist = krealloc(dma->buflist, + (dma->buf_count + entry->buf_count) * + sizeof(*dma->buflist), GFP_KERNEL); if (!temp_buflist) { /* Free the entry because it isn't valid */ drm_cleanup_buf_error(dev, entry); @@ -1280,8 +1277,7 @@ static int drm_addbufs_fb(struct drm_dev return -EINVAL; } - entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + entry->buflist = kzalloc(count * sizeof(*entry->buflist), GFP_KERNEL); if (!entry->buflist) { DRM_UNLOCK(dev); atomic_dec(&dev->buf_alloc); @@ -1309,8 +1305,7 @@ static int drm_addbufs_fb(struct drm_dev buf->file_priv = NULL; buf->dev_priv_size = dev->driver->dev_priv_size; - buf->dev_private = malloc(buf->dev_priv_size, DRM_MEM_BUFS, - M_NOWAIT | M_ZERO); + buf->dev_private = kmalloc(buf->dev_priv_size, GFP_KERNEL); if (!buf->dev_private) { /* Set count correctly so we free the proper amount. */ entry->buf_count = count; @@ -1329,9 +1324,8 @@ static int drm_addbufs_fb(struct drm_dev DRM_DEBUG("byte_count: %d\n", byte_count); - temp_buflist = realloc(dma->buflist, - (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), - DRM_MEM_BUFS, M_NOWAIT); + temp_buflist = krealloc(dma->buflist, + (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist), GFP_KERNEL); if (!temp_buflist) { /* Free the entry because it isn't valid */ drm_cleanup_buf_error(dev, entry); Modified: head/sys/dev/drm2/drm_dma.c ============================================================================== --- head/sys/dev/drm2/drm_dma.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_dma.c Sat Jan 28 16:30:14 2017 (r312926) @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include <dev/drm2/drmP.h> +#include <linux/slab.h> /** * Initialize the DMA data. @@ -89,18 +90,17 @@ void drm_dma_takedown(struct drm_device drm_pci_free(dev, dma->bufs[i].seglist[j]); } } - free(dma->bufs[i].seglist, DRM_MEM_SEGS); + kfree(dma->bufs[i].seglist); } if (dma->bufs[i].buf_count) { for (j = 0; j < dma->bufs[i].buf_count; j++) { - free(dma->bufs[i].buflist[j].dev_private, - DRM_MEM_BUFS); + kfree(dma->bufs[i].buflist[j].dev_private); } - free(dma->bufs[i].buflist, DRM_MEM_BUFS); + kfree(dma->bufs[i].buflist); } } - free(dma->buflist, DRM_MEM_BUFS); + kfree(dma->buflist); free(dma->pagelist, DRM_MEM_PAGES); free(dev->dma, DRM_MEM_DRIVER); dev->dma = NULL; Modified: head/sys/dev/drm2/drm_drv.c ============================================================================== --- head/sys/dev/drm2/drm_drv.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_drv.c Sat Jan 28 16:30:14 2017 (r312926) @@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$"); #include <sys/sysent.h> -#include <linux/slab.h> #include <dev/drm2/drmP.h> #include <dev/drm2/drm_core.h> #include <dev/drm2/drm_global.h> @@ -212,7 +211,7 @@ int drm_lastclose(struct drm_device * de if (entry->bound) drm_unbind_agp(entry->memory); drm_free_agp(entry->memory, entry->pages); - kfree(entry); + free(entry, DRM_MEM_AGPLISTS); } INIT_LIST_HEAD(&dev->agp->memory); Modified: head/sys/dev/drm2/drm_os_freebsd.c ============================================================================== --- head/sys/dev/drm2/drm_os_freebsd.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_os_freebsd.c Sat Jan 28 16:30:14 2017 (r312926) @@ -16,7 +16,6 @@ MALLOC_DEFINE(DRM_MEM_MAGIC, "drm_magic" MALLOC_DEFINE(DRM_MEM_MINOR, "drm_minor", "DRM MINOR Data Structures"); MALLOC_DEFINE(DRM_MEM_IOCTLS, "drm_ioctls", "DRM IOCTL Data Structures"); MALLOC_DEFINE(DRM_MEM_MAPS, "drm_maps", "DRM MAP Data Structures"); -MALLOC_DEFINE(DRM_MEM_BUFS, "drm_bufs", "DRM BUFFER Data Structures"); MALLOC_DEFINE(DRM_MEM_SEGS, "drm_segs", "DRM SEGMENTS Data Structures"); MALLOC_DEFINE(DRM_MEM_PAGES, "drm_pages", "DRM PAGES Data Structures"); MALLOC_DEFINE(DRM_MEM_FILES, "drm_files", "DRM FILE Data Structures"); @@ -24,6 +23,7 @@ MALLOC_DEFINE(DRM_MEM_QUEUES, "drm_queue MALLOC_DEFINE(DRM_MEM_CMDS, "drm_cmds", "DRM COMMAND Data Structures"); MALLOC_DEFINE(DRM_MEM_MAPPINGS, "drm_mapping", "DRM MAPPING Data Structures"); MALLOC_DEFINE(DRM_MEM_BUFLISTS, "drm_buflists", "DRM BUFLISTS Data Structures"); +MALLOC_DEFINE(DRM_MEM_AGPLISTS, "drm_agplists", "DRM AGPLISTS Data Structures"); MALLOC_DEFINE(DRM_MEM_CTXBITMAP, "drm_ctxbitmap", "DRM CTXBITMAP Data Structures"); MALLOC_DEFINE(DRM_MEM_SGLISTS, "drm_sglists", "DRM SGLISTS Data Structures"); @@ -495,5 +495,4 @@ MODULE_VERSION(drmn, 1); MODULE_DEPEND(drmn, agp, 1, 1, 1); MODULE_DEPEND(drmn, pci, 1, 1, 1); MODULE_DEPEND(drmn, mem, 1, 1, 1); -MODULE_DEPEND(drmn, linuxkpi, 1, 1, 1); MODULE_DEPEND(drmn, iicbus, 1, 1, 1); Modified: head/sys/dev/drm2/drm_os_freebsd.h ============================================================================== --- head/sys/dev/drm2/drm_os_freebsd.h Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_os_freebsd.h Sat Jan 28 16:30:14 2017 (r312926) @@ -544,7 +544,6 @@ MALLOC_DECLARE(DRM_MEM_MAGIC); MALLOC_DECLARE(DRM_MEM_MINOR); MALLOC_DECLARE(DRM_MEM_IOCTLS); MALLOC_DECLARE(DRM_MEM_MAPS); -MALLOC_DECLARE(DRM_MEM_BUFS); MALLOC_DECLARE(DRM_MEM_SEGS); MALLOC_DECLARE(DRM_MEM_PAGES); MALLOC_DECLARE(DRM_MEM_FILES); @@ -552,6 +551,7 @@ MALLOC_DECLARE(DRM_MEM_QUEUES); MALLOC_DECLARE(DRM_MEM_CMDS); MALLOC_DECLARE(DRM_MEM_MAPPINGS); MALLOC_DECLARE(DRM_MEM_BUFLISTS); +MALLOC_DECLARE(DRM_MEM_AGPLISTS); MALLOC_DECLARE(DRM_MEM_CTXBITMAP); MALLOC_DECLARE(DRM_MEM_SGLISTS); MALLOC_DECLARE(DRM_MEM_MM); Modified: head/sys/dev/drm2/drm_stub.c ============================================================================== --- head/sys/dev/drm2/drm_stub.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/dev/drm2/drm_stub.c Sat Jan 28 16:30:14 2017 (r312926) @@ -36,7 +36,6 @@ __FBSDID("$FreeBSD$"); #include <dev/drm2/drmP.h> #include <dev/drm2/drm_core.h> -#include <linux/slab.h> #ifdef DRM_DEBUG_DEFAULT_ON unsigned int drm_debug = (DRM_DEBUGBITS_DEBUG | DRM_DEBUGBITS_KMS | @@ -316,7 +315,7 @@ void drm_cancel_fill_in_dev(struct drm_d DRM_MTRR_WC); DRM_DEBUG("mtrr_del=%d\n", retval); } - kfree(dev->agp); + free(dev->agp, DRM_MEM_AGPLISTS); dev->agp = NULL; drm_ht_remove(&dev->map_hash); @@ -468,7 +467,7 @@ void drm_put_dev(struct drm_device *dev) drm_sysctl_cleanup(dev); if (drm_core_has_AGP(dev) && dev->agp) { - kfree(dev->agp); + free(dev->agp, DRM_MEM_AGPLISTS); dev->agp = NULL; } Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- head/sys/fs/nfsserver/nfs_nfsdstate.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/fs/nfsserver/nfs_nfsdstate.c Sat Jan 28 16:30:14 2017 (r312926) @@ -3081,7 +3081,7 @@ tryagain: new_deleg->ls_stateid.other[2] = delegstateidp->other[2] = nfsrv_nextstateindex(clp); if (writedeleg && !NFSVNO_EXRDONLY(exp) && - (nfsrv_writedelegifpos || !readonly) && + (nfsrv_writedelegifpos && !readonly) && (new_stp->ls_flags & NFSLCK_WANTRDELEG) == 0) { new_deleg->ls_flags = (NFSLCK_DELEGWRITE | NFSLCK_READACCESS | NFSLCK_WRITEACCESS); @@ -3153,7 +3153,7 @@ tryagain: delegstateidp->other[2] = nfsrv_nextstateindex(clp); if (writedeleg && !NFSVNO_EXRDONLY(exp) && - (nfsrv_writedelegifpos || !readonly) && + (nfsrv_writedelegifpos && !readonly) && ((nd->nd_flag & ND_NFSV41) == 0 || (new_stp->ls_flags & NFSLCK_WANTRDELEG) == 0)) { Modified: head/sys/kern/kern_descrip.c ============================================================================== --- head/sys/kern/kern_descrip.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/kern/kern_descrip.c Sat Jan 28 16:30:14 2017 (r312926) @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include <sys/signalvar.h> #include <sys/kdb.h> #include <sys/stat.h> +#include <sys/seq.h> #include <sys/sx.h> #include <sys/syscallsubr.h> #include <sys/sysctl.h> @@ -4074,6 +4075,13 @@ invfo_sendfile(struct file *fp, int sock return (EINVAL); } +bool +fd_modified(struct filedesc *fdp, int fd, uint32_t seq) +{ + + return (!seq_consistent(fd_seq(fdp->fd_files, fd), seq)); +} + /*-------------------------------------------------------------------*/ /* Modified: head/sys/kern/kern_shutdown.c ============================================================================== --- head/sys/kern/kern_shutdown.c Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/kern/kern_shutdown.c Sat Jan 28 16:30:14 2017 (r312926) @@ -722,6 +722,14 @@ vpanic(const char *fmt, va_list ap) spinlock_enter(); +#if 0 +/***** DEBUGGING DRM *****/ + + doadump(0); + EVENTHANDLER_INVOKE(shutdown_final, RB_NOSYNC); + +/************************/ +#endif #ifdef SMP /* * stop_cpus_hard(other_cpus) should prevent multiple CPUs from Modified: head/sys/modules/drm2/drm2/Makefile ============================================================================== --- head/sys/modules/drm2/drm2/Makefile Sat Jan 28 16:24:06 2017 (r312925) +++ head/sys/modules/drm2/drm2/Makefile Sat Jan 28 16:30:14 2017 (r312926) @@ -48,8 +48,6 @@ SRCS = \ ati_pcigart.c *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701281630.v0SGUEfW063907>