• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/lib/

Lines Matching defs:miter

323  * @miter: sg mapping iter to be started
328 * Starts mapping iterator @miter.
333 void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
336 memset(miter, 0, sizeof(struct sg_mapping_iter));
338 miter->__sg = sgl;
339 miter->__nents = nents;
340 miter->__offset = 0;
342 miter->__flags = flags;
348 * @miter: sg mapping iter to proceed
351 * Proceeds @miter@ to the next mapping. @miter@ should have been
353 * @miter@->page, @miter@->addr and @miter@->length point to the
358 * @miter@ is stopped. May sleep if !SG_MITER_ATOMIC.
361 * true if @miter contains the next mapping. false if end of sg
364 bool sg_miter_next(struct sg_mapping_iter *miter)
369 if (!miter->__nents)
372 sg_miter_stop(miter);
375 while (miter->__offset == miter->__sg->length) {
376 if (--miter->__nents) {
377 miter->__sg = sg_next(miter->__sg);
378 miter->__offset = 0;
384 off = miter->__sg->offset + miter->__offset;
385 len = miter->__sg->length - miter->__offset;
387 miter->page = nth_page(sg_page(miter->__sg), off >> PAGE_SHIFT);
389 miter->length = min_t(unsigned int, len, PAGE_SIZE - off);
390 miter->consumed = miter->length;
392 if (miter->__flags & SG_MITER_ATOMIC)
393 miter->addr = kmap_atomic(miter->page, KM_BIO_SRC_IRQ) + off;
395 miter->addr = kmap(miter->page) + off;
403 * @miter: sg mapping iter to be stopped
406 * Stops mapping iterator @miter. @miter should have been started
414 void sg_miter_stop(struct sg_mapping_iter *miter)
416 WARN_ON(miter->consumed > miter->length);
419 if (miter->addr) {
420 miter->__offset += miter->consumed;
422 if (miter->__flags & SG_MITER_TO_SG)
423 flush_kernel_dcache_page(miter->page);
425 if (miter->__flags & SG_MITER_ATOMIC) {
427 kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ);
429 kunmap(miter->page);
431 miter->page = NULL;
432 miter->addr = NULL;
433 miter->length = 0;
434 miter->consumed = 0;
455 struct sg_mapping_iter miter;
464 sg_miter_start(&miter, sgl, nents, sg_flags);
468 while (sg_miter_next(&miter) && offset < buflen) {
471 len = min(miter.length, buflen - offset);
474 memcpy(buf + offset, miter.addr, len);
476 memcpy(miter.addr, buf + offset, len);
481 sg_miter_stop(&miter);